It's different when you have syntax:
-----
var o = {};
var a2 = o <| [1, 2, 3];
-----
Here, the array syntax literal guarantees (since ES5, not in ES3!) that
a native array is going to be built. Same goes for "function(){}" or any
object created with reliable syntax, so the parser can both safely build
the object and assign the chosen prototype.

That's my interpretation though and i'd be happy to hear from others.

That would seem to call for <| to be a copying operator:

- if RHS is a literal, original object can still be safely updated in place
- if RHS is a non-literal object, a copy of that object is created and
   updated

According to the first point in the proposal comments:

http://wiki.ecmascript.org/doku.php?id=harmony:proto_operator#commentary_and_rationales

the definition of cloning/copying is the show-stopper.

Not sure how that interacts with the RHS function literal special case.
I assume that if we had an accepted short function syntax, that special
case would not even exist. Instead, we'd use:

function(..args) { return (proto <| functionLiteral(..args) ); }

But I'm probably misunderstanding that special case anyway..

Claus


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

Reply via email to