On Mon, Aug 24, 2015 at 8:10 PM, Waldemar Horwat <walde...@google.com> wrote:
> That has different right and left precedence and is probably the closest to
> the mathematical intent.

Not to quibble, but I do want to understand:

    UnaryExpression : PostfixExpression ** UnaryExpression

    AdditiveExpression : AdditiveExpression + MultiplicativeExpression

We don't say binary `+` has different left and right precedence,
right? What's different with `**`, apart from being right-associative?

>  However, it does carry other surprises.  What does
> each of the following do?

Interesting:

    ++x ** y;  // early error: invalid operand for ++
        (because it's parsed as `++(x ** y)`)
    x++ ** y;  // parses as expected: (x++) ** y
    x ** ++y;  // parses as expected: x ** (++y)
    x ** y++;  // parses as expected: x ** (y++)

I'm OK with this. It should be rarer in practice than `-x**2`, and at
least the language won't silently assign a surprising meaning to user
code.

It could be made to parse as `(++x) ** y` by changing prefix ++ and --
to be higher precedence than the other prefix operators. I don't think
this would break any existing programs, because combinations like
`++typeof 3` are already early errors. PHP apparently does something
like this:

    $ php -r '$x = 3; print(++$x**2 . "\n"); print($x . "\n");'
    16
    4

D doesn't. Python and Haskell don't have ++/--.

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

Reply via email to