handle quoted routine symbols and non symbols expressions as before (#21740)

This commit is contained in:
ringabout
2023-04-28 16:25:31 +08:00
committed by GitHub
parent 220b450489
commit 560fa9a1fe
2 changed files with 14 additions and 2 deletions

View File

@@ -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)

View File

@@ -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()