Here's a clearer case that Firefox gets wrong (or your grammar gets wrong, 
depending on your point of view):

function f() {return "f"}
var x = 3;
let (a = 1) a ? f : x++();

The grammar states that the last statement must evaluate to "f".  Firefox gives 
a syntax error.  This is incorrect because the let expression up to the ++ is a 
PrimaryExpression so can be used as the left operand of a function call.

This is why ambiguous grammars are bad and unsuitable for our spec.  In an 
unambiguous grammar, if you find a series of production expansions that matches 
a source program, then you know that those are the expansions that will be 
taken.  In an ambiguous grammar, you also need to prove the negative:  no 
*other* expansion can match that source program and shadow your expansions.  
Proving the negative causes trouble because a language extension could turn the 
mismatch into a match and because sometimes, as in the above case, you expected 
some other part of the grammar to shadow your expansions but it didn't.

    Waldemar
_______________________________________________
Es-discuss mailing list
Es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to