Fix parsing of postfix operators.
Summary: Based on what I understand of the parser's reduce code, this should be the
right way to parse things...
It might look like expr_postfix_unary is completely disregarding precedence,
but that's because the functions calling it handle precedence already.
In `$a->b++`, reduce() 'shifts' `$a->b` onto the stack, finds out that `++` has
lower precedence than `->`, then returns. So expr_postfix_unary gets called with e1
set to `$a->b`.
In `$a && $b++`, when parsing $b, reduce() sees that `++` has higher precedence
than `&&` and so creates `$b++`.
Finally, the precedence of a postfix operator should not affect the remainder
of the parse. I.e. we should parse `$a && $b++ === $c` as `$a && ($b++ === $c)`
rather than `($a && $b++) === $c` -- even though `++` has higher precedence
than both `&&` and `===`, we decide to shift `===` based on the relative
precedence of `&&` and `===`, and `++` does not come into the picture.
Reviewed By: @pikatchu
Differential Revision:
D1598832