Fix nested finally handling in closureiters [backport] (#19933)
* Fix nested finally handling in closureiters * Fix CI * review comment * third time the charm * Update compiler/closureiters.nim Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com> Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
This commit is contained in:
parent
a90763ebd7
commit
fb5fbf1e08
2 changed files with 100 additions and 6 deletions
|
|
@ -30,6 +30,14 @@ end
|
|||
@[1, 2]
|
||||
@[1, 2, 3]
|
||||
1
|
||||
nested finally
|
||||
outer finally
|
||||
nested finally
|
||||
outer finally
|
||||
nested finally
|
||||
outer finally
|
||||
nested finally
|
||||
outer finally
|
||||
'''
|
||||
"""
|
||||
|
||||
|
|
@ -287,3 +295,70 @@ block:
|
|||
|
||||
for i in a(5):
|
||||
echo i
|
||||
|
||||
block:
|
||||
# bug #19911 (return in nested try)
|
||||
|
||||
# try yield -> try
|
||||
iterator p1: int {.closure.} =
|
||||
try:
|
||||
yield 0
|
||||
try:
|
||||
return
|
||||
finally:
|
||||
echo "nested finally"
|
||||
echo "shouldn't run"
|
||||
finally:
|
||||
echo "outer finally"
|
||||
echo "shouldn't run"
|
||||
|
||||
for _ in p1():
|
||||
discard
|
||||
|
||||
# try -> try yield
|
||||
iterator p2: int {.closure.} =
|
||||
try:
|
||||
try:
|
||||
yield 0
|
||||
return
|
||||
finally:
|
||||
echo "nested finally"
|
||||
echo "shouldn't run"
|
||||
finally:
|
||||
echo "outer finally"
|
||||
echo "shouldn't run"
|
||||
|
||||
for _ in p2():
|
||||
discard
|
||||
|
||||
# try yield -> try yield
|
||||
iterator p3: int {.closure.} =
|
||||
try:
|
||||
yield 0
|
||||
try:
|
||||
yield 0
|
||||
return
|
||||
finally:
|
||||
echo "nested finally"
|
||||
echo "shouldn't run"
|
||||
finally:
|
||||
echo "outer finally"
|
||||
echo "shouldn't run"
|
||||
|
||||
for _ in p3():
|
||||
discard
|
||||
|
||||
# try -> try
|
||||
iterator p4: int {.closure.} =
|
||||
try:
|
||||
try:
|
||||
return
|
||||
finally:
|
||||
echo "nested finally"
|
||||
echo "shouldn't run"
|
||||
finally:
|
||||
echo "outer finally"
|
||||
echo "shouldn't run"
|
||||
|
||||
for _ in p4():
|
||||
discard
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue