diff options
author | Yuriy Glukhov <yglukhov@users.noreply.github.com> | 2021-05-30 23:38:33 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-30 22:38:33 +0200 |
commit | a6bd6c7ed803dcef41b49343b5cd60607b984ca8 (patch) | |
tree | 7ac0a329f0ecc8c4fd4a753e9fea10d6d6e31ec5 | |
parent | 4a7f2c386cde91b784106905f6e70d3954d8fae9 (diff) | |
download | Nim-a6bd6c7ed803dcef41b49343b5cd60607b984ca8.tar.gz |
Fixes #17849 (#18055) [backport:1.2]
* Fixes #17849 * Update compiler/closureiters.nim Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
-rw-r--r-- | compiler/closureiters.nim | 6 | ||||
-rw-r--r-- | tests/iter/tyieldintry.nim | 16 |
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim index e474e5ba2..adc5a4873 100644 --- a/compiler/closureiters.nim +++ b/compiler/closureiters.nim @@ -606,6 +606,12 @@ proc lowerStmtListExprs(ctx: var Ctx, n: PNode, needsSplit: var bool): PNode = internalError(ctx.g.config, "lowerStmtListExpr(nkCaseStmt): " & $branch.kind) result.add(n) result.add(ctx.newEnvVarAccess(tmp)) + elif n[0].kind == nkStmtListExpr: + result = newNodeI(nkStmtList, n.info) + let (st, ex) = exprToStmtList(n[0]) + result.add(st) + n[0] = ex + result.add(n) of nkCallKinds, nkChckRange, nkChckRangeF, nkChckRange64: var ns = false diff --git a/tests/iter/tyieldintry.nim b/tests/iter/tyieldintry.nim index 35df55c24..3d5260800 100644 --- a/tests/iter/tyieldintry.nim +++ b/tests/iter/tyieldintry.nim @@ -483,5 +483,19 @@ block: # nnkChckRange test(it, 1, 2, 3) -echo "ok" +block: #17849 - yield in case subject + template yieldInCase: int = + yield 2 + 3 + iterator it(): int {.closure.} = + yield 1 + case yieldInCase() + of 1: checkpoint(11) + of 3: checkpoint(13) + else: checkpoint(14) + yield 5 + + test(it, 1, 2, 13, 5) + +echo "ok" |