diff options
author | Araq <rumpf_a@web.de> | 2019-05-06 21:42:41 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-05-06 21:42:49 +0200 |
commit | 2475d92c36e26e44372175c2cf4c21fbab084619 (patch) | |
tree | d05c6c9ddca92655dc36cdae5d3aaf52f23c31d0 | |
parent | a85d3879282a15e85ce9dd18b9a5bf020096a76c (diff) | |
download | Nim-2475d92c36e26e44372175c2cf4c21fbab084619.tar.gz |
fixes #10192
-rw-r--r-- | compiler/evaltempl.nim | 2 | ||||
-rw-r--r-- | tests/template/tparams_gensymed.nim | 20 |
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() |