fixes #2670
This commit is contained in:
parent
06a8c377e2
commit
4f8d982d5b
2 changed files with 32 additions and 4 deletions
|
|
@ -184,6 +184,21 @@ proc addLocalDecl(c: var TemplCtx, n: var PNode, k: TSymKind) =
|
||||||
else:
|
else:
|
||||||
let ident = getIdentNode(c, n)
|
let ident = getIdentNode(c, n)
|
||||||
if not isTemplParam(c, ident):
|
if not isTemplParam(c, ident):
|
||||||
|
# fix #2670, consider:
|
||||||
|
#
|
||||||
|
# when b:
|
||||||
|
# var a = "hi"
|
||||||
|
# else:
|
||||||
|
# var a = 5
|
||||||
|
# echo a
|
||||||
|
#
|
||||||
|
# We need to ensure that both 'a' produce the same gensym'ed symbol.
|
||||||
|
# So we need only check the *current* scope.
|
||||||
|
let s = localSearchInScope(c.c, considerQuotedIdent ident)
|
||||||
|
if s != nil and s.owner == c.owner and sfGenSym in s.flags:
|
||||||
|
styleCheckUse(n.info, s)
|
||||||
|
replaceIdentBySym(n, newSymNode(s, n.info))
|
||||||
|
else:
|
||||||
let local = newGenSym(k, ident, c)
|
let local = newGenSym(k, ident, c)
|
||||||
addPrelimDecl(c.c, local)
|
addPrelimDecl(c.c, local)
|
||||||
styleCheckDef(n.info, local)
|
styleCheckDef(n.info, local)
|
||||||
|
|
|
||||||
13
tests/template/twhen_gensym.nim
Normal file
13
tests/template/twhen_gensym.nim
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
discard """
|
||||||
|
output: "hi"
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #2670
|
||||||
|
template testTemplate(b: bool): stmt =
|
||||||
|
when b:
|
||||||
|
var a = "hi"
|
||||||
|
else:
|
||||||
|
var a = 5
|
||||||
|
echo a
|
||||||
|
|
||||||
|
testTemplate(true)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue