switch (str) {
case Traversable.Stream.CONTINUE:
if (self.valid) {
- str = f (Traversable.Stream.CONTINUE, self.get (), out initial);
+ str = f (Traversable.Stream.CONTINUE, new Lazy<G> (() => {return self.get ();}), out initial);
switch (str) {
case Traversable.Stream.YIELD:
case Traversable.Stream.CONTINUE:
} else {
need_next = true;
}
- str = f (Traversable.Stream.CONTINUE, self.get (), out val);
+ str = f (Traversable.Stream.CONTINUE, new Lazy<G> (() => {return self.get ();}), out val);
}
switch (str) {
case Traversable.Stream.YIELD:
public delegate A FoldFunc<A, G> (owned G g, owned A a);
public delegate void ForallFunc<G> (owned G g);
public delegate Lazy<A>? UnfoldFunc<A> ();
- public delegate Traversable.Stream StreamFunc<G, A> (Traversable.Stream state, owned G? g, out Lazy<A>? lazy);
+ public delegate Traversable.Stream StreamFunc<G, A> (Traversable.Stream state, owned Lazy<G>? g, out Lazy<A>? lazy);
public delegate A MapFunc<A, G> (owned G g);
}
case Stream.YIELD:
return Stream.CONTINUE;
case Stream.CONTINUE:
- val = new Lazy<A>(() => {return (f ((owned)item));});
+ val = new Lazy<A>(() => {
+ A tmp = item.get ();
+ item = null;
+ return (f ((owned)tmp));
+ });
return Stream.YIELD;
case Stream.END:
return Stream.END;
return Stream.YIELD;
}
case Stream.CONTINUE:
- val = new Lazy<A> (() => {seed = f ((owned)item, (owned) seed); return seed;});
+ val = new Lazy<A> (() => {
+ A tmp = item.get ();
+ item = null;
+ seed = f ((owned) tmp, (owned) seed);
+ return seed;
+ });
return Stream.YIELD;
case Stream.END:
return Stream.END;