On Jan 31, 2015, at 9:50 AM, Kevin Smith wrote:

>> Another option would be to throw. Then the caller can tell that they did 
>> something that was not expected by the inner iterator.
>> 
> I like that solution!
> 
> I do as well.  What exactly is thrown - the input to the generator's throw 
> method? 
Don't think so.  The throw method argument is what would have been thrown if 
the inner iterator actually had a default throw method.

It should probably be a new TypeError, then it's implementation defined text 
can be something describing the protocol violation.

But this perhaps leads to rethinking what happens when for-of invokes the throw 
method on its iterator. The plan of record, which the spec. currently reflects, 
is that if the exception that comes back from the 'throw' method is different 
from the one that was originally passed in as its argument then the original 
exception is the one that is propagated out of the for-of.  (There are two 
possible exceptions that could be propagate in this case, so we have to pick 
one and drop the other one).

The logic behind that choice, was that the original exception produced by the 
loop body, is more likely to be the one that the surrounding code was prepared 
to deal with.  But in the case we are considering, this choice would obscure 
the fact that the inner protocol violation had occurred.  From a debugging 
perspective. it  would seem better to propagate the final exception rather than 
the original exception. That would enable a developer to debug backwards 
starting from the final exception.  That model seems more likely to make bugs 
visible and get them fixed.

Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to