summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2019-05-06 21:42:41 +0200
committerAraq <rumpf_a@web.de>2019-05-06 21:42:49 +0200
commit2475d92c36e26e44372175c2cf4c21fbab084619 (patch)
treed05c6c9ddca92655dc36cdae5d3aaf52f23c31d0
parenta85d3879282a15e85ce9dd18b9a5bf020096a76c (diff)
downloadNim-2475d92c36e26e44372175c2cf4c21fbab084619.tar.gz
fixes #10192
-rw-r--r--compiler/evaltempl.nim2
-rw-r--r--tests/template/tparams_gensymed.nim20
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/evaltempl.nim b/compiler/evaltempl.nim
index 14388367a..9cc9ffc28 100644
--- a/compiler/evaltempl.nim
+++ b/compiler/evaltempl.nim
@@ -37,7 +37,7 @@ proc evalTemplateAux(templ, actual: PNode, c: var TemplCtx, result: PNode) =
   case templ.kind
   of nkSym:
     var s = templ.sym
-    if s.owner == nil or s.owner.id == c.owner.id:
+    if (s.owner == nil and s.kind == skParam) or s.owner == c.owner:
       if s.kind == skParam and sfGenSym notin s.flags:
         handleParam actual.sons[s.position]
       elif (s.owner != nil) and (s.kind == skGenericParam or
diff --git a/tests/template/tparams_gensymed.nim b/tests/template/tparams_gensymed.nim
index 91fa26596..b19ed7afc 100644
--- a/tests/template/tparams_gensymed.nim
+++ b/tests/template/tparams_gensymed.nim
@@ -110,3 +110,23 @@ implementUnary(): x*x
 
 registerInstantiation(int)
 registerInstantiation(float)
+
+# bug #10192
+template nest(body) {.dirty.} =
+  template p1(b1: untyped) {.dirty, used.} =
+    template implp1: untyped {.dirty.} = b1
+  template p2(b2: untyped) {.dirty, used.} =
+    template implp2: untyped {.dirty.} = b2
+
+  body
+  implp1
+  implp2
+
+template test() =
+  nest:
+    p1:
+      var foo = "bar"
+    p2:
+      doAssert(foo.len == 3)
+
+test()