> This is not just awkward, of course -- the grammar you propose is
> ambiguous.
No ambiguity intended - function bodies extend as far to the right
as possible (see Note 1).
> The precedence inversion means there are two ways to parse
>> z = a + function (b) => b ? c : d;
>..
> z = a + (function (b) => (b ? c : d));
This is the intended parse, and also the one used by the prototype
(you can change 'opts ="pu"' to 'opts = "pua"' to get the ast). To
get the other parse, one would need explicit parens.
The idea is to get the longest parse paren-free, with parens as a
means to get more fine-control to limit function bodies. That does
imply that things to the right of a function tend to get swallowed
up in the function body.
As for your other example,
> function f(x) => x;
> z = a + function (b) => b ? f : x++(1);
>>parses awkwardly, as ( z = ( a + ( function (b) => ( b ? f : ( x ++ ) ) )
>(1) ) ).
I'm not following yet - what parse would you like to see instead
of this one? If you wanted the function body to end earlier, you
can get that by adding parens, right?
Claus