| 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);
|
|
|