From b550fb54d94170ddf6d50fc4117077af71268345 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:45:31 +0800 Subject: [PATCH] fixes #24641; `quote do` captures no variables under current macros --- compiler/semexprs.nim | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index f959783225..a191453f27 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2447,7 +2447,11 @@ proc semQuoteAst(c: PContext, n: PNode): PNode = 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) + # don't allow templates to capture variables in macors without backticks + let oldScope = c.currentScope + c.currentScope = c.topLevelScope var tmpl = semTemplateDef(c, dummyTemplate) + c.currentScope = oldScope quotes[0] = tmpl[namePos] # This adds a call to newIdentNode("result") as the first argument to the template call let identNodeSym = getCompilerProc(c.graph, "newIdentNode")