Greg Ewing wrote:
We might still want one special case. If GeneratorExit is thrown and the subiterator has no throw() or the GeneratorExit propagates back out of the throw(), I think an attempt should be made to close() it. Otherwise, explicitly closing the delegating generator wouldn't be guaranteed to finalize the subiterator unless it had a throw() method, whereas one would expect having close() to be sufficient for this.
I'm not so sure about that - we don't do it for normal iteration, so why would we do it for the new expression? However, I've been pondering the shareable iterator case a bit more, and in trying to come up with even a toy example, I couldn't think of anything that wouldn't be better handled just by actually *iterating* over the shared iterator with a for loop. Since the main advantage that the new expression has over simple iteration is delegating send() and throw() correctly, and I'm suggesting that shared iterators and those two methods don't mix, perhaps this whole issue can be set aside? Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia ---------------------------------------------------------------