|
@@ -17,6 +17,7 @@ enum PrecedenceLevel : int8_t {
|
|
|
// Terms.
|
|
// Terms.
|
|
|
TermPrefix,
|
|
TermPrefix,
|
|
|
// Numeric.
|
|
// Numeric.
|
|
|
|
|
+ IncrementDecrement,
|
|
|
NumericPrefix,
|
|
NumericPrefix,
|
|
|
Modulo,
|
|
Modulo,
|
|
|
Multiplicative,
|
|
Multiplicative,
|
|
@@ -53,7 +54,8 @@ struct OperatorPriorityTable {
|
|
|
// Start with a list of <higher precedence>, <lower precedence>
|
|
// Start with a list of <higher precedence>, <lower precedence>
|
|
|
// relationships.
|
|
// relationships.
|
|
|
MarkHigherThan({Highest}, {TermPrefix, LogicalPrefix});
|
|
MarkHigherThan({Highest}, {TermPrefix, LogicalPrefix});
|
|
|
- MarkHigherThan({TermPrefix}, {NumericPrefix, BitwisePrefix});
|
|
|
|
|
|
|
+ MarkHigherThan({TermPrefix},
|
|
|
|
|
+ {NumericPrefix, BitwisePrefix, IncrementDecrement});
|
|
|
MarkHigherThan({NumericPrefix, BitwisePrefix},
|
|
MarkHigherThan({NumericPrefix, BitwisePrefix},
|
|
|
{As, Multiplicative, Modulo, BitwiseAnd, BitwiseOr,
|
|
{As, Multiplicative, Modulo, BitwiseAnd, BitwiseOr,
|
|
|
BitwiseXor, BitShift});
|
|
BitwiseXor, BitShift});
|
|
@@ -64,7 +66,7 @@ struct OperatorPriorityTable {
|
|
|
MarkHigherThan({Relational, LogicalPrefix}, {LogicalAnd, LogicalOr});
|
|
MarkHigherThan({Relational, LogicalPrefix}, {LogicalAnd, LogicalOr});
|
|
|
MarkHigherThan({LogicalAnd, LogicalOr}, {If});
|
|
MarkHigherThan({LogicalAnd, LogicalOr}, {If});
|
|
|
MarkHigherThan({If}, {Assignment});
|
|
MarkHigherThan({If}, {Assignment});
|
|
|
- MarkHigherThan({Assignment}, {Lowest});
|
|
|
|
|
|
|
+ MarkHigherThan({Assignment, IncrementDecrement}, {Lowest});
|
|
|
|
|
|
|
|
// Types are mostly a separate precedence graph.
|
|
// Types are mostly a separate precedence graph.
|
|
|
MarkHigherThan({Highest}, {TypePrefix});
|
|
MarkHigherThan({Highest}, {TypePrefix});
|
|
@@ -208,7 +210,7 @@ auto PrecedenceGroup::ForLeading(TokenKind kind)
|
|
|
|
|
|
|
|
case TokenKind::MinusMinus:
|
|
case TokenKind::MinusMinus:
|
|
|
case TokenKind::PlusPlus:
|
|
case TokenKind::PlusPlus:
|
|
|
- return PrecedenceGroup(Assignment);
|
|
|
|
|
|
|
+ return PrecedenceGroup(IncrementDecrement);
|
|
|
|
|
|
|
|
case TokenKind::Caret:
|
|
case TokenKind::Caret:
|
|
|
return PrecedenceGroup(BitwisePrefix);
|
|
return PrecedenceGroup(BitwisePrefix);
|