François REMY <mailto:[email protected]> January 21, 2012 2:14 AMfunction a(x) { let count=0; let arr = [...]; let $lambda = { [Call]: {|| ... } }; arr.forEach($lambda); $lambda.[Call] = function() { throw new InvalidTargetException(); }
No, we are not specifying dynamic semantics based on a mutation to the [[Call]] internal property.
I wrote "When you write "it should only be allowed", are you seriously proposing a checkable syntax and static check of some kind?"
I was alluding to ideas such as Ruby's yield operator, which is the only way to name the extra downward-funarg-only block argument, preventing heap escape (but of course, Ruby grew & params and so on, so had to deal with escape anyway).
This is no static check. It is unacceptable both as semantics and in real implementation costs.
Again, in general a block-lambda that escapes and is called after its parent function activation has deactivated is not a bug. It should not be forbidden uncondionally. The only requirement is that control cannot flow back to the defunct activation. Only such attempts via break/continue/return will throw.
/be _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

