summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/closureiters.nim2
-rw-r--r--tests/iter/titer_issues.nim30
2 files changed, 32 insertions, 0 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim
index 79038a4f5..a39dd0e71 100644
--- a/compiler/closureiters.nim
+++ b/compiler/closureiters.nim
@@ -1372,6 +1372,7 @@ proc preprocess(c: var PreprocessContext; n: PNode): PNode =
   # detect: 'finally: raises X' which is currently not supported. We produce
   # an error for this case for now. All this will be done properly with Yuriy's
   # patch.
+
   result = n
   case n.kind
   of nkTryStmt:
@@ -1388,6 +1389,7 @@ proc preprocess(c: var PreprocessContext; n: PNode): PNode =
       discard c.finallys.pop()
 
   of nkWhileStmt, nkBlockStmt:
+    if n.hasYields == false: return n
     c.blocks.add((n, c.finallys.len))
     for i in 0 ..< n.len:
       result[i] = preprocess(c, n[i])
diff --git a/tests/iter/titer_issues.nim b/tests/iter/titer_issues.nim
index 9c7a5eab0..7dee9792d 100644
--- a/tests/iter/titer_issues.nim
+++ b/tests/iter/titer_issues.nim
@@ -38,6 +38,10 @@ nested finally
 outer finally
 nested finally
 outer finally
+In defer
+trying
+exception caught
+finally block
 '''
 """
 
@@ -362,3 +366,29 @@ block:
 
   for _ in p4():
     discard
+
+# bug #18824
+iterator poc_iterator: int {.closure.}  =
+  block:
+    try:
+      break
+    finally:
+      echo "In defer"
+
+for _ in poc_iterator():
+  discard
+
+# bug #20624
+iterator tryFinally() {.closure.} =
+  block route:
+    try:
+      echo "trying"
+      raise
+    except:
+      echo "exception caught"
+      break route
+    finally:
+      echo "finally block"
+
+var x = tryFinally
+x()