From 8b4c17a1404b256857ae9a90ac0ceaa2940109c2 Mon Sep 17 00:00:00 2001 From: Araq Date: Mon, 16 Sep 2019 09:03:50 +0200 Subject: [PATCH] better implementation --- compiler/semexprs.nim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 1ab43d84fe..3d529509cc 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2019,8 +2019,14 @@ proc semQuoteAst(c: PContext, n: PNode): PNode = var tmpl = semTemplateDef(c, dummyTemplate) quotes[0] = tmpl[namePos] # This adds a call to newIdentNode("result") as the first argument to the template call - let identNode = getCompilerProc(c.graph, "newIdentNode") - quotes[1] = newNode(nkCall, n.info, @[identNode.newSymNode, newStrNode(nkStrLit, "result")]) + let identNodeSym = getCompilerProc(c.graph, "newIdentNode") + # so that new Nim compilers can compile old macros.nim versions, we check for 'nil' + # here and provide the old fallback solution: + let identNode = if identNodeSym == nil: + newIdentNode(getIdent(c.cache, "newIdentNode"), n.info) + else: + identNodeSym.newSymNode + quotes[1] = newNode(nkCall, n.info, @[identNode, newStrNode(nkStrLit, "result")]) result = newNode(nkCall, n.info, @[ createMagic(c.graph, "getAst", mExpandToAst).newSymNode, newNode(nkCall, n.info, quotes)])