diff options
-rw-r--r-- | compiler/semexprs.nim | 5 | ||||
-rw-r--r-- | tests/stdlib/tmacros.nim | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index a55d74a24..930fd3516 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2224,8 +2224,9 @@ proc semQuoteAst(c: PContext, n: PNode): PNode = dummyTemplate[paramsPos].add getSysSym(c.graph, n.info, "untyped").newSymNode # return type dummyTemplate[paramsPos].add newTreeI(nkIdentDefs, n.info, ids[0], getSysSym(c.graph, n.info, "typed").newSymNode, c.graph.emptyNode) for i in 1..<ids.len: - let typ = semExprWithType(c, quotes[i+1], {}).typ - if tfTriggersCompileTime notin typ.flags and typ.kind != tyTypeDesc: + let exp = semExprWithType(c, quotes[i+1], {}) + let typ = exp.typ + if tfTriggersCompileTime notin typ.flags and exp.kind == nkSym and exp.sym.kind notin routineKinds + {skType}: dummyTemplate[paramsPos].add newTreeI(nkIdentDefs, n.info, ids[i], newNodeIT(nkType, n.info, typ), c.graph.emptyNode) else: dummyTemplate[paramsPos].add newTreeI(nkIdentDefs, n.info, ids[i], getSysSym(c.graph, n.info, "typed").newSymNode, c.graph.emptyNode) diff --git a/tests/stdlib/tmacros.nim b/tests/stdlib/tmacros.nim index 7ccb7e7c7..974594dee 100644 --- a/tests/stdlib/tmacros.nim +++ b/tests/stdlib/tmacros.nim @@ -323,3 +323,14 @@ block: discard m hello(12) + +block: + proc hello(x: int, y: typedesc) = + discard + + macro main = + let x = 12 + result = quote do: + `hello`(12, type(x)) + + main() |