| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library fasta.scanner.precedence; | 5 library fasta.scanner.precedence; |
| 6 | 6 |
| 7 import '../../scanner/token.dart'; | 7 import '../../scanner/token.dart'; |
| 8 import '../../scanner/token.dart' as analyzer; |
| 8 import 'token_constants.dart'; | 9 import 'token_constants.dart'; |
| 9 | 10 |
| 10 class PrecedenceInfo extends TokenType { | 11 const int NO_PRECEDENCE = analyzer.NO_PRECEDENCE; |
| 11 const PrecedenceInfo(String value, String name, int precedence, int kind, | 12 const int ASSIGNMENT_PRECEDENCE = analyzer.ASSIGNMENT_PRECEDENCE; |
| 12 {bool isOperator: false, bool isUserDefinableOperator: false}) | 13 const int CASCADE_PRECEDENCE = analyzer.CASCADE_PRECEDENCE; |
| 13 : super(value, name, precedence, kind, | 14 const int CONDITIONAL_PRECEDENCE = analyzer.CONDITIONAL_PRECEDENCE; |
| 14 isOperator: isOperator, | 15 const int IF_NULL_PRECEDENCE = analyzer.IF_NULL_PRECEDENCE; |
| 15 isUserDefinableOperator: isUserDefinableOperator); | 16 const int LOGICAL_OR_PRECEDENCE = analyzer.LOGICAL_OR_PRECEDENCE; |
| 16 | 17 const int LOGICAL_AND_PRECEDENCE = analyzer.LOGICAL_AND_PRECEDENCE; |
| 17 toString() => 'PrecedenceInfo($value, $name, $precedence, $kind)'; | 18 const int EQUALITY_PRECEDENCE = analyzer.EQUALITY_PRECEDENCE; |
| 18 | 19 const int RELATIONAL_PRECEDENCE = analyzer.RELATIONAL_PRECEDENCE; |
| 19 static const List<PrecedenceInfo> all = const <PrecedenceInfo>[ | 20 const int BITWISE_OR_PRECEDENCE = analyzer.BITWISE_OR_PRECEDENCE; |
| 20 BACKPING_INFO, | 21 const int BITWISE_XOR_PRECEDENCE = analyzer.BITWISE_XOR_PRECEDENCE; |
| 21 BACKSLASH_INFO, | 22 const int BITWISE_AND_PRECEDENCE = analyzer.BITWISE_AND_PRECEDENCE; |
| 22 PERIOD_PERIOD_PERIOD_INFO, | 23 const int SHIFT_PRECEDENCE = analyzer.SHIFT_PRECEDENCE; |
| 23 PERIOD_PERIOD_INFO, | 24 const int ADDITIVE_PRECEDENCE = analyzer.ADDITIVE_PRECEDENCE; |
| 24 BANG_INFO, | 25 const int MULTIPLICATIVE_PRECEDENCE = analyzer.MULTIPLICATIVE_PRECEDENCE; |
| 25 COLON_INFO, | 26 const int PREFIX_PRECEDENCE = analyzer.PREFIX_PRECEDENCE; |
| 26 INDEX_INFO, | 27 const int POSTFIX_PRECEDENCE = analyzer.POSTFIX_PRECEDENCE; |
| 27 MINUS_MINUS_INFO, | |
| 28 PLUS_PLUS_INFO, | |
| 29 TILDE_INFO, | |
| 30 FUNCTION_INFO, | |
| 31 HASH_INFO, | |
| 32 INDEX_EQ_INFO, | |
| 33 SEMICOLON_INFO, | |
| 34 COMMA_INFO, | |
| 35 AT_INFO, | |
| 36 AMPERSAND_EQ_INFO, | |
| 37 BAR_EQ_INFO, | |
| 38 CARET_EQ_INFO, | |
| 39 EQ_INFO, | |
| 40 GT_GT_EQ_INFO, | |
| 41 LT_LT_EQ_INFO, | |
| 42 MINUS_EQ_INFO, | |
| 43 PERCENT_EQ_INFO, | |
| 44 PLUS_EQ_INFO, | |
| 45 SLASH_EQ_INFO, | |
| 46 STAR_EQ_INFO, | |
| 47 TILDE_SLASH_EQ_INFO, | |
| 48 QUESTION_QUESTION_EQ_INFO, | |
| 49 QUESTION_INFO, | |
| 50 QUESTION_QUESTION_INFO, | |
| 51 BAR_BAR_INFO, | |
| 52 AMPERSAND_AMPERSAND_INFO, | |
| 53 BAR_INFO, | |
| 54 CARET_INFO, | |
| 55 AMPERSAND_INFO, | |
| 56 BANG_EQ_EQ_INFO, | |
| 57 BANG_EQ_INFO, | |
| 58 EQ_EQ_EQ_INFO, | |
| 59 EQ_EQ_INFO, | |
| 60 GT_EQ_INFO, | |
| 61 GT_INFO, | |
| 62 IS_INFO, | |
| 63 AS_INFO, | |
| 64 LT_EQ_INFO, | |
| 65 LT_INFO, | |
| 66 GT_GT_INFO, | |
| 67 LT_LT_INFO, | |
| 68 MINUS_INFO, | |
| 69 PLUS_INFO, | |
| 70 PERCENT_INFO, | |
| 71 SLASH_INFO, | |
| 72 STAR_INFO, | |
| 73 TILDE_SLASH_INFO, | |
| 74 PERIOD_INFO, | |
| 75 QUESTION_PERIOD_INFO, | |
| 76 KEYWORD_INFO, | |
| 77 EOF_INFO, | |
| 78 IDENTIFIER_INFO, | |
| 79 BAD_INPUT_INFO, | |
| 80 OPEN_PAREN_INFO, | |
| 81 CLOSE_PAREN_INFO, | |
| 82 OPEN_CURLY_BRACKET_INFO, | |
| 83 CLOSE_CURLY_BRACKET_INFO, | |
| 84 INT_INFO, | |
| 85 STRING_INFO, | |
| 86 OPEN_SQUARE_BRACKET_INFO, | |
| 87 CLOSE_SQUARE_BRACKET_INFO, | |
| 88 DOUBLE_INFO, | |
| 89 STRING_INTERPOLATION_INFO, | |
| 90 STRING_INTERPOLATION_IDENTIFIER_INFO, | |
| 91 HEXADECIMAL_INFO, | |
| 92 SINGLE_LINE_COMMENT_INFO, | |
| 93 MULTI_LINE_COMMENT_INFO, | |
| 94 GENERIC_METHOD_TYPE_ASSIGN, | |
| 95 GENERIC_METHOD_TYPE_LIST, | |
| 96 ]; | |
| 97 } | |
| 98 | |
| 99 const int NO_PRECEDENCE = 0; | |
| 100 const int ASSIGNMENT_PRECEDENCE = 1; | |
| 101 const int CASCADE_PRECEDENCE = 2; | |
| 102 const int CONDITIONAL_PRECEDENCE = 3; | |
| 103 const int IF_NULL_PRECEDENCE = 4; | |
| 104 const int LOGICAL_OR_PRECEDENCE = 5; | |
| 105 const int LOGICAL_AND_PRECEDENCE = 6; | |
| 106 const int EQUALITY_PRECEDENCE = 7; | |
| 107 const int RELATIONAL_PRECEDENCE = 8; | |
| 108 const int BITWISE_OR_PRECEDENCE = 9; | |
| 109 const int BITWISE_XOR_PRECEDENCE = 10; | |
| 110 const int BITWISE_AND_PRECEDENCE = 11; | |
| 111 const int SHIFT_PRECEDENCE = 12; | |
| 112 const int ADDITIVE_PRECEDENCE = 13; | |
| 113 const int MULTIPLICATIVE_PRECEDENCE = 14; | |
| 114 const int PREFIX_PRECEDENCE = 15; | |
| 115 const int POSTFIX_PRECEDENCE = 16; | |
| 116 | 28 |
| 117 // TODO(ahe): The following are not tokens in Dart. | 29 // TODO(ahe): The following are not tokens in Dart. |
| 118 const PrecedenceInfo BACKPING_INFO = | 30 const TokenType BACKPING_INFO = |
| 119 const PrecedenceInfo('`', 'BACKPING', NO_PRECEDENCE, BACKPING_TOKEN); | 31 const TokenType('`', 'BACKPING', NO_PRECEDENCE, BACKPING_TOKEN); |
| 120 const PrecedenceInfo BACKSLASH_INFO = | 32 const TokenType BACKSLASH_INFO = |
| 121 const PrecedenceInfo('\\', 'BACKSLASH', NO_PRECEDENCE, BACKSLASH_TOKEN); | 33 const TokenType('\\', 'BACKSLASH', NO_PRECEDENCE, BACKSLASH_TOKEN); |
| 122 const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO = const PrecedenceInfo( | 34 const TokenType PERIOD_PERIOD_PERIOD_INFO = const TokenType( |
| 123 '...', 'PERIOD_PERIOD_PERIOD', NO_PRECEDENCE, PERIOD_PERIOD_PERIOD_TOKEN); | 35 '...', 'PERIOD_PERIOD_PERIOD', NO_PRECEDENCE, PERIOD_PERIOD_PERIOD_TOKEN); |
| 124 | 36 |
| 125 /** | 37 /** |
| 126 * The cascade operator has the lowest precedence of any operator | 38 * The cascade operator has the lowest precedence of any operator |
| 127 * except assignment. | 39 * except assignment. |
| 128 */ | 40 */ |
| 129 const PrecedenceInfo PERIOD_PERIOD_INFO = const PrecedenceInfo( | 41 const TokenType PERIOD_PERIOD_INFO = const TokenType( |
| 130 '..', 'PERIOD_PERIOD', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN, | 42 '..', 'PERIOD_PERIOD', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN, |
| 131 isOperator: true); | 43 isOperator: true); |
| 132 | 44 |
| 133 const PrecedenceInfo BANG_INFO = const PrecedenceInfo( | 45 const TokenType BANG_INFO = const TokenType( |
| 134 '!', 'BANG', PREFIX_PRECEDENCE, BANG_TOKEN, | 46 '!', 'BANG', PREFIX_PRECEDENCE, BANG_TOKEN, |
| 135 isOperator: true); | 47 isOperator: true); |
| 136 const PrecedenceInfo COLON_INFO = | 48 const TokenType COLON_INFO = |
| 137 const PrecedenceInfo(':', 'COLON', NO_PRECEDENCE, COLON_TOKEN); | 49 const TokenType(':', 'COLON', NO_PRECEDENCE, COLON_TOKEN); |
| 138 const PrecedenceInfo INDEX_INFO = const PrecedenceInfo( | 50 const TokenType INDEX_INFO = const TokenType( |
| 139 '[]', 'INDEX', NO_PRECEDENCE, INDEX_TOKEN, | 51 '[]', 'INDEX', NO_PRECEDENCE, INDEX_TOKEN, |
| 140 isOperator: true, isUserDefinableOperator: true); | 52 isOperator: true, isUserDefinableOperator: true); |
| 141 const PrecedenceInfo MINUS_MINUS_INFO = const PrecedenceInfo( | 53 const TokenType MINUS_MINUS_INFO = const TokenType( |
| 142 '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN, | 54 '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN, |
| 143 isOperator: true); | 55 isOperator: true); |
| 144 const PrecedenceInfo PLUS_PLUS_INFO = const PrecedenceInfo( | 56 const TokenType PLUS_PLUS_INFO = const TokenType( |
| 145 '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN, | 57 '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN, |
| 146 isOperator: true); | 58 isOperator: true); |
| 147 const PrecedenceInfo TILDE_INFO = const PrecedenceInfo( | 59 const TokenType TILDE_INFO = const TokenType( |
| 148 '~', 'TILDE', PREFIX_PRECEDENCE, TILDE_TOKEN, | 60 '~', 'TILDE', PREFIX_PRECEDENCE, TILDE_TOKEN, |
| 149 isOperator: true, isUserDefinableOperator: true); | 61 isOperator: true, isUserDefinableOperator: true); |
| 150 | 62 |
| 151 const PrecedenceInfo FUNCTION_INFO = | 63 const TokenType FUNCTION_INFO = |
| 152 const PrecedenceInfo('=>', 'FUNCTION', NO_PRECEDENCE, FUNCTION_TOKEN); | 64 const TokenType('=>', 'FUNCTION', NO_PRECEDENCE, FUNCTION_TOKEN); |
| 153 const PrecedenceInfo HASH_INFO = | 65 const TokenType HASH_INFO = |
| 154 const PrecedenceInfo('#', 'HASH', NO_PRECEDENCE, HASH_TOKEN); | 66 const TokenType('#', 'HASH', NO_PRECEDENCE, HASH_TOKEN); |
| 155 const PrecedenceInfo INDEX_EQ_INFO = const PrecedenceInfo( | 67 const TokenType INDEX_EQ_INFO = const TokenType( |
| 156 '[]=', 'INDEX_EQ', NO_PRECEDENCE, INDEX_EQ_TOKEN, | 68 '[]=', 'INDEX_EQ', NO_PRECEDENCE, INDEX_EQ_TOKEN, |
| 157 isOperator: true, isUserDefinableOperator: true); | 69 isOperator: true, isUserDefinableOperator: true); |
| 158 const PrecedenceInfo SEMICOLON_INFO = | 70 const TokenType SEMICOLON_INFO = |
| 159 const PrecedenceInfo(';', 'SEMICOLON', NO_PRECEDENCE, SEMICOLON_TOKEN); | 71 const TokenType(';', 'SEMICOLON', NO_PRECEDENCE, SEMICOLON_TOKEN); |
| 160 const PrecedenceInfo COMMA_INFO = | 72 const TokenType COMMA_INFO = |
| 161 const PrecedenceInfo(',', 'COMMA', NO_PRECEDENCE, COMMA_TOKEN); | 73 const TokenType(',', 'COMMA', NO_PRECEDENCE, COMMA_TOKEN); |
| 162 | 74 |
| 163 const PrecedenceInfo AT_INFO = | 75 const TokenType AT_INFO = const TokenType('@', 'AT', NO_PRECEDENCE, AT_TOKEN); |
| 164 const PrecedenceInfo('@', 'AT', NO_PRECEDENCE, AT_TOKEN); | |
| 165 | 76 |
| 166 // Assignment operators. | 77 // Assignment operators. |
| 167 const PrecedenceInfo AMPERSAND_EQ_INFO = const PrecedenceInfo( | 78 const TokenType AMPERSAND_EQ_INFO = const TokenType( |
| 168 '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN, | 79 '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN, |
| 169 isOperator: true); | 80 isOperator: true); |
| 170 const PrecedenceInfo BAR_EQ_INFO = const PrecedenceInfo( | 81 const TokenType BAR_EQ_INFO = const TokenType( |
| 171 '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN, | 82 '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN, |
| 172 isOperator: true); | 83 isOperator: true); |
| 173 const PrecedenceInfo CARET_EQ_INFO = const PrecedenceInfo( | 84 const TokenType CARET_EQ_INFO = const TokenType( |
| 174 '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN, | 85 '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN, |
| 175 isOperator: true); | 86 isOperator: true); |
| 176 const PrecedenceInfo EQ_INFO = const PrecedenceInfo( | 87 const TokenType EQ_INFO = const TokenType( |
| 177 '=', 'EQ', ASSIGNMENT_PRECEDENCE, EQ_TOKEN, | 88 '=', 'EQ', ASSIGNMENT_PRECEDENCE, EQ_TOKEN, |
| 178 isOperator: true); | 89 isOperator: true); |
| 179 const PrecedenceInfo GT_GT_EQ_INFO = const PrecedenceInfo( | 90 const TokenType GT_GT_EQ_INFO = const TokenType( |
| 180 '>>=', 'GT_GT_EQ', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN, | 91 '>>=', 'GT_GT_EQ', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN, |
| 181 isOperator: true); | 92 isOperator: true); |
| 182 const PrecedenceInfo LT_LT_EQ_INFO = const PrecedenceInfo( | 93 const TokenType LT_LT_EQ_INFO = const TokenType( |
| 183 '<<=', 'LT_LT_EQ', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN, | 94 '<<=', 'LT_LT_EQ', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN, |
| 184 isOperator: true); | 95 isOperator: true); |
| 185 const PrecedenceInfo MINUS_EQ_INFO = const PrecedenceInfo( | 96 const TokenType MINUS_EQ_INFO = const TokenType( |
| 186 '-=', 'MINUS_EQ', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN, | 97 '-=', 'MINUS_EQ', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN, |
| 187 isOperator: true); | 98 isOperator: true); |
| 188 const PrecedenceInfo PERCENT_EQ_INFO = const PrecedenceInfo( | 99 const TokenType PERCENT_EQ_INFO = const TokenType( |
| 189 '%=', 'PERCENT_EQ', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN, | 100 '%=', 'PERCENT_EQ', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN, |
| 190 isOperator: true); | 101 isOperator: true); |
| 191 const PrecedenceInfo PLUS_EQ_INFO = const PrecedenceInfo( | 102 const TokenType PLUS_EQ_INFO = const TokenType( |
| 192 '+=', 'PLUS_EQ', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN, | 103 '+=', 'PLUS_EQ', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN, |
| 193 isOperator: true); | 104 isOperator: true); |
| 194 const PrecedenceInfo SLASH_EQ_INFO = const PrecedenceInfo( | 105 const TokenType SLASH_EQ_INFO = const TokenType( |
| 195 '/=', 'SLASH_EQ', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN, | 106 '/=', 'SLASH_EQ', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN, |
| 196 isOperator: true); | 107 isOperator: true); |
| 197 const PrecedenceInfo STAR_EQ_INFO = const PrecedenceInfo( | 108 const TokenType STAR_EQ_INFO = const TokenType( |
| 198 '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN, | 109 '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN, |
| 199 isOperator: true); | 110 isOperator: true); |
| 200 const PrecedenceInfo TILDE_SLASH_EQ_INFO = const PrecedenceInfo( | 111 const TokenType TILDE_SLASH_EQ_INFO = const TokenType( |
| 201 '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN, | 112 '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN, |
| 202 isOperator: true); | 113 isOperator: true); |
| 203 const PrecedenceInfo QUESTION_QUESTION_EQ_INFO = const PrecedenceInfo('??=', | 114 const TokenType QUESTION_QUESTION_EQ_INFO = const TokenType('??=', |
| 204 'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN, | 115 'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN, |
| 205 isOperator: true); | 116 isOperator: true); |
| 206 | 117 |
| 207 const PrecedenceInfo QUESTION_INFO = const PrecedenceInfo( | 118 const TokenType QUESTION_INFO = const TokenType( |
| 208 '?', 'QUESTION', CONDITIONAL_PRECEDENCE, QUESTION_TOKEN, | 119 '?', 'QUESTION', CONDITIONAL_PRECEDENCE, QUESTION_TOKEN, |
| 209 isOperator: true); | 120 isOperator: true); |
| 210 | 121 |
| 211 const PrecedenceInfo QUESTION_QUESTION_INFO = const PrecedenceInfo( | 122 const TokenType QUESTION_QUESTION_INFO = const TokenType( |
| 212 '??', 'QUESTION_QUESTION', IF_NULL_PRECEDENCE, QUESTION_QUESTION_TOKEN, | 123 '??', 'QUESTION_QUESTION', IF_NULL_PRECEDENCE, QUESTION_QUESTION_TOKEN, |
| 213 isOperator: true); | 124 isOperator: true); |
| 214 | 125 |
| 215 const PrecedenceInfo BAR_BAR_INFO = const PrecedenceInfo( | 126 const TokenType BAR_BAR_INFO = const TokenType( |
| 216 '||', 'BAR_BAR', LOGICAL_OR_PRECEDENCE, BAR_BAR_TOKEN, | 127 '||', 'BAR_BAR', LOGICAL_OR_PRECEDENCE, BAR_BAR_TOKEN, |
| 217 isOperator: true); | 128 isOperator: true); |
| 218 | 129 |
| 219 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = const PrecedenceInfo('&&', | 130 const TokenType AMPERSAND_AMPERSAND_INFO = const TokenType('&&', |
| 220 'AMPERSAND_AMPERSAND', LOGICAL_AND_PRECEDENCE, AMPERSAND_AMPERSAND_TOKEN, | 131 'AMPERSAND_AMPERSAND', LOGICAL_AND_PRECEDENCE, AMPERSAND_AMPERSAND_TOKEN, |
| 221 isOperator: true); | 132 isOperator: true); |
| 222 | 133 |
| 223 const PrecedenceInfo BAR_INFO = const PrecedenceInfo( | 134 const TokenType BAR_INFO = const TokenType( |
| 224 '|', 'BAR', BITWISE_OR_PRECEDENCE, BAR_TOKEN, | 135 '|', 'BAR', BITWISE_OR_PRECEDENCE, BAR_TOKEN, |
| 225 isOperator: true, isUserDefinableOperator: true); | 136 isOperator: true, isUserDefinableOperator: true); |
| 226 | 137 |
| 227 const PrecedenceInfo CARET_INFO = const PrecedenceInfo( | 138 const TokenType CARET_INFO = const TokenType( |
| 228 '^', 'CARET', BITWISE_XOR_PRECEDENCE, CARET_TOKEN, | 139 '^', 'CARET', BITWISE_XOR_PRECEDENCE, CARET_TOKEN, |
| 229 isOperator: true, isUserDefinableOperator: true); | 140 isOperator: true, isUserDefinableOperator: true); |
| 230 | 141 |
| 231 const PrecedenceInfo AMPERSAND_INFO = const PrecedenceInfo( | 142 const TokenType AMPERSAND_INFO = const TokenType( |
| 232 '&', 'AMPERSAND', BITWISE_AND_PRECEDENCE, AMPERSAND_TOKEN, | 143 '&', 'AMPERSAND', BITWISE_AND_PRECEDENCE, AMPERSAND_TOKEN, |
| 233 isOperator: true, isUserDefinableOperator: true); | 144 isOperator: true, isUserDefinableOperator: true); |
| 234 | 145 |
| 235 // Equality operators. | 146 // Equality operators. |
| 236 const PrecedenceInfo BANG_EQ_EQ_INFO = const PrecedenceInfo( | 147 const TokenType BANG_EQ_EQ_INFO = |
| 237 '!==', 'BANG_EQ_EQ', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); | 148 const TokenType('!==', 'BANG_EQ_EQ', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); |
| 238 const PrecedenceInfo BANG_EQ_INFO = const PrecedenceInfo( | 149 const TokenType BANG_EQ_INFO = const TokenType( |
| 239 '!=', 'BANG_EQ', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN, | 150 '!=', 'BANG_EQ', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN, |
| 240 isOperator: true); | 151 isOperator: true); |
| 241 const PrecedenceInfo EQ_EQ_EQ_INFO = const PrecedenceInfo( | 152 const TokenType EQ_EQ_EQ_INFO = |
| 242 '===', 'EQ_EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); | 153 const TokenType('===', 'EQ_EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); |
| 243 const PrecedenceInfo EQ_EQ_INFO = const PrecedenceInfo( | 154 const TokenType EQ_EQ_INFO = const TokenType( |
| 244 '==', 'EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN, | 155 '==', 'EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN, |
| 245 isOperator: true, isUserDefinableOperator: true); | 156 isOperator: true, isUserDefinableOperator: true); |
| 246 | 157 |
| 247 // Relational operators. | 158 // Relational operators. |
| 248 const PrecedenceInfo GT_EQ_INFO = const PrecedenceInfo( | 159 const TokenType GT_EQ_INFO = const TokenType( |
| 249 '>=', 'GT_EQ', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN, | 160 '>=', 'GT_EQ', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN, |
| 250 isOperator: true, isUserDefinableOperator: true); | 161 isOperator: true, isUserDefinableOperator: true); |
| 251 const PrecedenceInfo GT_INFO = const PrecedenceInfo( | 162 const TokenType GT_INFO = const TokenType( |
| 252 '>', 'GT', RELATIONAL_PRECEDENCE, GT_TOKEN, | 163 '>', 'GT', RELATIONAL_PRECEDENCE, GT_TOKEN, |
| 253 isOperator: true, isUserDefinableOperator: true); | 164 isOperator: true, isUserDefinableOperator: true); |
| 254 const PrecedenceInfo IS_INFO = | 165 const TokenType IS_INFO = |
| 255 const PrecedenceInfo('is', 'IS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); | 166 const TokenType('is', 'IS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); |
| 256 const PrecedenceInfo AS_INFO = | 167 const TokenType AS_INFO = |
| 257 const PrecedenceInfo('as', 'AS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); | 168 const TokenType('as', 'AS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); |
| 258 const PrecedenceInfo LT_EQ_INFO = const PrecedenceInfo( | 169 const TokenType LT_EQ_INFO = const TokenType( |
| 259 '<=', 'LT_EQ', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN, | 170 '<=', 'LT_EQ', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN, |
| 260 isOperator: true, isUserDefinableOperator: true); | 171 isOperator: true, isUserDefinableOperator: true); |
| 261 const PrecedenceInfo LT_INFO = const PrecedenceInfo( | 172 const TokenType LT_INFO = const TokenType( |
| 262 '<', 'LT', RELATIONAL_PRECEDENCE, LT_TOKEN, | 173 '<', 'LT', RELATIONAL_PRECEDENCE, LT_TOKEN, |
| 263 isOperator: true, isUserDefinableOperator: true); | 174 isOperator: true, isUserDefinableOperator: true); |
| 264 | 175 |
| 265 // Shift operators. | 176 // Shift operators. |
| 266 const PrecedenceInfo GT_GT_INFO = const PrecedenceInfo( | 177 const TokenType GT_GT_INFO = const TokenType( |
| 267 '>>', 'GT_GT', SHIFT_PRECEDENCE, GT_GT_TOKEN, | 178 '>>', 'GT_GT', SHIFT_PRECEDENCE, GT_GT_TOKEN, |
| 268 isOperator: true, isUserDefinableOperator: true); | 179 isOperator: true, isUserDefinableOperator: true); |
| 269 const PrecedenceInfo LT_LT_INFO = const PrecedenceInfo( | 180 const TokenType LT_LT_INFO = const TokenType( |
| 270 '<<', 'LT_LT', SHIFT_PRECEDENCE, LT_LT_TOKEN, | 181 '<<', 'LT_LT', SHIFT_PRECEDENCE, LT_LT_TOKEN, |
| 271 isOperator: true, isUserDefinableOperator: true); | 182 isOperator: true, isUserDefinableOperator: true); |
| 272 | 183 |
| 273 // Additive operators. | 184 // Additive operators. |
| 274 const PrecedenceInfo MINUS_INFO = const PrecedenceInfo( | 185 const TokenType MINUS_INFO = const TokenType( |
| 275 '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN, | 186 '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN, |
| 276 isOperator: true, isUserDefinableOperator: true); | 187 isOperator: true, isUserDefinableOperator: true); |
| 277 const PrecedenceInfo PLUS_INFO = const PrecedenceInfo( | 188 const TokenType PLUS_INFO = const TokenType( |
| 278 '+', 'PLUS', ADDITIVE_PRECEDENCE, PLUS_TOKEN, | 189 '+', 'PLUS', ADDITIVE_PRECEDENCE, PLUS_TOKEN, |
| 279 isOperator: true, isUserDefinableOperator: true); | 190 isOperator: true, isUserDefinableOperator: true); |
| 280 | 191 |
| 281 // Multiplicative operators. | 192 // Multiplicative operators. |
| 282 const PrecedenceInfo PERCENT_INFO = const PrecedenceInfo( | 193 const TokenType PERCENT_INFO = const TokenType( |
| 283 '%', 'PERCENT', MULTIPLICATIVE_PRECEDENCE, PERCENT_TOKEN, | 194 '%', 'PERCENT', MULTIPLICATIVE_PRECEDENCE, PERCENT_TOKEN, |
| 284 isOperator: true, isUserDefinableOperator: true); | 195 isOperator: true, isUserDefinableOperator: true); |
| 285 const PrecedenceInfo SLASH_INFO = const PrecedenceInfo( | 196 const TokenType SLASH_INFO = const TokenType( |
| 286 '/', 'SLASH', MULTIPLICATIVE_PRECEDENCE, SLASH_TOKEN, | 197 '/', 'SLASH', MULTIPLICATIVE_PRECEDENCE, SLASH_TOKEN, |
| 287 isOperator: true, isUserDefinableOperator: true); | 198 isOperator: true, isUserDefinableOperator: true); |
| 288 const PrecedenceInfo STAR_INFO = const PrecedenceInfo( | 199 const TokenType STAR_INFO = const TokenType( |
| 289 '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN, | 200 '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN, |
| 290 isOperator: true, isUserDefinableOperator: true); | 201 isOperator: true, isUserDefinableOperator: true); |
| 291 const PrecedenceInfo TILDE_SLASH_INFO = const PrecedenceInfo( | 202 const TokenType TILDE_SLASH_INFO = const TokenType( |
| 292 '~/', 'TILDE_SLASH', MULTIPLICATIVE_PRECEDENCE, TILDE_SLASH_TOKEN, | 203 '~/', 'TILDE_SLASH', MULTIPLICATIVE_PRECEDENCE, TILDE_SLASH_TOKEN, |
| 293 isOperator: true, isUserDefinableOperator: true); | 204 isOperator: true, isUserDefinableOperator: true); |
| 294 | 205 |
| 295 const PrecedenceInfo PERIOD_INFO = | 206 const TokenType PERIOD_INFO = |
| 296 const PrecedenceInfo('.', 'PERIOD', POSTFIX_PRECEDENCE, PERIOD_TOKEN); | 207 const TokenType('.', 'PERIOD', POSTFIX_PRECEDENCE, PERIOD_TOKEN); |
| 297 const PrecedenceInfo QUESTION_PERIOD_INFO = const PrecedenceInfo( | 208 const TokenType QUESTION_PERIOD_INFO = const TokenType( |
| 298 '?.', 'QUESTION_PERIOD', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN, | 209 '?.', 'QUESTION_PERIOD', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN, |
| 299 isOperator: true); | 210 isOperator: true); |
| 300 | 211 |
| 301 const PrecedenceInfo KEYWORD_INFO = | 212 const TokenType KEYWORD_INFO = |
| 302 const PrecedenceInfo('keyword', 'KEYWORD', NO_PRECEDENCE, KEYWORD_TOKEN); | 213 const TokenType('keyword', 'KEYWORD', NO_PRECEDENCE, KEYWORD_TOKEN); |
| 303 | 214 |
| 304 const PrecedenceInfo EOF_INFO = | 215 const TokenType EOF_INFO = const TokenType('', 'EOF', NO_PRECEDENCE, EOF_TOKEN); |
| 305 const PrecedenceInfo('', 'EOF', NO_PRECEDENCE, EOF_TOKEN); | |
| 306 | 216 |
| 307 /// Precedence info used by synthetic tokens that are created during parser | 217 /// Precedence info used by synthetic tokens that are created during parser |
| 308 /// recovery (non-analyzer use case). | 218 /// recovery (non-analyzer use case). |
| 309 const PrecedenceInfo RECOVERY_INFO = | 219 const TokenType RECOVERY_INFO = |
| 310 const PrecedenceInfo('recovery', 'RECOVERY', NO_PRECEDENCE, RECOVERY_TOKEN); | 220 const TokenType('recovery', 'RECOVERY', NO_PRECEDENCE, RECOVERY_TOKEN); |
| 311 | 221 |
| 312 const PrecedenceInfo IDENTIFIER_INFO = const PrecedenceInfo( | 222 const TokenType IDENTIFIER_INFO = const TokenType( |
| 313 'identifier', 'STRING_INT', NO_PRECEDENCE, IDENTIFIER_TOKEN); | 223 'identifier', 'STRING_INT', NO_PRECEDENCE, IDENTIFIER_TOKEN); |
| 314 | 224 |
| 315 const PrecedenceInfo SCRIPT_INFO = | 225 const TokenType SCRIPT_INFO = |
| 316 const PrecedenceInfo('script', 'SCRIPT_TAG', NO_PRECEDENCE, SCRIPT_TOKEN); | 226 const TokenType('script', 'SCRIPT_TAG', NO_PRECEDENCE, SCRIPT_TOKEN); |
| 317 | 227 |
| 318 const PrecedenceInfo BAD_INPUT_INFO = const PrecedenceInfo( | 228 const TokenType BAD_INPUT_INFO = const TokenType( |
| 319 'malformed input', 'BAD_INPUT', NO_PRECEDENCE, BAD_INPUT_TOKEN); | 229 'malformed input', 'BAD_INPUT', NO_PRECEDENCE, BAD_INPUT_TOKEN); |
| 320 | 230 |
| 321 const PrecedenceInfo OPEN_PAREN_INFO = const PrecedenceInfo( | 231 const TokenType OPEN_PAREN_INFO = |
| 322 '(', 'OPEN_PAREN', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN); | 232 const TokenType('(', 'OPEN_PAREN', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN); |
| 323 | 233 |
| 324 const PrecedenceInfo CLOSE_PAREN_INFO = | 234 const TokenType CLOSE_PAREN_INFO = |
| 325 const PrecedenceInfo(')', 'CLOSE_PAREN', NO_PRECEDENCE, CLOSE_PAREN_TOKEN); | 235 const TokenType(')', 'CLOSE_PAREN', NO_PRECEDENCE, CLOSE_PAREN_TOKEN); |
| 326 | 236 |
| 327 const PrecedenceInfo OPEN_CURLY_BRACKET_INFO = const PrecedenceInfo( | 237 const TokenType OPEN_CURLY_BRACKET_INFO = const TokenType( |
| 328 '{', 'OPEN_CURLY_BRACKET', NO_PRECEDENCE, OPEN_CURLY_BRACKET_TOKEN); | 238 '{', 'OPEN_CURLY_BRACKET', NO_PRECEDENCE, OPEN_CURLY_BRACKET_TOKEN); |
| 329 | 239 |
| 330 const PrecedenceInfo CLOSE_CURLY_BRACKET_INFO = const PrecedenceInfo( | 240 const TokenType CLOSE_CURLY_BRACKET_INFO = const TokenType( |
| 331 '}', 'CLOSE_CURLY_BRACKET', NO_PRECEDENCE, CLOSE_CURLY_BRACKET_TOKEN); | 241 '}', 'CLOSE_CURLY_BRACKET', NO_PRECEDENCE, CLOSE_CURLY_BRACKET_TOKEN); |
| 332 | 242 |
| 333 const PrecedenceInfo INT_INFO = | 243 const TokenType INT_INFO = |
| 334 const PrecedenceInfo('int', 'INT', NO_PRECEDENCE, INT_TOKEN); | 244 const TokenType('int', 'INT', NO_PRECEDENCE, INT_TOKEN); |
| 335 | 245 |
| 336 const PrecedenceInfo STRING_INFO = | 246 const TokenType STRING_INFO = |
| 337 const PrecedenceInfo('string', 'STRING', NO_PRECEDENCE, STRING_TOKEN); | 247 const TokenType('string', 'STRING', NO_PRECEDENCE, STRING_TOKEN); |
| 338 | 248 |
| 339 const PrecedenceInfo OPEN_SQUARE_BRACKET_INFO = const PrecedenceInfo( | 249 const TokenType OPEN_SQUARE_BRACKET_INFO = const TokenType( |
| 340 '[', 'OPEN_SQUARE_BRACKET', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN); | 250 '[', 'OPEN_SQUARE_BRACKET', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN); |
| 341 | 251 |
| 342 const PrecedenceInfo CLOSE_SQUARE_BRACKET_INFO = const PrecedenceInfo( | 252 const TokenType CLOSE_SQUARE_BRACKET_INFO = const TokenType( |
| 343 ']', 'CLOSE_SQUARE_BRACKET', NO_PRECEDENCE, CLOSE_SQUARE_BRACKET_TOKEN); | 253 ']', 'CLOSE_SQUARE_BRACKET', NO_PRECEDENCE, CLOSE_SQUARE_BRACKET_TOKEN); |
| 344 | 254 |
| 345 const PrecedenceInfo DOUBLE_INFO = | 255 const TokenType DOUBLE_INFO = |
| 346 const PrecedenceInfo('double', 'DOUBLE', NO_PRECEDENCE, DOUBLE_TOKEN); | 256 const TokenType('double', 'DOUBLE', NO_PRECEDENCE, DOUBLE_TOKEN); |
| 347 | 257 |
| 348 const PrecedenceInfo STRING_INTERPOLATION_INFO = const PrecedenceInfo( | 258 const TokenType STRING_INTERPOLATION_INFO = const TokenType( |
| 349 '\${', | 259 '\${', |
| 350 'STRING_INTERPOLATION_EXPRESSION', | 260 'STRING_INTERPOLATION_EXPRESSION', |
| 351 NO_PRECEDENCE, | 261 NO_PRECEDENCE, |
| 352 STRING_INTERPOLATION_TOKEN); | 262 STRING_INTERPOLATION_TOKEN); |
| 353 | 263 |
| 354 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO = | 264 const TokenType STRING_INTERPOLATION_IDENTIFIER_INFO = const TokenType( |
| 355 const PrecedenceInfo('\$', 'STRING_INTERPOLATION_IDENTIFIER', NO_PRECEDENCE, | 265 '\$', |
| 356 STRING_INTERPOLATION_IDENTIFIER_TOKEN); | 266 'STRING_INTERPOLATION_IDENTIFIER', |
| 357 | 267 NO_PRECEDENCE, |
| 358 const PrecedenceInfo HEXADECIMAL_INFO = const PrecedenceInfo( | 268 STRING_INTERPOLATION_IDENTIFIER_TOKEN); |
| 269 |
| 270 const TokenType HEXADECIMAL_INFO = const TokenType( |
| 359 'hexadecimal', 'HEXADECIMAL', NO_PRECEDENCE, HEXADECIMAL_TOKEN); | 271 'hexadecimal', 'HEXADECIMAL', NO_PRECEDENCE, HEXADECIMAL_TOKEN); |
| 360 | 272 |
| 361 const PrecedenceInfo SINGLE_LINE_COMMENT_INFO = const PrecedenceInfo( | 273 const TokenType SINGLE_LINE_COMMENT_INFO = const TokenType( |
| 362 'comment', 'SINGLE_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN); | 274 'comment', 'SINGLE_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN); |
| 363 | 275 |
| 364 const PrecedenceInfo MULTI_LINE_COMMENT_INFO = const PrecedenceInfo( | 276 const TokenType MULTI_LINE_COMMENT_INFO = const TokenType( |
| 365 'comment', 'MULTI_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN); | 277 'comment', 'MULTI_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN); |
| 366 | 278 |
| 367 const PrecedenceInfo GENERIC_METHOD_TYPE_ASSIGN = const PrecedenceInfo( | 279 const TokenType GENERIC_METHOD_TYPE_ASSIGN = const TokenType( |
| 368 'generic_comment_assign', | 280 'generic_comment_assign', |
| 369 'GENERIC_METHOD_TYPE_ASSIGN', | 281 'GENERIC_METHOD_TYPE_ASSIGN', |
| 370 NO_PRECEDENCE, | 282 NO_PRECEDENCE, |
| 371 GENERIC_METHOD_TYPE_ASSIGN_TOKEN); | 283 GENERIC_METHOD_TYPE_ASSIGN_TOKEN); |
| 372 | 284 |
| 373 const PrecedenceInfo GENERIC_METHOD_TYPE_LIST = const PrecedenceInfo( | 285 const TokenType GENERIC_METHOD_TYPE_LIST = const TokenType( |
| 374 'generic_comment_list', | 286 'generic_comment_list', |
| 375 'GENERIC_METHOD_TYPE_LIST', | 287 'GENERIC_METHOD_TYPE_LIST', |
| 376 NO_PRECEDENCE, | 288 NO_PRECEDENCE, |
| 377 GENERIC_METHOD_TYPE_LIST_TOKEN); | 289 GENERIC_METHOD_TYPE_LIST_TOKEN); |
| OLD | NEW |