https://github.com/rwaldron/tc39-notes/search?utf8=✓&q=exponentiation leads
me to
https://github.com/rwaldron/tc39-notes/blob/924122cdc03e9ee2afbe8014193f845bddc6da2d/es7/2015-09/sept-23.md#exponentiation-operator
which is when that decision was made, iirc.

On Wed, Jul 20, 2016 at 1:04 PM, Bradford Smith <bradfordcsm...@google.com>
wrote:

> Thanks for the quick response, Jordan. That does make sense for my
> question #1.
>
> Re #2, does anybody know why UpdateExpression loops back up to
> UnaryExpression?
>
> Also, are the reasons for the decisions made when updating the spec
> documented anywhere?
> If so, maybe I could find the answer to questions like these myself in
> future.
>
> Thanks,
> Bradford
>
> On Wed, Jul 20, 2016 at 12:55 PM Jordan Harband <ljh...@gmail.com> wrote:
>
>> `-x ** y` is absolutely a SyntaxError because of the disagreement between
>> many programming languages which treat that as `(-x) ** y` and math itself
>> which treats it as `-(x ** y)`.
>>
>> To resolve the debate about "what will users expect", this early syntax
>> error ensures that programmers get the joy of being required to be explicit
>> about their precedence, saving countless amounts of time and money spent on
>> linting rules and style arguments.
>>
>> On Wed, Jul 20, 2016 at 12:48 PM, Bradford Smith <
>> bradfordcsm...@google.com> wrote:
>>
>>> Can anyone explain the reasoning behind the strange "leapfrogging"
>>> behavior of the ExponentiationExpression
>>> <https://tc39.github.io/ecma262/#prod-ExponentiationExpression> and
>>> UpdateExpression <https://tc39.github.io/ecma262/#prod-UpdateExpression>
>>>  productions in the current spec?
>>>
>>> Simplified relevant productions in operator precedence order are:
>>>
>>> ExponentiationExpression :
>>>     UnaryExpression
>>>     UpdateExpression ** ExponentiationExpression
>>>
>>> UnaryExpression :
>>>     UpdateExpression
>>>     { delete | void | typeof | + | - | ~ | ! } UnaryExpression
>>>
>>> UpdateExpression:
>>>     { ++ | -- } UnaryExpression
>>>     LeftHandSideExpression { ++ | -- }
>>>
>>> Things that seem weird about this are:
>>> 1. '-x ** y' is a syntax error, because UnaryExpression isn't allowed
>>> before **
>>>     You must write it as '(-x) ** y'
>>>     I would expect the production right hand side to be
>>>         UnaryExpression ** ExponentiationExpression
>>>     That avoids this strange syntax error and is consistent with the
>>> pattern followed by productions for lower-precedence operators.
>>>
>>> 2. Having UnaryExpression in the right hand side of UpdateExpression
>>> confuses precedence by going 'backward' to a lower-precedence non-terminal,
>>> and the only production of UnaryExpression that generates a valid
>>> argument for '++'/'--' is UnaryExpression => UpdateExpression =>
>>> LeftHandSideExpression anyway.
>>>
>>> I've just finished implementing these rules in the closure-compiler,
>>> where I had to implement logic to deal with this strange behavior. Is it at
>>> all possible that these are simply typos in the spec?
>>>
>>> Thanks,
>>> Bradford
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to