for-of loops, IteratorClose and the rest of the iterations in the spec

Erik Arvidsson erik.arvidsson at
Wed Sep 10 07:45:23 PDT 2014

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,

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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list