summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAdam Strzelecki <ono@java.pl>2015-05-13 22:32:10 +0200
committerAdam Strzelecki <ono@java.pl>2015-05-17 15:28:41 +0200
commit1d47617d1b72c642fac5543f38aa24330b0f9a19 (patch)
treede71d33b3adcc3264dcd5a84ff0b0ed35fc40cc6 /tests
parent63f1e0327817b0e7abacc3c0214ea94980f5c2ea (diff)
downloadNim-1d47617d1b72c642fac5543f38aa24330b0f9a19.tar.gz
Macros: Introduce getType(t: typedesc): NimNode
Since typedesc are exception in macros and they are not implicitly converted to
NimNode on macro call, we need some means to perform such conversion on demand.

Fortunately it is as simple as declaring new magic "NGetType" proc with
typedesc parameter.

NOTE: Keeping actual macro exceptional behavior for typedesc is important,
since it allows passing typedesc macro parameter to other procs or macros
expecting type parameter. If typedesc parameter was implicitly converted, then
we would lost this ability.
Diffstat (limited to 'tests')
-rw-r--r--tests/macros/tgettype.nim20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/macros/tgettype.nim b/tests/macros/tgettype.nim
new file mode 100644
index 000000000..0eab6c0a0
--- /dev/null
+++ b/tests/macros/tgettype.nim
@@ -0,0 +1,20 @@
+discard """
+msg: '''ObjectTy(Sym(Model), RecList(Sym(name), Sym(password)))
+BracketExpr(Sym(typeDesc), Sym(User))'''
+"""
+import strutils, macros
+
+type
+  Model = object of RootObj
+  User = object of Model
+    name : string
+    password : string
+
+macro testUser: expr =
+  return newLit(User.getType.lispRepr)
+
+macro testGeneric(T: typedesc[Model]): expr =
+  return newLit(T.getType.lispRepr)
+
+echo testUser
+echo User.testGeneric