diff options
author | fowlmouth <phowl.mouth@gmail.com> | 2015-03-27 02:07:09 -0500 |
---|---|---|
committer | fowlmouth <phowl.mouth@gmail.com> | 2015-03-27 02:07:09 -0500 |
commit | cfbb7390e2ed6b881559c3717b85b7e932c88476 (patch) | |
tree | af66ec9c6d5a05f5cebfaf1dc7803b596b6e3150 /tests | |
parent | e80840c40af5c9108e9aed1573cf4f048a2757b8 (diff) | |
download | Nim-cfbb7390e2ed6b881559c3717b85b7e932c88476.tar.gz |
added test for symbol type
Diffstat (limited to 'tests')
-rw-r--r-- | tests/macros/typesapi2.nim | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/macros/typesapi2.nim b/tests/macros/typesapi2.nim new file mode 100644 index 000000000..016295ba4 --- /dev/null +++ b/tests/macros/typesapi2.nim @@ -0,0 +1,49 @@ +# tests to see if a symbol returned from macros.getType() can +# be used as a type +import macros + +macro testTypesym (t:stmt): expr = + var ty = t.getType + if ty.typekind == ntyTypedesc: + # skip typedesc get to the real type + ty = ty[1].getType + + if ty.kind == nnkSym: return ty + assert ty.kind == nnkBracketExpr + assert ty[0].kind == nnkSym + result = ty[0] + return + +type TestFN = proc(a,b:int):int +var iii: testTypesym(TestFN) +static: assert iii is TestFN + +proc foo11 : testTypesym(void) = + echo "HI!" +static: assert foo11 is proc():void + +var sss: testTypesym(seq[int]) +static: assert sss is seq[int] +# very nice :> + +static: assert array[2,int] is testTypesym(array[2,int]) +static: assert(ref int is testTypesym(ref int)) +static: assert(void is testTypesym(void)) + + +macro tts2 (t:stmt, idx:int): expr = + var ty = t.getType + if ty.typekind == ntyTypedesc: + # skip typedesc get to the real type + ty = ty[1].getType + + if ty.kind == nnkSym: return ty + assert ty.kind == nnkBracketExpr + return ty[idx.intval.int] +type TestFN2 = proc(a:int,b:float):string +static: + assert(tts2(TestFN2, 0) is TestFN2) + assert(tts2(TestFN2, 1) is string) + assert(tts2(TestFN2, 2) is int) + assert(tts2(TestFN2, 3) is float) + |