fixes #19575 (#19596) [backport]

* fixes #19575

* better bugfix
This commit is contained in:
Andreas Rumpf
2022-03-09 11:42:09 +01:00
committed by GitHub
parent 0d6795a771
commit 2beefb9aa0
2 changed files with 27 additions and 2 deletions

View File

@@ -1351,13 +1351,15 @@ proc preprocess(c: var PreprocessContext; n: PNode): PNode =
case n.kind
of nkTryStmt:
let f = n.lastSon
var didAddSomething = false
if f.kind == nkFinally:
c.finallys.add f.lastSon
didAddSomething = true
for i in 0 ..< n.len:
result[i] = preprocess(c, n[i])
if f.kind == nkFinally:
if didAddSomething:
discard c.finallys.pop()
of nkWhileStmt, nkBlockStmt:
@@ -1384,7 +1386,7 @@ proc preprocess(c: var PreprocessContext; n: PNode): PNode =
result = newNodeI(nkStmtList, n.info)
for i in countdown(c.finallys.high, fin):
var vars = FreshVarsContext(tab: initTable[int, PSym](), config: c.config, info: n.info, idgen: c.idgen)
result.add freshVars(preprocess(c, c.finallys[i]), vars)
result.add freshVars(copyTree(c.finallys[i]), vars)
c.idgen = vars.idgen
result.add n
of nkSkip: discard

View File

@@ -251,3 +251,26 @@ block:
for x in ff(@[1, 2], @[1, 2, 3]):
echo x
# bug #19575
iterator bb() {.closure.} =
while true:
try: discard
except: break
finally: break
var a = bb
iterator cc() {.closure.} =
while true:
try: discard
except:
if true:
break
finally:
if true:
break
var a2 = cc