summary refs log tree commit diff stats
path: root/tests/macros/tvarious.nim
diff options
context:
space:
mode:
authorMiran <narimiran@users.noreply.github.com>2018-10-14 17:08:42 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-10-14 17:08:42 +0200
commita30ba8cc370736b8b737292a8c2b46adadc6f8be (patch)
treeccded85b9aec0f61daa8f39b8d8cc8e344e9388d /tests/macros/tvarious.nim
parent8955470644972e2d1f2b029650c04505ebacca23 (diff)
downloadNim-a30ba8cc370736b8b737292a8c2b46adadc6f8be.tar.gz
merge macros tests (#9367)
Diffstat (limited to 'tests/macros/tvarious.nim')
-rw-r--r--tests/macros/tvarious.nim111
1 files changed, 111 insertions, 0 deletions
diff --git a/tests/macros/tvarious.nim b/tests/macros/tvarious.nim
new file mode 100644
index 000000000..15bd28a37
--- /dev/null
+++ b/tests/macros/tvarious.nim
@@ -0,0 +1,111 @@
+discard """
+  msg: '''
+range[0 .. 100]
+array[0 .. 100, int]
+10
+test
+'''
+
+  output: '''
+x = 10
+x + y = 30
+proc foo[T, N: static[int]]()
+proc foo[T; N: static[int]]()
+a[0]: 42
+a[1]: 45
+x: some string
+'''
+"""
+
+
+import macros, sugar
+
+
+block tdump:
+  let
+    x = 10
+    y = 20
+  dump x
+  dump(x + y)
+
+
+block texprcolonexpr:
+  macro def(x): untyped =
+    echo treeRepr(x)
+
+  def name(a, b:cint) => nil
+
+
+
+block tgenericparams:
+  macro test():string =
+    let expr0 = "proc foo[T, N: static[int]]()"
+    let expr1 = "proc foo[T; N: static[int]]()"
+
+    $toStrLit(parseExpr(expr0)) & "\n" & $toStrLit(parseExpr(expr1))
+
+  echo test()
+
+
+
+block tidgen:
+  # Test compile-time state in same module
+  var gid {.compileTime.} = 3
+
+  macro genId(): int =
+    result = newIntLitNode(gid)
+    inc gid
+
+  proc Id1(): int {.compileTime.} = return genId()
+  proc Id2(): int {.compileTime.} = return genId()
+
+  doAssert Id1() == 3
+  doAssert Id2() == 4
+
+
+
+block tlexerex:
+  macro match(s: cstring|string; pos: int; sections: varargs[untyped]): untyped =
+    for sec in sections:
+      expectKind sec, nnkOfBranch
+      expectLen sec, 2
+    result = newStmtList()
+
+  var input = "the input"
+  var pos = 0
+  match input, pos:
+  of r"[a-zA-Z_]\w+": echo "an identifier"
+  of r"\d+": echo "an integer"
+  of r".": echo "something else"
+
+
+
+block tlineinfo:
+  # issue #5617, feature request
+  type Test = object
+
+  macro mixer(n: typed): untyped =
+    let x = newIdentNode("echo")
+    x.copyLineInfo(n)
+    result = newLit(x.lineInfo == n.lineInfo)
+
+  var z = mixer(Test)
+  doAssert z
+
+
+
+block tdebugstmt:
+  macro debug(n: varargs[untyped]): untyped =
+    result = newNimNode(nnkStmtList, n)
+    for i in 0..n.len-1:
+      add(result, newCall("write", newIdentNode("stdout"), toStrLit(n[i])))
+      add(result, newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
+      add(result, newCall("writeLine", newIdentNode("stdout"), n[i]))
+
+  var
+    a: array[0..10, int]
+    x = "some string"
+  a[0] = 42
+  a[1] = 45
+
+  debug(a[0], a[1], x)