| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| const EXPRESSION = 0; |
| // TODO(nshahan) No longer used for the spread operator. |
| // All precedence levels need to be updated to be more accurate. |
| const SPREAD = EXPRESSION + 1; |
| const YIELD = SPREAD + 1; |
| |
| // Note that some primary expressions (in the parser) must be emitted with lower |
| // precedence, because it's not normally legal for them to be followed by |
| // other postfix expressions, like ACCESS and CALL. For example: |
| // `function foo(){}` needs parens to call or access properties or |
| // compare with equality. Same thing with `class Foo {}` and `(x) => x`. |
| // However, prefix unary expressions will work in these cases. Unfortunately our |
| // current precedence tracking doesn't capture this distinction. |
| const PRIMARY_LOW_PRECEDENCE = ASSIGNMENT; |
| |
| const ASSIGNMENT = YIELD + 1; |
| const LOGICAL_OR = ASSIGNMENT + 1; |
| const LOGICAL_AND = LOGICAL_OR + 1; |
| const BIT_OR = LOGICAL_AND + 1; |
| const BIT_XOR = BIT_OR + 1; |
| const BIT_AND = BIT_XOR + 1; |
| const EQUALITY = BIT_AND + 1; |
| const RELATIONAL = EQUALITY + 1; |
| const SHIFT = RELATIONAL + 1; |
| const ADDITIVE = SHIFT + 1; |
| const MULTIPLICATIVE = ADDITIVE + 1; |
| const UNARY = MULTIPLICATIVE + 1; |
| const LEFT_HAND_SIDE = UNARY + 1; |
| const CALL = LEFT_HAND_SIDE; |
| // We always emit `new` with parenthesis, so it uses ACCESS as its precedence. |
| const ACCESS = CALL + 1; |
| const PRIMARY = ACCESS + 1; |