John Tamplin wrote:
On Thu, Jun 21, 2012 at 11:23 AM, Brendan Eich <[email protected]
<mailto:[email protected]>> wrote:
John Tamplin wrote:
So do you have to do it by treating the ?. operator as a
standalone?
Not sure what you mean here -- "standalone ?" (with an
English-langauge ? implied after in your sentence? ;-)?
Or something else that amounts to a concealed Reference or
Nil-value-proxy expression?
Just talking spec here: as Allen mentioned, ECMA-262 specifies
semantics by evaluating productions in a mostly-LR(1) grammar, so
member and call expressions (left-associative) have to result in
some kind of (spec-internal or language-external) value.
Thus foo?.bar.baz.quux is really (((foo?.bar).baz).quux).
Yes, and I am suggesting during parsing it gets treated as:
(((foo?.bar)?.baz)?.quux)
because we saw a ?. operator earlier in the expression.
Ok, but this doesn't seem observable, or necessary in the spec.
That way you don't have to get the Coffeescript behavior by
introducing some fake object or a MaybeReference,
CoffeeScript does not introduce a fake object or MaybeReference:
$ cat /tmp/soak.coffee
o = null
console.log(o?.p.q.r.s.t)
$ ./bin/coffee -p !$
./bin/coffee -p /tmp/soak.coffee
(function() {
var o;
o = null;
console.log(o != null ? o.p.q.r.s.t : void 0);
}).call(this);
Rather, ECMA-262 would need to elaborate its internal Reference type as
Allen wrote.
and you just implement the ?. operator as always returning the LHS if
it is null/undef.
Note also that CoffeeScript does not short-circuit to the
unbound/null/undefined LHS "value", it always uses void 0 -- AKA undefined.
Indeed one can translate when parsing. CoffeeScript does this,
with some separate passes for its other purposes (implicitly
declared variables, indentation-based block structure, etc.).
The ES specs can't do this, though, not without a total rewrite.
I realize it would be changes, but then so would adding a
MaybeReference. Just thought I would bring it up.
Allen's right, MaybeReference is a much (much!) smaller change,
especially if we want to support the ?( and suffix-? variants.
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss