diff options
-rw-r--r-- | compiler/vmdeps.nim | 11 | ||||
-rw-r--r-- | tests/macros/t9194.nim | 20 |
2 files changed, 29 insertions, 2 deletions
diff --git a/compiler/vmdeps.nim b/compiler/vmdeps.nim index eb6111165..52e4aab74 100644 --- a/compiler/vmdeps.nim +++ b/compiler/vmdeps.nim @@ -237,8 +237,15 @@ proc mapTypeToAstX(cache: IdentCache; t: PType; info: TLineInfo; of tyRange: result = newNodeIT(nkBracketExpr, if t.n.isNil: info else: t.n.info, t) result.add atomicType("range", mRange) - result.add t.n.sons[0].copyTree - result.add t.n.sons[1].copyTree + if inst: + let rng = newNodeX(nkInfix) + rng.add newIdentNode(getIdent(cache, ".."), info) + rng.add t.n.sons[0].copyTree + rng.add t.n.sons[1].copyTree + result.add rng + else: + result.add t.n.sons[0].copyTree + result.add t.n.sons[1].copyTree of tyPointer: result = atomicType("pointer", mPointer) of tyString: result = atomicType("string", mString) of tyCString: result = atomicType("cstring", mCString) diff --git a/tests/macros/t9194.nim b/tests/macros/t9194.nim new file mode 100644 index 000000000..ef58750aa --- /dev/null +++ b/tests/macros/t9194.nim @@ -0,0 +1,20 @@ +discard """ + output: ''' +range[0 .. 100] +array[0 .. 100, int] +''' +""" + +import macros + +type + Foo1 = range[0 .. 100] + Foo2 = array[0 .. 100, int] + +macro get(T: typedesc): untyped = + # Get the X out of typedesc[X] + let tmp = getTypeImpl(T) + result = newStrLitNode(getTypeImpl(tmp[1]).repr) + +echo Foo1.get +echo Foo2.get |