<div dir="ltr">Thanks! That does make behavior of ** in combination with unary operators very clear.<div>I've made note of that repo for future reference.<div><br></div><div>A brief search didn't turn up any test cases that would enlighten me regarding why the rules for UpdateExpression are:</div><div><br></div><div>UpdateExpression :</div><div>    { ++ | -- } UnaryExpression</div><div>    LeftHandSideExpression { ++ | -- }</div><div><br></div><div><span style="line-height:1.5">You can't increment or decrement anything that isn't a LeftHandSideExpression, so why does the syntax rule allow UnaryExpression as an argument for update in the prefix case?</span><br></div></div><div><br></div><div>Not a critical question, but I am very curious.</div><div><br></div><div>Thanks,</div><div>Bradford</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 21, 2016 at 12:26 PM Rick Waldron <<a href="mailto:waldron.rick@gmail.com">waldron.rick@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Bradford, </div><div><br></div><div>Take a look at the tests that I wrote for that syntax, I think they will be helpful in understand what that syntax actually is: <a href="https://github.com/tc39/test262/blob/master/test/language/expressions/exponentiation/exp-operator-precedence-unary-expression-semantics.js#L34-L66" target="_blank">https://github.com/tc39/test262/blob/master/test/language/expressions/exponentiation/exp-operator-precedence-unary-expression-semantics.js#L34-L66</a></div></div><div dir="ltr"><div><br></div><div><br></div><div>Rick</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 20, 2016 at 4:41 PM Bradford Smith <<a href="mailto:bradfordcsmith@google.com" target="_blank">bradfordcsmith@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks! <div>I'll know to look there in future. rwalden takes good notes.</div><div><br></div><div>No luck finding an answer to my question #2 though.</div><div>Searches tried:</div>++<div>increment</div><div>decrement</div><div>unary</div><div>UpdateExpression</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 20, 2016 at 1:22 PM Jordan Harband <<a href="mailto:ljharb@gmail.com" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><a href="https://github.com/rwaldron/tc39-notes/search?utf8=%E2%9C%93&q=exponentiation" target="_blank">https://github.com/rwaldron/tc39-notes/search?utf8=✓&q=exponentiation</a> leads me to <a href="https://github.com/rwaldron/tc39-notes/blob/924122cdc03e9ee2afbe8014193f845bddc6da2d/es7/2015-09/sept-23.md#exponentiation-operator" target="_blank">https://github.com/rwaldron/tc39-notes/blob/924122cdc03e9ee2afbe8014193f845bddc6da2d/es7/2015-09/sept-23.md#exponentiation-operator</a> which is when that decision was made, iirc.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 20, 2016 at 1:04 PM, Bradford Smith <span dir="ltr"><<a href="mailto:bradfordcsmith@google.com" target="_blank">bradfordcsmith@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the quick response, Jordan. That does make sense for my question #1.<div><br></div><div>Re #2, does anybody know why UpdateExpression loops back up to UnaryExpression?</div><div><br></div><div>Also, are the reasons for the decisions made when updating the spec documented anywhere?</div><div>If so, maybe I could find the answer to questions like these myself in future.</div><div><br></div><div>Thanks,</div><div>Bradford</div></div><div><div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 20, 2016 at 12:55 PM Jordan Harband <<a href="mailto:ljharb@gmail.com" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">`-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)`.<br><div><br></div><div>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.</div></div><div class="gmail_extra"><br><div class="gmail_quote"></div></div><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 20, 2016 at 12:48 PM, Bradford Smith <span dir="ltr"><<a href="mailto:bradfordcsmith@google.com" target="_blank">bradfordcsmith@google.com</a>></span> wrote:<br></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Can anyone explain the reasoning behind the strange "leapfrogging" behavior of the<span> </span></span><a href="https://tc39.github.io/ecma262/#prod-ExponentiationExpression" style="font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px" target="_blank">ExponentiationExpression</a><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"> and<span> </span></span><a href="https://tc39.github.io/ecma262/#prod-UpdateExpression" style="font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px" target="_blank">UpdateExpression</a><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><span> </span>productions in the current spec?</span><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Simplified relevant productions in operator precedence order are:</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">ExponentiationExpression :</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    UnaryExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    UpdateExpression ** ExponentiationExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">UnaryExpression :</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    UpdateExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    { delete | void | typeof | + | - | ~ | ! } UnaryExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><div><br></div><div>UpdateExpression: </div></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    { ++ | -- } UnaryExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    LeftHandSideExpression { ++ | -- }</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Things that seem weird about this are:</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">1. '-x ** y' is a syntax error, because UnaryExpression isn't allowed before **</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    You must write it as '(-x) ** y'</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    I would expect the production right hand side to be</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">        UnaryExpression ** ExponentiationExpression</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    That avoids this strange syntax error and is consistent with the pattern followed by productions for lower-precedence operators.</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">2. H<span style="line-height:1.5">aving UnaryExpression in the right hand side of UpdateExpression confuses precedence by going 'backward' to a lower-precedence non-terminal, and t</span><span style="line-height:1.5">he only production of UnaryExpression that generates a valid argument for '++'/'--' is UnaryExpression => UpdateExpression => LeftHandSideExpression anyway.</span></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">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?</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br></div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Thanks,</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Bradford</div></div>
<br></blockquote></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div>
</div></div></blockquote></div><br></div>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div>