diff options
-rw-r--r-- | compiler/closureiters.nim | 2 | ||||
-rw-r--r-- | tests/iter/titer_issues.nim | 30 |
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() |