Skip to content

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

src/PyStyleButUnidirGenerators.jl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,15 @@ macro generator(fd)
5353
$gt!var = $GenTask(current_task(), Task(() -> begin
5454
try
5555
@assert current_task() === $gt!var.iteratee
56-
$body
57-
yieldto($gt!var.iterater, $StopIteration())
56+
try
57+
$body
58+
finally
59+
yieldto($gt!var.iterater, $StopIteration())
60+
end
5861
catch e
59-
Base.throwto($gt!var.iterater, e)
62+
if !istaskdone($gt!var.iterater)
63+
Base.throwto($gt!var.iterater, e)
64+
end
6065
end
6166
end))
6267
return $gt!var

test/loops.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
using PyStyleButUnidirGenerators
3+
4+
##.
5+
@generator function organpipe(n::Integer)
6+
i = 0
7+
while i != n
8+
i += 1
9+
@yield i
10+
end
11+
while true
12+
i -= 1
13+
i == 0 && return
14+
@yield i
15+
end
16+
end
17+
18+
##.
19+
collect(organpipe(2))

0 commit comments

Comments
 (0)