(cherry picked from commit 6ab532fd0f)
This commit is contained in:
Yuriy Glukhov
2025-07-13 07:56:20 +02:00
committed by narimiran
parent 95d25a9d7f
commit f783924fd8
2 changed files with 18 additions and 5 deletions

View File

@@ -944,19 +944,19 @@ proc transformReturnStmt(ctx: var Ctx, n: PNode): PNode =
# There are no (split) finallies on the path, so we can return right away
result.add(n)
proc transformBreaksContinuesAndReturns(ctx: var Ctx, n: PNode): PNode =
proc transformBreaksAndReturns(ctx: var Ctx, n: PNode): PNode =
result = n
case n.kind
of nkSkip: discard
of nkBreakStmt: result = ctx.transformBreakStmt(n)
of nkContinueStmt:
internalError(ctx.g.config, n.info, "Continue not lowered")
# of nkContinueStmt: # By this point all relevant continues should be
# lowered to breaks in transf.nim.
of nkReturnStmt:
if ctx.curFinallyLevel > 0 and nfNoRewrite notin n.flags:
result = ctx.transformReturnStmt(n)
else:
for i in 0..<n.len:
n[i] = ctx.transformBreaksContinuesAndReturns(n[i])
n[i] = ctx.transformBreaksAndReturns(n[i])
proc transformClosureIteratorBody(ctx: var Ctx, n: PNode, gotoOut: PNode): PNode =
result = n
@@ -982,7 +982,7 @@ proc transformClosureIteratorBody(ctx: var Ctx, n: PNode, gotoOut: PNode): PNode
internalError(ctx.g.config, "transformClosureIteratorBody != s")
break
else:
n[i] = ctx.transformBreaksContinuesAndReturns(n[i])
n[i] = ctx.transformBreaksAndReturns(n[i])
of nkYieldStmt:
result = addGotoOut(result, gotoOut)

View File

@@ -739,3 +739,16 @@ block: # break in for without yield in try
checkpoint(5)
test(it, 1, 2, 3, 4, 5)
block: #25038
template m(w: untyped): untyped =
var g: typeof(w)
g
iterator d(): int {.closure.} =
discard m:
for _ in [0]:
continue
0
test(d)