Created
May 12, 2017 19:22
-
-
Save JeffBezanson/217922de7815916591bbd6549111f13d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/base/iterators.jl b/base/iterators.jl | |
index 1c2ab13..4e5d1b5 100644 | |
--- a/base/iterators.jl | |
+++ b/base/iterators.jl | |
@@ -694,28 +694,30 @@ function start(f::Flatten) | |
d = done(f.it, s) | |
# this is a simple way to make this function type stable | |
d && throw(ArgumentError("argument to Flatten must contain at least one iterator")) | |
+ done_inner = false | |
while !d | |
inner, s = next(f.it, s) | |
s2 = start(inner) | |
- !done(inner, s2) && break | |
+ done_inner = done(inner, s2) | |
+ !done_inner && break | |
d = done(f.it, s) | |
end | |
- return s, inner, s2 | |
+ return (d & done_inner), s, inner, s2 | |
end | |
@inline function next(f::Flatten, state) | |
- s, inner, s2 = state | |
+ _done, s, inner, s2 = state | |
val, s2 = next(inner, s2) | |
- while done(inner, s2) && !done(f.it, s) | |
+ done_inner = done_outer = false | |
+ while (done_inner=done(inner, s2)) && !(done_outer=done(f.it, s)) | |
inner, s = next(f.it, s) | |
s2 = start(inner) | |
end | |
- return val, (s, inner, s2) | |
+ return val, ((done_inner & done_outer), s, inner, s2) | |
end | |
@inline function done(f::Flatten, state) | |
- s, inner, s2 = state | |
- return done(f.it, s) && done(inner, s2) | |
+ return state[1] | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment