Index: pkg/compiler/lib/src/tokens/token.dart |
diff --git a/pkg/compiler/lib/src/tokens/token.dart b/pkg/compiler/lib/src/tokens/token.dart |
index 8526d78f3d4832b2abd281044ba468b13891c06c..e656f9e03068c8cf43391cf997a366be8ea509e2 100644 |
--- a/pkg/compiler/lib/src/tokens/token.dart |
+++ b/pkg/compiler/lib/src/tokens/token.dart |
@@ -12,87 +12,17 @@ import 'dart:collection' show |
import '../diagnostics/spannable.dart' show |
Spannable, |
SpannableAssertionFailure; |
-import '../util/characters.dart'; |
import '../util/util.dart' show |
computeHashCode; |
import 'keyword.dart' show |
Keyword; |
- |
-const int EOF_TOKEN = 0; |
- |
-const int KEYWORD_TOKEN = $k; |
-const int IDENTIFIER_TOKEN = $a; |
-const int BAD_INPUT_TOKEN = $X; |
-const int DOUBLE_TOKEN = $d; |
-const int INT_TOKEN = $i; |
-const int HEXADECIMAL_TOKEN = $x; |
-const int STRING_TOKEN = $SQ; |
- |
-const int AMPERSAND_TOKEN = $AMPERSAND; |
-const int BACKPING_TOKEN = $BACKPING; |
-const int BACKSLASH_TOKEN = $BACKSLASH; |
-const int BANG_TOKEN = $BANG; |
-const int BAR_TOKEN = $BAR; |
-const int COLON_TOKEN = $COLON; |
-const int COMMA_TOKEN = $COMMA; |
-const int EQ_TOKEN = $EQ; |
-const int GT_TOKEN = $GT; |
-const int HASH_TOKEN = $HASH; |
-const int OPEN_CURLY_BRACKET_TOKEN = $OPEN_CURLY_BRACKET; |
-const int OPEN_SQUARE_BRACKET_TOKEN = $OPEN_SQUARE_BRACKET; |
-const int OPEN_PAREN_TOKEN = $OPEN_PAREN; |
-const int LT_TOKEN = $LT; |
-const int MINUS_TOKEN = $MINUS; |
-const int PERIOD_TOKEN = $PERIOD; |
-const int PLUS_TOKEN = $PLUS; |
-const int QUESTION_TOKEN = $QUESTION; |
-const int AT_TOKEN = $AT; |
-const int CLOSE_CURLY_BRACKET_TOKEN = $CLOSE_CURLY_BRACKET; |
-const int CLOSE_SQUARE_BRACKET_TOKEN = $CLOSE_SQUARE_BRACKET; |
-const int CLOSE_PAREN_TOKEN = $CLOSE_PAREN; |
-const int SEMICOLON_TOKEN = $SEMICOLON; |
-const int SLASH_TOKEN = $SLASH; |
-const int TILDE_TOKEN = $TILDE; |
-const int STAR_TOKEN = $STAR; |
-const int PERCENT_TOKEN = $PERCENT; |
-const int CARET_TOKEN = $CARET; |
- |
-const int STRING_INTERPOLATION_TOKEN = 128; |
-const int LT_EQ_TOKEN = STRING_INTERPOLATION_TOKEN + 1; |
-const int FUNCTION_TOKEN = LT_EQ_TOKEN + 1; |
-const int SLASH_EQ_TOKEN = FUNCTION_TOKEN + 1; |
-const int PERIOD_PERIOD_PERIOD_TOKEN = SLASH_EQ_TOKEN + 1; |
-const int PERIOD_PERIOD_TOKEN = PERIOD_PERIOD_PERIOD_TOKEN + 1; |
-const int EQ_EQ_EQ_TOKEN = PERIOD_PERIOD_TOKEN + 1; |
-const int EQ_EQ_TOKEN = EQ_EQ_EQ_TOKEN + 1; |
-const int LT_LT_EQ_TOKEN = EQ_EQ_TOKEN + 1; |
-const int LT_LT_TOKEN = LT_LT_EQ_TOKEN + 1; |
-const int GT_EQ_TOKEN = LT_LT_TOKEN + 1; |
-const int GT_GT_EQ_TOKEN = GT_EQ_TOKEN + 1; |
-const int INDEX_EQ_TOKEN = GT_GT_EQ_TOKEN + 1; |
-const int INDEX_TOKEN = INDEX_EQ_TOKEN + 1; |
-const int BANG_EQ_EQ_TOKEN = INDEX_TOKEN + 1; |
-const int BANG_EQ_TOKEN = BANG_EQ_EQ_TOKEN + 1; |
-const int AMPERSAND_AMPERSAND_TOKEN = BANG_EQ_TOKEN + 1; |
-const int AMPERSAND_EQ_TOKEN = AMPERSAND_AMPERSAND_TOKEN + 1; |
-const int BAR_BAR_TOKEN = AMPERSAND_EQ_TOKEN + 1; |
-const int BAR_EQ_TOKEN = BAR_BAR_TOKEN + 1; |
-const int STAR_EQ_TOKEN = BAR_EQ_TOKEN + 1; |
-const int PLUS_PLUS_TOKEN = STAR_EQ_TOKEN + 1; |
-const int PLUS_EQ_TOKEN = PLUS_PLUS_TOKEN + 1; |
-const int MINUS_MINUS_TOKEN = PLUS_EQ_TOKEN + 1; |
-const int MINUS_EQ_TOKEN = MINUS_MINUS_TOKEN + 1; |
-const int TILDE_SLASH_EQ_TOKEN = MINUS_EQ_TOKEN + 1; |
-const int TILDE_SLASH_TOKEN = TILDE_SLASH_EQ_TOKEN + 1; |
-const int PERCENT_EQ_TOKEN = TILDE_SLASH_TOKEN + 1; |
-const int GT_GT_TOKEN = PERCENT_EQ_TOKEN + 1; |
-const int CARET_EQ_TOKEN = GT_GT_TOKEN + 1; |
-const int COMMENT_TOKEN = CARET_EQ_TOKEN + 1; |
-const int STRING_INTERPOLATION_IDENTIFIER_TOKEN = COMMENT_TOKEN + 1; |
-const int QUESTION_PERIOD_TOKEN = STRING_INTERPOLATION_IDENTIFIER_TOKEN + 1; |
-const int QUESTION_QUESTION_TOKEN = QUESTION_PERIOD_TOKEN + 1; |
-const int QUESTION_QUESTION_EQ_TOKEN = QUESTION_QUESTION_TOKEN + 1; |
+import 'precedence.dart' show |
+ PrecedenceInfo; |
+import 'precedence_constants.dart' as Precedence show |
+ BAD_INPUT_INFO; |
+import 'token_constants.dart' as Tokens show |
+ IDENTIFIER_TOKEN; |
/** |
* A token that doubles as a linked list. |
@@ -175,7 +105,7 @@ abstract class Token implements Spannable { |
* The number of characters parsed by this token. |
*/ |
int get charCount { |
- if (info == BAD_INPUT_INFO) { |
+ if (info == Precedence.BAD_INPUT_INFO) { |
// This is a token that wraps around an error message. Return 1 |
// instead of the size of the length of the error message. |
return 1; |
@@ -251,7 +181,7 @@ abstract class ErrorToken extends Token { |
ErrorToken(int charOffset) |
: super(charOffset); |
- PrecedenceInfo get info => BAD_INPUT_INFO; |
+ PrecedenceInfo get info => Precedence.BAD_INPUT_INFO; |
String get value { |
throw new SpannableAssertionFailure(this, assertionMessage); |
@@ -386,7 +316,7 @@ class StringToken extends Token { |
/// See [Token.stringValue] for an explanation. |
String get stringValue => null; |
- bool isIdentifier() => identical(kind, IDENTIFIER_TOKEN); |
+ bool isIdentifier() => identical(kind, Tokens.IDENTIFIER_TOKEN); |
String toString() => "StringToken($value)"; |
@@ -510,247 +440,3 @@ bool isBinaryOperator(String value) { |
bool isTernaryOperator(String value) => identical(value, '[]='); |
bool isMinusOperator(String value) => identical(value, '-'); |
- |
-class PrecedenceInfo { |
- final String value; |
- final int precedence; |
- final int kind; |
- |
- const PrecedenceInfo(this.value, this.precedence, this.kind); |
- |
- toString() => 'PrecedenceInfo($value, $precedence, $kind)'; |
- |
- int get hashCode => computeHashCode(value, precedence, kind); |
-} |
- |
-// TODO(ahe): The following are not tokens in Dart. |
-const PrecedenceInfo BACKPING_INFO = |
- const PrecedenceInfo('`', 0, BACKPING_TOKEN); |
-const PrecedenceInfo BACKSLASH_INFO = |
- const PrecedenceInfo('\\', 0, BACKSLASH_TOKEN); |
-const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO = |
- const PrecedenceInfo('...', 0, |
- PERIOD_PERIOD_PERIOD_TOKEN); |
- |
-/** |
- * The cascade operator has the lowest precedence of any operator |
- * except assignment. |
- */ |
-const int CASCADE_PRECEDENCE = 2; |
-const PrecedenceInfo PERIOD_PERIOD_INFO = |
- const PrecedenceInfo('..', CASCADE_PRECEDENCE, |
- PERIOD_PERIOD_TOKEN); |
- |
-const PrecedenceInfo BANG_INFO = |
- const PrecedenceInfo('!', 0, BANG_TOKEN); |
-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 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 SEMICOLON_INFO = |
- const PrecedenceInfo(';', 0, SEMICOLON_TOKEN); |
-const PrecedenceInfo COMMA_INFO = |
- const PrecedenceInfo(',', 0, COMMA_TOKEN); |
- |
-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 QUESTION_QUESTION_EQ_INFO = |
- const PrecedenceInfo('??=', |
- ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN); |
- |
-const PrecedenceInfo QUESTION_INFO = |
- const PrecedenceInfo('?', 3, QUESTION_TOKEN); |
- |
-const PrecedenceInfo QUESTION_QUESTION_INFO = |
- const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN); |
- |
-const PrecedenceInfo BAR_BAR_INFO = |
- const PrecedenceInfo('||', 5, BAR_BAR_TOKEN); |
- |
-const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = |
- const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN); |
- |
-const PrecedenceInfo BAR_INFO = |
- const PrecedenceInfo('|', 9, BAR_TOKEN); |
- |
-const PrecedenceInfo CARET_INFO = |
- const PrecedenceInfo('^', 10, CARET_TOKEN); |
- |
-const PrecedenceInfo AMPERSAND_INFO = |
- const PrecedenceInfo('&', 11, AMPERSAND_TOKEN); |
- |
-// 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 EQ_EQ_EQ_INFO = |
- const PrecedenceInfo('===', |
- EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); |
-const PrecedenceInfo EQ_EQ_INFO = |
- const PrecedenceInfo('==', |
- EQUALITY_PRECEDENCE, EQ_EQ_TOKEN); |
- |
-// 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 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); |
- |
-// Shift operators. |
-const PrecedenceInfo GT_GT_INFO = |
- const PrecedenceInfo('>>', 12, GT_GT_TOKEN); |
-const PrecedenceInfo LT_LT_INFO = |
- const PrecedenceInfo('<<', 12, LT_LT_TOKEN); |
- |
-// Additive operators. |
-const PrecedenceInfo MINUS_INFO = |
- const PrecedenceInfo('-', 13, MINUS_TOKEN); |
-const PrecedenceInfo PLUS_INFO = |
- const PrecedenceInfo('+', 13, PLUS_TOKEN); |
- |
-// 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 TILDE_SLASH_INFO = |
- const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN); |
- |
-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 KEYWORD_INFO = |
- const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN); |
- |
-const PrecedenceInfo EOF_INFO = |
- const PrecedenceInfo('EOF', 0, EOF_TOKEN); |
- |
-const PrecedenceInfo IDENTIFIER_INFO = |
- const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN); |
- |
-const PrecedenceInfo BAD_INPUT_INFO = |
- const PrecedenceInfo('malformed input', 0, |
- BAD_INPUT_TOKEN); |
- |
-const PrecedenceInfo OPEN_PAREN_INFO = |
- const PrecedenceInfo('(', POSTFIX_PRECEDENCE, |
- OPEN_PAREN_TOKEN); |
- |
-const PrecedenceInfo CLOSE_PAREN_INFO = |
- const PrecedenceInfo(')', 0, CLOSE_PAREN_TOKEN); |
- |
-const PrecedenceInfo OPEN_CURLY_BRACKET_INFO = |
- const PrecedenceInfo('{', 0, OPEN_CURLY_BRACKET_TOKEN); |
- |
-const PrecedenceInfo CLOSE_CURLY_BRACKET_INFO = |
- const PrecedenceInfo('}', 0, CLOSE_CURLY_BRACKET_TOKEN); |
- |
-const PrecedenceInfo INT_INFO = |
- const PrecedenceInfo('int', 0, INT_TOKEN); |
- |
-const PrecedenceInfo STRING_INFO = |
- const PrecedenceInfo('string', 0, STRING_TOKEN); |
- |
-const PrecedenceInfo OPEN_SQUARE_BRACKET_INFO = |
- const PrecedenceInfo('[', POSTFIX_PRECEDENCE, |
- OPEN_SQUARE_BRACKET_TOKEN); |
- |
-const PrecedenceInfo CLOSE_SQUARE_BRACKET_INFO = |
- const PrecedenceInfo(']', 0, CLOSE_SQUARE_BRACKET_TOKEN); |
- |
-const PrecedenceInfo DOUBLE_INFO = |
- const PrecedenceInfo('double', 0, DOUBLE_TOKEN); |
- |
-const PrecedenceInfo STRING_INTERPOLATION_INFO = |
- const PrecedenceInfo('\${', 0, |
- STRING_INTERPOLATION_TOKEN); |
- |
-const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO = |
- const PrecedenceInfo('\$', 0, |
- STRING_INTERPOLATION_IDENTIFIER_TOKEN); |
- |
-const PrecedenceInfo HEXADECIMAL_INFO = |
- const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN); |
- |
-const PrecedenceInfo COMMENT_INFO = |
- const PrecedenceInfo('comment', 0, COMMENT_TOKEN); |