for-of loops, IteratorClose and the rest of the iterations in the spec
Boris Zbarsky
bzbarsky at mit.edu
Wed Sep 10 10:58:09 PDT 2014
On 9/10/14, 1:47 PM, Allen Wirfs-Brock wrote:
>> 1. Let method be the result of CheckIterable(V).
>> 2. ReturnIfAbrupt(method).
>> 3. If IsCallable(method) is false, go off and do something else,
>> since V is not iterable.
>> 4. Let iter be GetIterator(V, method).
>> 5. ReturnIfAbrupt(iter).
>>
>> and then IteratorStep my way through "iter".
>
> So, try expressing this in JS. That's what a JS help-hosting compliant implementation is going to have to do.
Sure.
var method = V[Symbol.iterator];
if (typeof method != "function") {
// Not iterable; do something else
}
var iter = method.call(iter);
and then go through calling .next() and so on.
Now in this self-hosted case, how do I express IteratorClose? Seems to
me like it's just a matter of wrapping the relevant bits (which ones,
though?) in a try/catch and doing this in the catch clause:
catch (e) {
if ("return" in iter) {
iter.return();
}
throw e;
}
That ought to match the semantics of IteratorClose, yes?
-Boris
More information about the es-discuss
mailing list