| Index: pkg/analyzer/lib/src/dart/scanner/scanner.dart
|
| diff --git a/pkg/analyzer/lib/src/dart/scanner/scanner.dart b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
|
| index 7814eb7fde0bbd75eccaceaea41adc547f4981c8..0e60a902392749047a3c0c4205bbc307c39cc936 100644
|
| --- a/pkg/analyzer/lib/src/dart/scanner/scanner.dart
|
| +++ b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
|
| @@ -10,6 +10,7 @@ import 'package:analyzer/src/dart/scanner/reader.dart';
|
| import 'package:analyzer/src/generated/error.dart';
|
| import 'package:analyzer/src/generated/java_engine.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| +import 'package:charcode/ascii.dart';
|
|
|
| /**
|
| * A state in a state machine used to scan keywords.
|
| @@ -57,7 +58,7 @@ class KeywordState {
|
| * [character], or `null` if there is no valid state reachable from this state
|
| * with such a transition.
|
| */
|
| - KeywordState next(int character) => _table[character - 0x61];
|
| + KeywordState next(int character) => _table[character - $a];
|
|
|
| /**
|
| * Create the next state in the state machine where we have already recognized
|
| @@ -69,7 +70,7 @@ class KeywordState {
|
| int start, List<String> strings, int offset, int length) {
|
| List<KeywordState> result = new List<KeywordState>(26);
|
| assert(length != 0);
|
| - int chunk = 0x0;
|
| + int chunk = $nul;
|
| int chunkStart = -1;
|
| bool isLeaf = false;
|
| for (int i = offset; i < offset + length; i++) {
|
| @@ -80,7 +81,7 @@ class KeywordState {
|
| int c = strings[i].codeUnitAt(start);
|
| if (chunk != c) {
|
| if (chunkStart != -1) {
|
| - result[chunk - 0x61] = _computeKeywordStateTable(
|
| + result[chunk - $a] = _computeKeywordStateTable(
|
| start + 1, strings, chunkStart, i - chunkStart);
|
| }
|
| chunkStart = i;
|
| @@ -89,8 +90,8 @@ class KeywordState {
|
| }
|
| }
|
| if (chunkStart != -1) {
|
| - assert(result[chunk - 0x61] == null);
|
| - result[chunk - 0x61] = _computeKeywordStateTable(
|
| + assert(result[chunk - $a] == null);
|
| + result[chunk - $a] = _computeKeywordStateTable(
|
| start + 1, strings, chunkStart, offset + length - chunkStart);
|
| } else {
|
| assert(length == 1);
|
| @@ -207,6 +208,12 @@ class Scanner {
|
| bool scanGenericMethodComments = false;
|
|
|
| /**
|
| + * A flag indicating whether the lazy compound assignment operators '&&=' and
|
| + * '||=' are enabled.
|
| + */
|
| + bool scanLazyAssignmentOperators = false;
|
| +
|
| + /**
|
| * Initialize a newly created scanner to scan characters from the given
|
| * [source]. The given character [_reader] will be used to read the characters
|
| * in the source. The given [_errorListener] will be informed of any errors
|
| @@ -260,175 +267,175 @@ class Scanner {
|
|
|
| int bigSwitch(int next) {
|
| _beginToken();
|
| - if (next == 0xD) {
|
| + if (next == $cr) {
|
| // '\r'
|
| next = _reader.advance();
|
| - if (next == 0xA) {
|
| + if (next == $lf) {
|
| // '\n'
|
| next = _reader.advance();
|
| }
|
| recordStartOfLine();
|
| return next;
|
| - } else if (next == 0xA) {
|
| + } else if (next == $lf) {
|
| // '\n'
|
| next = _reader.advance();
|
| recordStartOfLine();
|
| return next;
|
| - } else if (next == 0x9 || next == 0x20) {
|
| + } else if (next == $tab || next == $space) {
|
| // '\t' || ' '
|
| return _reader.advance();
|
| }
|
| - if (next == 0x72) {
|
| + if (next == $r) {
|
| // 'r'
|
| int peek = _reader.peek();
|
| - if (peek == 0x22 || peek == 0x27) {
|
| + if (peek == $double_quote || peek == $single_quote) {
|
| // '"' || "'"
|
| int start = _reader.offset;
|
| return _tokenizeString(_reader.advance(), start, true);
|
| }
|
| }
|
| - if (0x61 <= next && next <= 0x7A) {
|
| + if ($a <= next && next <= $z) {
|
| // 'a'-'z'
|
| return _tokenizeKeywordOrIdentifier(next, true);
|
| }
|
| - if ((0x41 <= next && next <= 0x5A) || next == 0x5F || next == 0x24) {
|
| + if (($A <= next && next <= $Z) || next == $_ || next == $$) {
|
| // 'A'-'Z' || '_' || '$'
|
| return _tokenizeIdentifier(next, _reader.offset, true);
|
| }
|
| - if (next == 0x3C) {
|
| + if (next == $lt) {
|
| // '<'
|
| return _tokenizeLessThan(next);
|
| }
|
| - if (next == 0x3E) {
|
| + if (next == $gt) {
|
| // '>'
|
| return _tokenizeGreaterThan(next);
|
| }
|
| - if (next == 0x3D) {
|
| + if (next == $equal) {
|
| // '='
|
| return _tokenizeEquals(next);
|
| }
|
| - if (next == 0x21) {
|
| + if (next == $exclamation) {
|
| // '!'
|
| return _tokenizeExclamation(next);
|
| }
|
| - if (next == 0x2B) {
|
| + if (next == $plus) {
|
| // '+'
|
| return _tokenizePlus(next);
|
| }
|
| - if (next == 0x2D) {
|
| + if (next == $minus) {
|
| // '-'
|
| return _tokenizeMinus(next);
|
| }
|
| - if (next == 0x2A) {
|
| + if (next == $asterisk) {
|
| // '*'
|
| return _tokenizeMultiply(next);
|
| }
|
| - if (next == 0x25) {
|
| + if (next == $percent) {
|
| // '%'
|
| return _tokenizePercent(next);
|
| }
|
| - if (next == 0x26) {
|
| + if (next == $ampersand) {
|
| // '&'
|
| return _tokenizeAmpersand(next);
|
| }
|
| - if (next == 0x7C) {
|
| + if (next == $bar) {
|
| // '|'
|
| return _tokenizeBar(next);
|
| }
|
| - if (next == 0x5E) {
|
| + if (next == $caret) {
|
| // '^'
|
| return _tokenizeCaret(next);
|
| }
|
| - if (next == 0x5B) {
|
| + if (next == $open_bracket) {
|
| // '['
|
| return _tokenizeOpenSquareBracket(next);
|
| }
|
| - if (next == 0x7E) {
|
| + if (next == $tilde) {
|
| // '~'
|
| return _tokenizeTilde(next);
|
| }
|
| - if (next == 0x5C) {
|
| + if (next == $backslash) {
|
| // '\\'
|
| _appendTokenOfType(TokenType.BACKSLASH);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x23) {
|
| + if (next == $hash) {
|
| // '#'
|
| return _tokenizeTag(next);
|
| }
|
| - if (next == 0x28) {
|
| + if (next == $open_paren) {
|
| // '('
|
| _appendBeginToken(TokenType.OPEN_PAREN);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x29) {
|
| + if (next == $close_paren) {
|
| // ')'
|
| _appendEndToken(TokenType.CLOSE_PAREN, TokenType.OPEN_PAREN);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x2C) {
|
| + if (next == $comma) {
|
| // ','
|
| _appendTokenOfType(TokenType.COMMA);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x3A) {
|
| + if (next == $colon) {
|
| // ':'
|
| _appendTokenOfType(TokenType.COLON);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x3B) {
|
| + if (next == $semicolon) {
|
| // ';'
|
| _appendTokenOfType(TokenType.SEMICOLON);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x3F) {
|
| + if (next == $question) {
|
| // '?'
|
| return _tokenizeQuestion();
|
| }
|
| - if (next == 0x5D) {
|
| + if (next == $close_bracket) {
|
| // ']'
|
| _appendEndToken(
|
| TokenType.CLOSE_SQUARE_BRACKET, TokenType.OPEN_SQUARE_BRACKET);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x60) {
|
| + if (next == $backquote) {
|
| // '`'
|
| _appendTokenOfType(TokenType.BACKPING);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x7B) {
|
| + if (next == $lbrace) {
|
| // '{'
|
| _appendBeginToken(TokenType.OPEN_CURLY_BRACKET);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x7D) {
|
| + if (next == $rbrace) {
|
| // '}'
|
| _appendEndToken(
|
| TokenType.CLOSE_CURLY_BRACKET, TokenType.OPEN_CURLY_BRACKET);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x2F) {
|
| + if (next == $slash) {
|
| // '/'
|
| return _tokenizeSlashOrComment(next);
|
| }
|
| - if (next == 0x40) {
|
| + if (next == $at) {
|
| // '@'
|
| _appendTokenOfType(TokenType.AT);
|
| return _reader.advance();
|
| }
|
| - if (next == 0x22 || next == 0x27) {
|
| + if (next == $double_quote || next == $single_quote) {
|
| // '"' || "'"
|
| return _tokenizeString(next, _reader.offset, false);
|
| }
|
| - if (next == 0x2E) {
|
| + if (next == $dot) {
|
| // '.'
|
| return _tokenizeDotOrNumber(next);
|
| }
|
| - if (next == 0x30) {
|
| + if (next == $0) {
|
| // '0'
|
| return _tokenizeHexOrNumber(next);
|
| }
|
| - if (0x31 <= next && next <= 0x39) {
|
| + if ($1 <= next && next <= $9) {
|
| // '1'-'9'
|
| return _tokenizeNumber(next);
|
| }
|
| @@ -648,12 +655,12 @@ class Scanner {
|
| TokenType _matchGenericMethodCommentType(String value) {
|
| if (scanGenericMethodComments) {
|
| // Match /*< and >*/
|
| - if (StringUtilities.startsWith3(value, 0, 0x2F, 0x2A, 0x3C) &&
|
| - StringUtilities.endsWith3(value, 0x3E, 0x2A, 0x2F)) {
|
| + if (StringUtilities.startsWith3(value, 0, $slash, $asterisk, $lt) &&
|
| + StringUtilities.endsWith3(value, $gt, $asterisk, $slash)) {
|
| return TokenType.GENERIC_METHOD_TYPE_LIST;
|
| }
|
| // Match /*=
|
| - if (StringUtilities.startsWith3(value, 0, 0x2F, 0x2A, 0x3D)) {
|
| + if (StringUtilities.startsWith3(value, 0, $slash, $asterisk, $equal)) {
|
| return TokenType.GENERIC_METHOD_TYPE_ASSIGN;
|
| }
|
| }
|
| @@ -694,12 +701,17 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeAmpersand(int next) {
|
| - // && &= &
|
| + // &&= && &= &
|
| next = _reader.advance();
|
| - if (next == 0x26) {
|
| + if (next == $ampersand) {
|
| + next = _reader.advance();
|
| + if (scanLazyAssignmentOperators && next == $equal) {
|
| + _appendTokenOfType(TokenType.AMPERSAND_AMPERSAND_EQ);
|
| + return _reader.advance();
|
| + }
|
| _appendTokenOfType(TokenType.AMPERSAND_AMPERSAND);
|
| - return _reader.advance();
|
| - } else if (next == 0x3D) {
|
| + return next;
|
| + } else if (next == $equal) {
|
| _appendTokenOfType(TokenType.AMPERSAND_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -709,12 +721,17 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeBar(int next) {
|
| - // | || |=
|
| + // ||= || |= |
|
| next = _reader.advance();
|
| - if (next == 0x7C) {
|
| + if (next == $bar) {
|
| + next = _reader.advance();
|
| + if (scanLazyAssignmentOperators && next == $equal) {
|
| + _appendTokenOfType(TokenType.BAR_BAR_EQ);
|
| + return _reader.advance();
|
| + }
|
| _appendTokenOfType(TokenType.BAR_BAR);
|
| - return _reader.advance();
|
| - } else if (next == 0x3D) {
|
| + return next;
|
| + } else if (next == $equal) {
|
| _appendTokenOfType(TokenType.BAR_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -724,16 +741,16 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeCaret(int next) =>
|
| - _select(0x3D, TokenType.CARET_EQ, TokenType.CARET);
|
| + _select($equal, TokenType.CARET_EQ, TokenType.CARET);
|
|
|
| int _tokenizeDotOrNumber(int next) {
|
| int start = _reader.offset;
|
| next = _reader.advance();
|
| - if (0x30 <= next && next <= 0x39) {
|
| + if ($0 <= next && next <= $9) {
|
| return _tokenizeFractionPart(next, start);
|
| - } else if (0x2E == next) {
|
| + } else if ($dot == next) {
|
| return _select(
|
| - 0x2E, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD);
|
| + $dot, TokenType.PERIOD_PERIOD_PERIOD, TokenType.PERIOD_PERIOD);
|
| } else {
|
| _appendTokenOfType(TokenType.PERIOD);
|
| return next;
|
| @@ -743,10 +760,10 @@ class Scanner {
|
| int _tokenizeEquals(int next) {
|
| // = == =>
|
| next = _reader.advance();
|
| - if (next == 0x3D) {
|
| + if (next == $equal) {
|
| _appendTokenOfType(TokenType.EQ_EQ);
|
| return _reader.advance();
|
| - } else if (next == 0x3E) {
|
| + } else if (next == $gt) {
|
| _appendTokenOfType(TokenType.FUNCTION);
|
| return _reader.advance();
|
| }
|
| @@ -757,7 +774,7 @@ class Scanner {
|
| int _tokenizeExclamation(int next) {
|
| // ! !=
|
| next = _reader.advance();
|
| - if (next == 0x3D) {
|
| + if (next == $equal) {
|
| _appendTokenOfType(TokenType.BANG_EQ);
|
| return _reader.advance();
|
| }
|
| @@ -766,12 +783,12 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeExponent(int next) {
|
| - if (next == 0x2B || next == 0x2D) {
|
| + if (next == $plus || next == $minus) {
|
| next = _reader.advance();
|
| }
|
| bool hasDigits = false;
|
| while (true) {
|
| - if (0x30 <= next && next <= 0x39) {
|
| + if ($0 <= next && next <= $9) {
|
| hasDigits = true;
|
| } else {
|
| if (!hasDigits) {
|
| @@ -787,9 +804,9 @@ class Scanner {
|
| bool done = false;
|
| bool hasDigit = false;
|
| LOOP: while (!done) {
|
| - if (0x30 <= next && next <= 0x39) {
|
| + if ($0 <= next && next <= $9) {
|
| hasDigit = true;
|
| - } else if (0x65 == next || 0x45 == next) {
|
| + } else if ($e == next || $E == next) {
|
| hasDigit = true;
|
| next = _tokenizeExponent(_reader.advance());
|
| done = true;
|
| @@ -802,8 +819,8 @@ class Scanner {
|
| }
|
| if (!hasDigit) {
|
| _appendStringToken(TokenType.INT, _reader.getString(start, -2));
|
| - if (0x2E == next) {
|
| - return _selectWithOffset(0x2E, TokenType.PERIOD_PERIOD_PERIOD,
|
| + if ($dot == next) {
|
| + return _selectWithOffset($dot, TokenType.PERIOD_PERIOD_PERIOD,
|
| TokenType.PERIOD_PERIOD, _reader.offset - 1);
|
| }
|
| _appendTokenOfTypeWithOffset(TokenType.PERIOD, _reader.offset - 1);
|
| @@ -817,12 +834,12 @@ class Scanner {
|
| int _tokenizeGreaterThan(int next) {
|
| // > >= >> >>=
|
| next = _reader.advance();
|
| - if (0x3D == next) {
|
| + if ($equal == next) {
|
| _appendTokenOfType(TokenType.GT_EQ);
|
| return _reader.advance();
|
| - } else if (0x3E == next) {
|
| + } else if ($gt == next) {
|
| next = _reader.advance();
|
| - if (0x3D == next) {
|
| + if ($equal == next) {
|
| _appendTokenOfType(TokenType.GT_GT_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -840,9 +857,9 @@ class Scanner {
|
| bool hasDigits = false;
|
| while (true) {
|
| next = _reader.advance();
|
| - if ((0x30 <= next && next <= 0x39) ||
|
| - (0x41 <= next && next <= 0x46) ||
|
| - (0x61 <= next && next <= 0x66)) {
|
| + if (($0 <= next && next <= $9) ||
|
| + ($A <= next && next <= $F) ||
|
| + ($a <= next && next <= $f)) {
|
| hasDigits = true;
|
| } else {
|
| if (!hasDigits) {
|
| @@ -857,7 +874,7 @@ class Scanner {
|
|
|
| int _tokenizeHexOrNumber(int next) {
|
| int x = _reader.peek();
|
| - if (x == 0x78 || x == 0x58) {
|
| + if (x == $x || x == $X) {
|
| _reader.advance();
|
| return _tokenizeHex(x);
|
| }
|
| @@ -865,11 +882,11 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeIdentifier(int next, int start, bool allowDollar) {
|
| - while ((0x61 <= next && next <= 0x7A) ||
|
| - (0x41 <= next && next <= 0x5A) ||
|
| - (0x30 <= next && next <= 0x39) ||
|
| - next == 0x5F ||
|
| - (next == 0x24 && allowDollar)) {
|
| + while (($a <= next && next <= $z) ||
|
| + ($A <= next && next <= $Z) ||
|
| + ($0 <= next && next <= $9) ||
|
| + next == $_ ||
|
| + (next == $$ && allowDollar)) {
|
| next = _reader.advance();
|
| }
|
| _appendStringToken(
|
| @@ -881,7 +898,7 @@ class Scanner {
|
| _appendBeginToken(TokenType.STRING_INTERPOLATION_EXPRESSION);
|
| next = _reader.advance();
|
| while (next != -1) {
|
| - if (next == 0x7D) {
|
| + if (next == $rbrace) {
|
| BeginToken begin =
|
| _findTokenMatchingClosingBraceInInterpolationExpression();
|
| if (begin == null) {
|
| @@ -914,9 +931,9 @@ class Scanner {
|
| int _tokenizeInterpolatedIdentifier(int next, int start) {
|
| _appendStringTokenWithOffset(
|
| TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 0);
|
| - if ((0x41 <= next && next <= 0x5A) ||
|
| - (0x61 <= next && next <= 0x7A) ||
|
| - next == 0x5F) {
|
| + if (($A <= next && next <= $Z) ||
|
| + ($a <= next && next <= $z) ||
|
| + next == $_) {
|
| _beginToken();
|
| next = _tokenizeKeywordOrIdentifier(next, false);
|
| }
|
| @@ -927,17 +944,17 @@ class Scanner {
|
| int _tokenizeKeywordOrIdentifier(int next, bool allowDollar) {
|
| KeywordState state = KeywordState.KEYWORD_STATE;
|
| int start = _reader.offset;
|
| - while (state != null && 0x61 <= next && next <= 0x7A) {
|
| + while (state != null && $a <= next && next <= $z) {
|
| state = state.next(next);
|
| next = _reader.advance();
|
| }
|
| if (state == null || state.keyword() == null) {
|
| return _tokenizeIdentifier(next, start, allowDollar);
|
| }
|
| - if ((0x41 <= next && next <= 0x5A) ||
|
| - (0x30 <= next && next <= 0x39) ||
|
| - next == 0x5F ||
|
| - next == 0x24) {
|
| + if (($A <= next && next <= $Z) ||
|
| + ($0 <= next && next <= $9) ||
|
| + next == $_ ||
|
| + next == $$) {
|
| return _tokenizeIdentifier(next, start, allowDollar);
|
| } else if (next < 128) {
|
| _appendKeywordToken(state.keyword());
|
| @@ -950,11 +967,11 @@ class Scanner {
|
| int _tokenizeLessThan(int next) {
|
| // < <= << <<=
|
| next = _reader.advance();
|
| - if (0x3D == next) {
|
| + if ($equal == next) {
|
| _appendTokenOfType(TokenType.LT_EQ);
|
| return _reader.advance();
|
| - } else if (0x3C == next) {
|
| - return _select(0x3D, TokenType.LT_LT_EQ, TokenType.LT_LT);
|
| + } else if ($lt == next) {
|
| + return _select($equal, TokenType.LT_LT_EQ, TokenType.LT_LT);
|
| } else {
|
| _appendTokenOfType(TokenType.LT);
|
| return next;
|
| @@ -964,10 +981,10 @@ class Scanner {
|
| int _tokenizeMinus(int next) {
|
| // - -- -=
|
| next = _reader.advance();
|
| - if (next == 0x2D) {
|
| + if (next == $minus) {
|
| _appendTokenOfType(TokenType.MINUS_MINUS);
|
| return _reader.advance();
|
| - } else if (next == 0x3D) {
|
| + } else if (next == $equal) {
|
| _appendTokenOfType(TokenType.MINUS_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -985,9 +1002,9 @@ class Scanner {
|
| _appendCommentToken(
|
| TokenType.MULTI_LINE_COMMENT, _reader.getString(_tokenStart, 0));
|
| return next;
|
| - } else if (0x2A == next) {
|
| + } else if ($asterisk == next) {
|
| next = _reader.advance();
|
| - if (0x2F == next) {
|
| + if ($slash == next) {
|
| --nesting;
|
| if (0 == nesting) {
|
| _appendCommentToken(TokenType.MULTI_LINE_COMMENT,
|
| @@ -997,19 +1014,19 @@ class Scanner {
|
| next = _reader.advance();
|
| }
|
| }
|
| - } else if (0x2F == next) {
|
| + } else if ($slash == next) {
|
| next = _reader.advance();
|
| - if (0x2A == next) {
|
| + if ($asterisk == next) {
|
| next = _reader.advance();
|
| ++nesting;
|
| }
|
| - } else if (next == 0xD) {
|
| + } else if (next == $cr) {
|
| next = _reader.advance();
|
| - if (next == 0xA) {
|
| + if (next == $lf) {
|
| next = _reader.advance();
|
| }
|
| recordStartOfLine();
|
| - } else if (next == 0xA) {
|
| + } else if (next == $lf) {
|
| next = _reader.advance();
|
| recordStartOfLine();
|
| } else {
|
| @@ -1024,13 +1041,13 @@ class Scanner {
|
| while (next != quoteChar) {
|
| if (next == -1) {
|
| break outer;
|
| - } else if (next == 0xD) {
|
| + } else if (next == $cr) {
|
| next = _reader.advance();
|
| - if (next == 0xA) {
|
| + if (next == $lf) {
|
| next = _reader.advance();
|
| }
|
| recordStartOfLine();
|
| - } else if (next == 0xA) {
|
| + } else if (next == $lf) {
|
| next = _reader.advance();
|
| recordStartOfLine();
|
| } else {
|
| @@ -1057,7 +1074,7 @@ class Scanner {
|
| }
|
| int next = _reader.advance();
|
| while (next != -1) {
|
| - if (next == 0x24) {
|
| + if (next == $$) {
|
| _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
|
| next = _tokenizeStringInterpolation(start);
|
| _beginToken();
|
| @@ -1075,30 +1092,30 @@ class Scanner {
|
| }
|
| continue;
|
| }
|
| - if (next == 0x5C) {
|
| + if (next == $backslash) {
|
| next = _reader.advance();
|
| if (next == -1) {
|
| break;
|
| }
|
| - if (next == 0xD) {
|
| + if (next == $cr) {
|
| next = _reader.advance();
|
| - if (next == 0xA) {
|
| + if (next == $lf) {
|
| next = _reader.advance();
|
| }
|
| recordStartOfLine();
|
| - } else if (next == 0xA) {
|
| + } else if (next == $lf) {
|
| recordStartOfLine();
|
| next = _reader.advance();
|
| } else {
|
| next = _reader.advance();
|
| }
|
| - } else if (next == 0xD) {
|
| + } else if (next == $cr) {
|
| next = _reader.advance();
|
| - if (next == 0xA) {
|
| + if (next == $lf) {
|
| next = _reader.advance();
|
| }
|
| recordStartOfLine();
|
| - } else if (next == 0xA) {
|
| + } else if (next == $lf) {
|
| recordStartOfLine();
|
| next = _reader.advance();
|
| } else {
|
| @@ -1115,17 +1132,17 @@ class Scanner {
|
| }
|
|
|
| int _tokenizeMultiply(int next) =>
|
| - _select(0x3D, TokenType.STAR_EQ, TokenType.STAR);
|
| + _select($equal, TokenType.STAR_EQ, TokenType.STAR);
|
|
|
| int _tokenizeNumber(int next) {
|
| int start = _reader.offset;
|
| while (true) {
|
| next = _reader.advance();
|
| - if (0x30 <= next && next <= 0x39) {
|
| + if ($0 <= next && next <= $9) {
|
| continue;
|
| - } else if (next == 0x2E) {
|
| + } else if (next == $dot) {
|
| return _tokenizeFractionPart(_reader.advance(), start);
|
| - } else if (next == 0x65 || next == 0x45) {
|
| + } else if (next == $e || next == $E) {
|
| return _tokenizeFractionPart(next, start);
|
| } else {
|
| _appendStringToken(
|
| @@ -1138,8 +1155,8 @@ class Scanner {
|
| int _tokenizeOpenSquareBracket(int next) {
|
| // [ [] []=
|
| next = _reader.advance();
|
| - if (next == 0x5D) {
|
| - return _select(0x3D, TokenType.INDEX_EQ, TokenType.INDEX);
|
| + if (next == $close_bracket) {
|
| + return _select($equal, TokenType.INDEX_EQ, TokenType.INDEX);
|
| } else {
|
| _appendBeginToken(TokenType.OPEN_SQUARE_BRACKET);
|
| return next;
|
| @@ -1147,15 +1164,15 @@ class Scanner {
|
| }
|
|
|
| int _tokenizePercent(int next) =>
|
| - _select(0x3D, TokenType.PERCENT_EQ, TokenType.PERCENT);
|
| + _select($equal, TokenType.PERCENT_EQ, TokenType.PERCENT);
|
|
|
| int _tokenizePlus(int next) {
|
| // + ++ +=
|
| next = _reader.advance();
|
| - if (0x2B == next) {
|
| + if ($plus == next) {
|
| _appendTokenOfType(TokenType.PLUS_PLUS);
|
| return _reader.advance();
|
| - } else if (0x3D == next) {
|
| + } else if ($equal == next) {
|
| _appendTokenOfType(TokenType.PLUS_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -1167,14 +1184,14 @@ class Scanner {
|
| int _tokenizeQuestion() {
|
| // ? ?. ?? ??=
|
| int next = _reader.advance();
|
| - if (next == 0x2E) {
|
| + if (next == $dot) {
|
| // '.'
|
| _appendTokenOfType(TokenType.QUESTION_PERIOD);
|
| return _reader.advance();
|
| - } else if (next == 0x3F) {
|
| + } else if (next == $question) {
|
| // '?'
|
| next = _reader.advance();
|
| - if (next == 0x3D) {
|
| + if (next == $equal) {
|
| // '='
|
| _appendTokenOfType(TokenType.QUESTION_QUESTION_EQ);
|
| return _reader.advance();
|
| @@ -1195,7 +1212,7 @@ class Scanner {
|
| _appendCommentToken(
|
| TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, 0));
|
| return next;
|
| - } else if (0xA == next || 0xD == next) {
|
| + } else if ($lf == next || $cr == next) {
|
| _appendCommentToken(
|
| TokenType.SINGLE_LINE_COMMENT, _reader.getString(_tokenStart, -1));
|
| return next;
|
| @@ -1209,7 +1226,7 @@ class Scanner {
|
| if (next == quoteChar) {
|
| _appendStringToken(TokenType.STRING, _reader.getString(start, 0));
|
| return _reader.advance();
|
| - } else if (next == 0xD || next == 0xA) {
|
| + } else if (next == $cr || next == $lf) {
|
| _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL);
|
| _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
|
| return _reader.advance();
|
| @@ -1223,16 +1240,16 @@ class Scanner {
|
|
|
| int _tokenizeSingleLineString(int next, int quoteChar, int start) {
|
| while (next != quoteChar) {
|
| - if (next == 0x5C) {
|
| + if (next == $backslash) {
|
| next = _reader.advance();
|
| - } else if (next == 0x24) {
|
| + } else if (next == $$) {
|
| _appendStringToken(TokenType.STRING, _reader.getString(start, -1));
|
| next = _tokenizeStringInterpolation(start);
|
| _beginToken();
|
| start = _reader.offset;
|
| continue;
|
| }
|
| - if (next <= 0xD && (next == 0xA || next == 0xD || next == -1)) {
|
| + if (next <= $cr && (next == $lf || next == $cr || next == -1)) {
|
| _reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL);
|
| if (start == _reader.offset) {
|
| _appendStringTokenWithOffset(TokenType.STRING, "", 1);
|
| @@ -1251,11 +1268,11 @@ class Scanner {
|
|
|
| int _tokenizeSlashOrComment(int next) {
|
| next = _reader.advance();
|
| - if (0x2A == next) {
|
| + if ($asterisk == next) {
|
| return _tokenizeMultiLineComment(next);
|
| - } else if (0x2F == next) {
|
| + } else if ($slash == next) {
|
| return _tokenizeSingleLineComment(next);
|
| - } else if (0x3D == next) {
|
| + } else if ($equal == next) {
|
| _appendTokenOfType(TokenType.SLASH_EQ);
|
| return _reader.advance();
|
| } else {
|
| @@ -1288,7 +1305,7 @@ class Scanner {
|
| int _tokenizeStringInterpolation(int start) {
|
| _beginToken();
|
| int next = _reader.advance();
|
| - if (next == 0x7B) {
|
| + if (next == $lbrace) {
|
| return _tokenizeInterpolatedExpression(next, start);
|
| } else {
|
| return _tokenizeInterpolatedIdentifier(next, start);
|
| @@ -1298,10 +1315,10 @@ class Scanner {
|
| int _tokenizeTag(int next) {
|
| // # or #!.*[\n\r]
|
| if (_reader.offset == 0) {
|
| - if (_reader.peek() == 0x21) {
|
| + if (_reader.peek() == $exclamation) {
|
| do {
|
| next = _reader.advance();
|
| - } while (next != 0xA && next != 0xD && next > 0);
|
| + } while (next != $lf && next != $cr && next > 0);
|
| _appendStringToken(
|
| TokenType.SCRIPT_TAG, _reader.getString(_tokenStart, 0));
|
| return next;
|
| @@ -1314,8 +1331,8 @@ class Scanner {
|
| int _tokenizeTilde(int next) {
|
| // ~ ~/ ~/=
|
| next = _reader.advance();
|
| - if (next == 0x2F) {
|
| - return _select(0x3D, TokenType.TILDE_SLASH_EQ, TokenType.TILDE_SLASH);
|
| + if (next == $slash) {
|
| + return _select($equal, TokenType.TILDE_SLASH_EQ, TokenType.TILDE_SLASH);
|
| } else {
|
| _appendTokenOfType(TokenType.TILDE);
|
| return next;
|
| @@ -1326,8 +1343,8 @@ class Scanner {
|
| * Checks if [value] is a single-line or multi-line comment.
|
| */
|
| static bool _isDocumentationComment(String value) {
|
| - return StringUtilities.startsWith3(value, 0, 0x2F, 0x2F, 0x2F) ||
|
| - StringUtilities.startsWith3(value, 0, 0x2F, 0x2A, 0x2A);
|
| + return StringUtilities.startsWith3(value, 0, $slash, $slash, $slash) ||
|
| + StringUtilities.startsWith3(value, 0, $slash, $asterisk, $asterisk);
|
| }
|
| }
|
|
|
|
|