Skip to content

Commit 6ab532f

Browse files
authored
Fixes #25038 (#25039)
1 parent 08642ff commit 6ab532f

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

compiler/closureiters.nim

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -944,19 +944,19 @@ proc transformReturnStmt(ctx: var Ctx, n: PNode): PNode =
944944
# There are no (split) finallies on the path, so we can return right away
945945
result.add(n)
946946

947-
proc transformBreaksContinuesAndReturns(ctx: var Ctx, n: PNode): PNode =
947+
proc transformBreaksAndReturns(ctx: var Ctx, n: PNode): PNode =
948948
result = n
949949
case n.kind
950950
of nkSkip: discard
951951
of nkBreakStmt: result = ctx.transformBreakStmt(n)
952-
of nkContinueStmt:
953-
internalError(ctx.g.config, n.info, "Continue not lowered")
952+
# of nkContinueStmt: # By this point all relevant continues should be
953+
# lowered to breaks in transf.nim.
954954
of nkReturnStmt:
955955
if ctx.curFinallyLevel > 0 and nfNoRewrite notin n.flags:
956956
result = ctx.transformReturnStmt(n)
957957
else:
958958
for i in 0..<n.len:
959-
n[i] = ctx.transformBreaksContinuesAndReturns(n[i])
959+
n[i] = ctx.transformBreaksAndReturns(n[i])
960960

961961
proc transformClosureIteratorBody(ctx: var Ctx, n: PNode, gotoOut: PNode): PNode =
962962
result = n
@@ -982,7 +982,7 @@ proc transformClosureIteratorBody(ctx: var Ctx, n: PNode, gotoOut: PNode): PNode
982982
internalError(ctx.g.config, "transformClosureIteratorBody != s")
983983
break
984984
else:
985-
n[i] = ctx.transformBreaksContinuesAndReturns(n[i])
985+
n[i] = ctx.transformBreaksAndReturns(n[i])
986986

987987
of nkYieldStmt:
988988
result = addGotoOut(result, gotoOut)

tests/iter/tyieldintry.nim

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,3 +739,16 @@ block: # break in for without yield in try
739739
checkpoint(5)
740740

741741
test(it, 1, 2, 3, 4, 5)
742+
743+
block: #25038
744+
template m(w: untyped): untyped =
745+
var g: typeof(w)
746+
g
747+
748+
iterator d(): int {.closure.} =
749+
discard m:
750+
for _ in [0]:
751+
continue
752+
0
753+
754+
test(d)

0 commit comments

Comments
 (0)