summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYuriy Glukhov <yglukhov@users.noreply.github.com>2021-05-30 23:38:33 +0300
committerGitHub <noreply@github.com>2021-05-30 22:38:33 +0200
commita6bd6c7ed803dcef41b49343b5cd60607b984ca8 (patch)
tree7ac0a329f0ecc8c4fd4a753e9fea10d6d6e31ec5
parent4a7f2c386cde91b784106905f6e70d3954d8fae9 (diff)
downloadNim-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.nim6
-rw-r--r--tests/iter/tyieldintry.nim16
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"