Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/scanner/precedence.dart |
| diff --git a/pkg/front_end/lib/src/fasta/scanner/precedence.dart b/pkg/front_end/lib/src/fasta/scanner/precedence.dart |
| index 5ff90eed41d30e572579609cb0de2d284e829fb7..40776d24f3594a5a4c3d30f19bc97ab0197739a6 100644 |
| --- a/pkg/front_end/lib/src/fasta/scanner/precedence.dart |
| +++ b/pkg/front_end/lib/src/fasta/scanner/precedence.dart |
| @@ -10,8 +10,10 @@ class PrecedenceInfo { |
| final String value; |
| final int precedence; |
| final int kind; |
| + final bool isOperator; |
| - const PrecedenceInfo(this.value, this.precedence, this.kind); |
| + const PrecedenceInfo(this.value, this.precedence, this.kind, |
| + {this.isOperator: false}); |
| toString() => 'PrecedenceInfo($value, $precedence, $kind)'; |
| @@ -105,23 +107,29 @@ const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO = |
| * except assignment. |
| */ |
| const int CASCADE_PRECEDENCE = 2; |
| -const PrecedenceInfo PERIOD_PERIOD_INFO = |
| - const PrecedenceInfo('..', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN); |
| +const PrecedenceInfo PERIOD_PERIOD_INFO = const PrecedenceInfo( |
| + '..', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN, |
| + isOperator: true); |
|
ahe
2017/03/15 14:54:25
Are you sure about that?
Isn't an operator someth
|
| -const PrecedenceInfo BANG_INFO = const PrecedenceInfo('!', 0, BANG_TOKEN); |
| +const PrecedenceInfo BANG_INFO = |
| + const PrecedenceInfo('!', 0, BANG_TOKEN, isOperator: true); |
| const PrecedenceInfo COLON_INFO = const PrecedenceInfo(':', 0, COLON_TOKEN); |
| -const PrecedenceInfo INDEX_INFO = const PrecedenceInfo('[]', 0, INDEX_TOKEN); |
| -const PrecedenceInfo MINUS_MINUS_INFO = |
| - const PrecedenceInfo('--', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN); |
| -const PrecedenceInfo PLUS_PLUS_INFO = |
| - const PrecedenceInfo('++', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN); |
| -const PrecedenceInfo TILDE_INFO = const PrecedenceInfo('~', 0, TILDE_TOKEN); |
| +const PrecedenceInfo INDEX_INFO = |
| + const PrecedenceInfo('[]', 0, INDEX_TOKEN, isOperator: true); |
| +const PrecedenceInfo MINUS_MINUS_INFO = const PrecedenceInfo( |
| + '--', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo PLUS_PLUS_INFO = const PrecedenceInfo( |
| + '++', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo TILDE_INFO = |
| + const PrecedenceInfo('~', 0, TILDE_TOKEN, isOperator: true); |
| const PrecedenceInfo FUNCTION_INFO = |
| const PrecedenceInfo('=>', 0, FUNCTION_TOKEN); |
| const PrecedenceInfo HASH_INFO = const PrecedenceInfo('#', 0, HASH_TOKEN); |
| const PrecedenceInfo INDEX_EQ_INFO = |
| - const PrecedenceInfo('[]=', 0, INDEX_EQ_TOKEN); |
| + const PrecedenceInfo('[]=', 0, INDEX_EQ_TOKEN, isOperator: true); |
| const PrecedenceInfo SEMICOLON_INFO = |
| const PrecedenceInfo(';', 0, SEMICOLON_TOKEN); |
| const PrecedenceInfo COMMA_INFO = const PrecedenceInfo(',', 0, COMMA_TOKEN); |
| @@ -130,99 +138,127 @@ const PrecedenceInfo AT_INFO = const PrecedenceInfo('@', 0, AT_TOKEN); |
| // Assignment operators. |
| const int ASSIGNMENT_PRECEDENCE = 1; |
| -const PrecedenceInfo AMPERSAND_EQ_INFO = |
| - const PrecedenceInfo('&=', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN); |
| -const PrecedenceInfo BAR_EQ_INFO = |
| - const PrecedenceInfo('|=', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN); |
| -const PrecedenceInfo CARET_EQ_INFO = |
| - const PrecedenceInfo('^=', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN); |
| -const PrecedenceInfo EQ_INFO = |
| - const PrecedenceInfo('=', ASSIGNMENT_PRECEDENCE, EQ_TOKEN); |
| -const PrecedenceInfo GT_GT_EQ_INFO = |
| - const PrecedenceInfo('>>=', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN); |
| -const PrecedenceInfo LT_LT_EQ_INFO = |
| - const PrecedenceInfo('<<=', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN); |
| -const PrecedenceInfo MINUS_EQ_INFO = |
| - const PrecedenceInfo('-=', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN); |
| -const PrecedenceInfo PERCENT_EQ_INFO = |
| - const PrecedenceInfo('%=', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN); |
| -const PrecedenceInfo PLUS_EQ_INFO = |
| - const PrecedenceInfo('+=', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN); |
| -const PrecedenceInfo SLASH_EQ_INFO = |
| - const PrecedenceInfo('/=', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN); |
| -const PrecedenceInfo STAR_EQ_INFO = |
| - const PrecedenceInfo('*=', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN); |
| -const PrecedenceInfo TILDE_SLASH_EQ_INFO = |
| - const PrecedenceInfo('~/=', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN); |
| +const PrecedenceInfo AMPERSAND_EQ_INFO = const PrecedenceInfo( |
| + '&=', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo BAR_EQ_INFO = const PrecedenceInfo( |
| + '|=', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo CARET_EQ_INFO = const PrecedenceInfo( |
| + '^=', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo EQ_INFO = const PrecedenceInfo( |
| + '=', ASSIGNMENT_PRECEDENCE, EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo GT_GT_EQ_INFO = const PrecedenceInfo( |
| + '>>=', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo LT_LT_EQ_INFO = const PrecedenceInfo( |
| + '<<=', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo MINUS_EQ_INFO = const PrecedenceInfo( |
| + '-=', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo PERCENT_EQ_INFO = const PrecedenceInfo( |
| + '%=', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo PLUS_EQ_INFO = const PrecedenceInfo( |
| + '+=', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo SLASH_EQ_INFO = const PrecedenceInfo( |
| + '/=', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo STAR_EQ_INFO = const PrecedenceInfo( |
| + '*=', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo TILDE_SLASH_EQ_INFO = const PrecedenceInfo( |
| + '~/=', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN, |
| + isOperator: true); |
| const PrecedenceInfo QUESTION_QUESTION_EQ_INFO = const PrecedenceInfo( |
| - '??=', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN); |
| + '??=', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN, |
| + isOperator: true); |
| const PrecedenceInfo QUESTION_INFO = |
| - const PrecedenceInfo('?', 3, QUESTION_TOKEN); |
| + const PrecedenceInfo('?', 3, QUESTION_TOKEN, isOperator: true); |
| const PrecedenceInfo QUESTION_QUESTION_INFO = |
| - const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN); |
| + const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN, isOperator: true); |
| const PrecedenceInfo BAR_BAR_INFO = |
| - const PrecedenceInfo('||', 5, BAR_BAR_TOKEN); |
| + const PrecedenceInfo('||', 5, BAR_BAR_TOKEN, isOperator: true); |
| const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = |
| - const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN); |
| + const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN, isOperator: true); |
| -const PrecedenceInfo BAR_INFO = const PrecedenceInfo('|', 9, BAR_TOKEN); |
| +const PrecedenceInfo BAR_INFO = |
| + const PrecedenceInfo('|', 9, BAR_TOKEN, isOperator: true); |
| -const PrecedenceInfo CARET_INFO = const PrecedenceInfo('^', 10, CARET_TOKEN); |
| +const PrecedenceInfo CARET_INFO = |
| + const PrecedenceInfo('^', 10, CARET_TOKEN, isOperator: true); |
| const PrecedenceInfo AMPERSAND_INFO = |
| - const PrecedenceInfo('&', 11, AMPERSAND_TOKEN); |
| + const PrecedenceInfo('&', 11, AMPERSAND_TOKEN, isOperator: true); |
| // Equality operators. |
| const int EQUALITY_PRECEDENCE = 7; |
| const PrecedenceInfo BANG_EQ_EQ_INFO = |
| const PrecedenceInfo('!==', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); |
| -const PrecedenceInfo BANG_EQ_INFO = |
| - const PrecedenceInfo('!=', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN); |
| +const PrecedenceInfo BANG_EQ_INFO = const PrecedenceInfo( |
| + '!=', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN, |
| + isOperator: true); |
| const PrecedenceInfo EQ_EQ_EQ_INFO = |
| const PrecedenceInfo('===', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); |
| -const PrecedenceInfo EQ_EQ_INFO = |
| - const PrecedenceInfo('==', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN); |
| +const PrecedenceInfo EQ_EQ_INFO = const PrecedenceInfo( |
| + '==', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN, |
| + isOperator: true); |
| // Relational operators. |
| const int RELATIONAL_PRECEDENCE = 8; |
| -const PrecedenceInfo GT_EQ_INFO = |
| - const PrecedenceInfo('>=', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN); |
| -const PrecedenceInfo GT_INFO = |
| - const PrecedenceInfo('>', RELATIONAL_PRECEDENCE, GT_TOKEN); |
| +const PrecedenceInfo GT_EQ_INFO = const PrecedenceInfo( |
| + '>=', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo GT_INFO = const PrecedenceInfo( |
| + '>', RELATIONAL_PRECEDENCE, GT_TOKEN, |
| + isOperator: true); |
| const PrecedenceInfo IS_INFO = |
| const PrecedenceInfo('is', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); |
| const PrecedenceInfo AS_INFO = |
| const PrecedenceInfo('as', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); |
| -const PrecedenceInfo LT_EQ_INFO = |
| - const PrecedenceInfo('<=', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN); |
| -const PrecedenceInfo LT_INFO = |
| - const PrecedenceInfo('<', RELATIONAL_PRECEDENCE, LT_TOKEN); |
| +const PrecedenceInfo LT_EQ_INFO = const PrecedenceInfo( |
| + '<=', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN, |
| + isOperator: true); |
| +const PrecedenceInfo LT_INFO = const PrecedenceInfo( |
| + '<', RELATIONAL_PRECEDENCE, LT_TOKEN, |
| + isOperator: true); |
| // Shift operators. |
| -const PrecedenceInfo GT_GT_INFO = const PrecedenceInfo('>>', 12, GT_GT_TOKEN); |
| -const PrecedenceInfo LT_LT_INFO = const PrecedenceInfo('<<', 12, LT_LT_TOKEN); |
| +const PrecedenceInfo GT_GT_INFO = |
| + const PrecedenceInfo('>>', 12, GT_GT_TOKEN, isOperator: true); |
| +const PrecedenceInfo LT_LT_INFO = |
| + const PrecedenceInfo('<<', 12, LT_LT_TOKEN, isOperator: true); |
| // Additive operators. |
| -const PrecedenceInfo MINUS_INFO = const PrecedenceInfo('-', 13, MINUS_TOKEN); |
| -const PrecedenceInfo PLUS_INFO = const PrecedenceInfo('+', 13, PLUS_TOKEN); |
| +const PrecedenceInfo MINUS_INFO = |
| + const PrecedenceInfo('-', 13, MINUS_TOKEN, isOperator: true); |
| +const PrecedenceInfo PLUS_INFO = |
| + const PrecedenceInfo('+', 13, PLUS_TOKEN, isOperator: true); |
| // Multiplicative operators. |
| const PrecedenceInfo PERCENT_INFO = |
| - const PrecedenceInfo('%', 14, PERCENT_TOKEN); |
| -const PrecedenceInfo SLASH_INFO = const PrecedenceInfo('/', 14, SLASH_TOKEN); |
| -const PrecedenceInfo STAR_INFO = const PrecedenceInfo('*', 14, STAR_TOKEN); |
| + const PrecedenceInfo('%', 14, PERCENT_TOKEN, isOperator: true); |
| +const PrecedenceInfo SLASH_INFO = |
| + const PrecedenceInfo('/', 14, SLASH_TOKEN, isOperator: true); |
| +const PrecedenceInfo STAR_INFO = |
| + const PrecedenceInfo('*', 14, STAR_TOKEN, isOperator: true); |
| const PrecedenceInfo TILDE_SLASH_INFO = |
| - const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN); |
| + const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN, isOperator: true); |
| const int POSTFIX_PRECEDENCE = 15; |
| const PrecedenceInfo PERIOD_INFO = |
| const PrecedenceInfo('.', POSTFIX_PRECEDENCE, PERIOD_TOKEN); |
| -const PrecedenceInfo QUESTION_PERIOD_INFO = |
| - const PrecedenceInfo('?.', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN); |
| +const PrecedenceInfo QUESTION_PERIOD_INFO = const PrecedenceInfo( |
| + '?.', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN, |
| + isOperator: true); |
| const PrecedenceInfo KEYWORD_INFO = |
| const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN); |