Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/scanner/token.dart |
| diff --git a/pkg/front_end/lib/src/fasta/scanner/token.dart b/pkg/front_end/lib/src/fasta/scanner/token.dart |
| index 31752b92d94102b4ee2b50fb5b10b6440c890898..003f16b8840049f9354c0ad62a56cd9b6f1e1b8c 100644 |
| --- a/pkg/front_end/lib/src/fasta/scanner/token.dart |
| +++ b/pkg/front_end/lib/src/fasta/scanner/token.dart |
| @@ -17,11 +17,11 @@ import 'string_canonicalizer.dart'; |
| /** |
| * A token that doubles as a linked list. |
| */ |
| -abstract class Token { |
| +abstract class Token implements analyzer.Token { |
| /** |
| * The character offset of the start of this token within the source text. |
| */ |
| - final int charOffset; |
| + int charOffset; |
| Token(this.charOffset); |
| @@ -130,13 +130,102 @@ abstract class Token { |
| bool get isBuiltInIdentifier => false; |
| + @override |
| bool get isOperator => info.isOperator; |
| + @override |
| bool get isUserDefinableOperator => info.isUserDefinableOperator; |
| + @override |
| analyzer.TokenType get type => info; |
| + @override |
| int get offset => charOffset; |
| + |
| + @override |
| + set offset(int newOffset) { |
| + charOffset = newOffset; |
| + } |
| + |
| + @override |
| + int get length => charCount; |
| + |
| + @override |
| + int get end => charEnd; |
| + |
| + @override |
| + analyzer.Token get previous => previousToken; |
| + |
| + @override |
| + set previous(analyzer.Token newToken) { |
| + previousToken = newToken as Token; |
| + } |
| + |
| + @override |
| + void applyDelta(int delta) { |
| + charOffset += delta; |
| + Token token = precedingComments; |
| + while (token != null) { |
| + token.applyDelta(delta); |
| + token = token.next; |
| + } |
| + } |
| + |
| + @override |
| + analyzer.Token copy() { |
| + return copyWithoutComments() |
| + ..precedingComments = copyComments(precedingComments) as Token; |
|
ahe
2017/03/20 12:32:48
Could you remove the casts from this file? As far
|
| + } |
| + |
| + @override |
| + analyzer.Token copyComments(analyzer.Token token) { |
| + if (token == null) { |
| + return null; |
| + } |
| + Token head = token.copy(); |
| + Token tail = head; |
| + token = token.next; |
| + while (token != null) { |
| + tail = tail.setNext(token.copy()); |
| + token = token.next; |
| + } |
| + return head; |
| + } |
| + |
| + /// Return a copy of the receiver without [preceedingComments]. |
| + Token copyWithoutComments(); |
| + |
| + @override |
| + bool get isSynthetic => charCount == 0; |
| + |
| + @override |
| + analyzer.Keyword get keyword => null; |
| + |
| + @override |
| + bool matchesAny(List<analyzer.TokenType> types) { |
| + for (analyzer.TokenType type in types) { |
| + if (this.type == type) { |
| + return true; |
| + } |
| + } |
| + return false; |
| + } |
| + |
| + @override |
| + analyzer.Token setNext(analyzer.Token token) { |
| + next = token as Token; |
| + next.previousToken = this; |
| + return token; |
| + } |
| + |
| + @override |
| + analyzer.Token setNextWithoutSettingPrevious(analyzer.Token token) { |
| + next = token as Token; |
| + return token; |
| + } |
| + |
| + @override |
| + Object value() => lexeme; |
| } |
| /** |
| @@ -157,6 +246,9 @@ class SymbolToken extends Token { |
| String toString() => "SymbolToken($lexeme)"; |
| bool get isEof => info == EOF_INFO; |
| + |
| + @override |
| + Token copyWithoutComments() => new SymbolToken(info, charOffset); |
| } |
| /** |
| @@ -197,6 +289,12 @@ class KeywordToken extends Token { |
| } |
| String toString() => "KeywordToken($lexeme)"; |
| + |
| + @override |
| + Token copyWithoutComments() => new KeywordToken(keyword, charOffset); |
| + |
| + @override |
| + Object value() => keyword; |
| } |
| /** |
| @@ -262,6 +360,9 @@ class StringToken extends Token { |
| } |
| } |
| + StringToken._(this.info, this.valueOrLazySubstring, int charOffset) |
|
ahe
2017/03/20 12:32:48
I'd prefer a non-private name for this.
|
| + : super(charOffset); |
| + |
| String get lexeme { |
| if (valueOrLazySubstring is String) { |
| return valueOrLazySubstring; |
| @@ -299,6 +400,10 @@ class StringToken extends Token { |
| static String decodeUtf8(List<int> data, int start, int end, bool asciiOnly) { |
| return canonicalizer.canonicalize(data, start, end, asciiOnly); |
| } |
| + |
| + @override |
| + Token copyWithoutComments() => |
| + new StringToken._(info, valueOrLazySubstring, charOffset); |
| } |
| /** |