diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index cd7428b627ea0..713867b7660fb 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1278,7 +1278,8 @@ proc typeSectionRightSidePass(c: PContext, n: PNode) = incl st.flags, tfRefsAnonObj let obj = newSym(skType, getIdent(c.cache, s.name.s & ":ObjectType"), nextId c.idgen, getCurrOwner(c), s.info) - obj.ast = a + obj.ast = a.copyTree + obj.ast[0] = newSymNode(obj) if sfPure in s.flags: obj.flags.incl sfPure obj.typ = st.lastSon diff --git a/tests/macros/tgetimpl.nim b/tests/macros/tgetimpl.nim index d231a4336a579..de655561b885d 100644 --- a/tests/macros/tgetimpl.nim +++ b/tests/macros/tgetimpl.nim @@ -65,3 +65,21 @@ macro check_gen_proc(ex: typed): (bool, bool) = let a = @[1,2,3] assert: check_gen_proc(len(a)) == (false, true) + +#--------------------------------------------------------------- +# issue #16110 + +macro check(x: type): untyped = + let z = getType(x) + let y = getImpl(z[1]) + echo z.treeRepr + expectKind(z[1], nnkSym) + expectKind(y[0], nnkSym) + doAssert(y[0] == z[1]) + +type + TirePtr = ptr object + code: int + +var z: TirePtr +check(typeof(z[])) \ No newline at end of file