On 10 September 2014 16:45, Erik Arvidsson <erik.arvids...@gmail.com> wrote: > For or loops are spec'ed to call the internal spec function, IteratorClose > when there is an abrupt completion in the loop body (an exception was > thrown, return and break) > > The point of this was to allow cleaning up the iterator in case it holds on > to some kind of resource. > > The problem is that none of the other iterations in the spec calls > IteratorClose. For example, > > ```js > class MySet extends Set { > add(v) { > if (valueNoGood(v)) throw new NoGoodError(); > return super(v); > } > } > new MySet(new ReadLines('~/test.txt')); > ``` > > In the above code `ReadLines.prototype.return` is never called, defeating > the whole purpose of adding return hooks to for-of. > > I see two options here. > > 1. Add IteratorClose to all places in the spec where we use iterators. > 2. Remove IteratorClose from for-of loops. > > I know we talked about this before on several occasions but I'm still > unhappy with the current state.
I concur. In particular, it should be possible to implement (the equivalent of) various library functions consuming iterables with for-of. Otherwise, we will likely enter a world with unpredictable discrepancies between ES library functions and user-provided ones. /Andreas _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss