| Index: third_party/pkg/angular/lib/core/parser/lexer.dart
|
| diff --git a/third_party/pkg/angular/lib/core/parser/lexer.dart b/third_party/pkg/angular/lib/core/parser/lexer.dart
|
| index 3361c8f53ae420ce14e5b25759c23d785675ad1f..41c96c3a81595b822f6951be9d0e64ba13df70fb 100644
|
| --- a/third_party/pkg/angular/lib/core/parser/lexer.dart
|
| +++ b/third_party/pkg/angular/lib/core/parser/lexer.dart
|
| @@ -1,34 +1,11 @@
|
| library angular.core.parser.lexer;
|
|
|
| -import 'package:angular/core/module.dart' show NgInjectableService;
|
| +import 'package:angular/core/annotation_src.dart';
|
| import 'package:angular/core/parser/characters.dart';
|
|
|
| -class Token {
|
| - final int index;
|
| - final String text;
|
| +part 'tokens.dart';
|
|
|
| - var value;
|
| - // Tokens should have one of these set.
|
| - String opKey;
|
| - String key;
|
| -
|
| - Token(this.index, this.text);
|
| -
|
| - withOp(op) {
|
| - this.opKey = op;
|
| - }
|
| -
|
| - withGetterSetter(key) {
|
| - this.key = key;
|
| - }
|
| -
|
| - withValue(value) { this.value = value; }
|
| -
|
| - toString() => "Token($text)";
|
| -}
|
| -
|
| -
|
| -@NgInjectableService()
|
| +@Injectable()
|
| class Lexer {
|
| List<Token> call(String text) {
|
| Scanner scanner = new Scanner(text);
|
| @@ -72,7 +49,7 @@ class Scanner {
|
| switch (peek) {
|
| case $PERIOD:
|
| advance();
|
| - return isDigit(peek) ? scanNumber(start) : new Token(start, '.');
|
| + return isDigit(peek) ? scanNumber(start) : new CharacterToken(start, $PERIOD);
|
| case $LPAREN:
|
| case $RPAREN:
|
| case $LBRACE:
|
| @@ -82,7 +59,7 @@ class Scanner {
|
| case $COMMA:
|
| case $COLON:
|
| case $SEMICOLON:
|
| - return scanCharacter(start, new String.fromCharCode(peek));
|
| + return scanCharacter(start, peek);
|
| case $SQ:
|
| case $DQ:
|
| return scanString();
|
| @@ -115,17 +92,17 @@ class Scanner {
|
| return null;
|
| }
|
|
|
| - Token scanCharacter(int start, String string) {
|
| - assert(peek == string.codeUnitAt(0));
|
| + Token scanCharacter(int start, int code) {
|
| + assert(peek == code);
|
| advance();
|
| - return new Token(start, string);
|
| + return new CharacterToken(start, code);
|
| }
|
|
|
| Token scanOperator(int start, String string) {
|
| assert(peek == string.codeUnitAt(0));
|
| assert(OPERATORS.contains(string));
|
| advance();
|
| - return new Token(start, string)..withOp(string);
|
| + return new OperatorToken(start, string);
|
| }
|
|
|
| Token scanComplexOperator(int start, int code, String one, String two) {
|
| @@ -137,7 +114,7 @@ class Scanner {
|
| string += two;
|
| }
|
| assert(OPERATORS.contains(string));
|
| - return new Token(start, string)..withOp(string);
|
| + return new OperatorToken(start, string);
|
| }
|
|
|
| Token scanIdentifier() {
|
| @@ -146,15 +123,7 @@ class Scanner {
|
| advance();
|
| while (isIdentifierPart(peek)) advance();
|
| String string = input.substring(start, index);
|
| - Token result = new Token(start, string);
|
| - // TODO(kasperl): Deal with null, undefined, true, and false in
|
| - // a cleaner and faster way.
|
| - if (OPERATORS.contains(string)) {
|
| - result.withOp(string);
|
| - } else {
|
| - result.withGetterSetter(string);
|
| - }
|
| - return result;
|
| + return new IdentifierToken(start, string, KEYWORDS.contains(string));
|
| }
|
|
|
| Token scanNumber(int start) {
|
| @@ -178,7 +147,7 @@ class Scanner {
|
| }
|
| String string = input.substring(start, index);
|
| num value = simple ? int.parse(string) : double.parse(string);
|
| - return new Token(start, string)..withValue(value);
|
| + return new NumberToken(start, value);
|
| }
|
|
|
| Token scanString() {
|
| @@ -202,7 +171,9 @@ class Scanner {
|
| String hex = input.substring(index + 1, index + 5);
|
| unescaped = int.parse(hex, radix: 16, onError: (ignore) {
|
| error('Invalid unicode escape [\\u$hex]'); });
|
| - for (int i = 0; i < 5; i++) advance();
|
| + for (int i = 0; i < 5; i++) {
|
| + advance();
|
| + }
|
| } else {
|
| unescaped = unescape(peek);
|
| advance();
|
| @@ -226,12 +197,11 @@ class Scanner {
|
| buffer.write(last);
|
| unescaped = buffer.toString();
|
| }
|
| - return new Token(start, string)..withValue(unescaped);
|
| + return new StringToken(start, string, unescaped);
|
| }
|
|
|
| void advance() {
|
| - if (++index >= length) peek = $EOF;
|
| - else peek = input.codeUnitAt(index);
|
| + peek = ++index >= length ? $EOF : input.codeUnitAt(index);
|
| }
|
|
|
| void error(String message, [int offset = 0]) {
|
| @@ -242,11 +212,14 @@ class Scanner {
|
| }
|
| }
|
|
|
| -Set<String> OPERATORS = new Set<String>.from([
|
| - 'undefined',
|
| +Set<String> KEYWORDS = new Set<String>.from([
|
| 'null',
|
| + 'undefined',
|
| 'true',
|
| 'false',
|
| +]);
|
| +
|
| +Set<String> OPERATORS = new Set<String>.from([
|
| '+',
|
| '-',
|
| '*',
|
|
|