Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/scanner/string_scanner.dart |
| diff --git a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart |
| index af35b011fcf60e5618ef3e6f6ef87ce94da9ca3d..9799ae087a6303df66daf614ead82fa8d4a3cd60 100644 |
| --- a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart |
| +++ b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart |
| @@ -5,9 +5,7 @@ |
| library dart2js.scanner.string_scanner; |
| import 'array_based_scanner.dart' show ArrayBasedScanner; |
| - |
| import 'precedence.dart' show PrecedenceInfo; |
| - |
| import 'token.dart' show CommentToken, DartDocToken, StringToken; |
| /** |
| @@ -19,54 +17,79 @@ class StringScanner extends ArrayBasedScanner { |
| String string; |
| /** The current offset in [string]. */ |
| + @override |
| int scanOffset = -1; |
| StringScanner(String string, {bool includeComments: false}) |
| : string = ensureZeroTermination(string), |
| super(includeComments); |
| - static String ensureZeroTermination(String string) { |
|
ahe
2017/04/04 08:17:00
Please revert unrelated formatting changes.
|
| - return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) |
| - // TODO(lry): abort instead of copying the array, or warn? |
| - ? string + '\x00' |
| - : string; |
| - } |
| - |
| - int advance() => string.codeUnitAt(++scanOffset); |
| - int peek() => string.codeUnitAt(scanOffset + 1); |
| - |
| + @override |
| int get stringOffset => scanOffset; |
| - int currentAsUnicode(int next) => next; |
| + @override |
| + int advance() => string.codeUnitAt(++scanOffset); |
| - void handleUnicode(int startScanOffset) {} |
| + @override |
| + bool atEndOfFile() => scanOffset >= string.length - 1; |
| @override |
| - StringToken createSubstringToken( |
| + CommentToken createCommentToken( |
| PrecedenceInfo info, int start, bool asciiOnly, |
| [int extraOffset = 0]) { |
| - return new StringToken.fromSubstring( |
| + return new CommentToken.fromSubstring( |
| info, string, start, scanOffset + extraOffset, tokenStart, |
| canonicalize: true); |
| } |
| @override |
| - CommentToken createCommentToken( |
| + DartDocToken createDartDocToken( |
| PrecedenceInfo info, int start, bool asciiOnly, |
| [int extraOffset = 0]) { |
| - return new CommentToken.fromSubstring( |
| + return new DartDocToken.fromSubstring( |
| info, string, start, scanOffset + extraOffset, tokenStart, |
| canonicalize: true); |
| } |
| @override |
| - DartDocToken createDartDocToken( |
| + StringToken createSubstringToken( |
| PrecedenceInfo info, int start, bool asciiOnly, |
| [int extraOffset = 0]) { |
| - return new DartDocToken.fromSubstring( |
| + return new StringToken.fromSubstring( |
| info, string, start, scanOffset + extraOffset, tokenStart, |
| canonicalize: true); |
| } |
| - bool atEndOfFile() => scanOffset >= string.length - 1; |
| + @override |
| + int currentAsUnicode(int next) => next; |
| + |
| + @override |
| + void handleUnicode(int startScanOffset) {} |
| + |
| + @override |
| + int peek() => string.codeUnitAt(scanOffset + 1); |
| + |
| + static String ensureZeroTermination(String string) { |
| + return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) |
| + // TODO(lry): abort instead of copying the array, or warn? |
| + ? string + '\x00' |
| + : string; |
| + } |
| +} |
| + |
| +/** |
| + * Scanner that creates tokens for a part of a larger [String], where the part |
| + * starts at the [baseOffset]. |
| + */ |
| +class SubStringScanner extends StringScanner { |
| + final int baseOffset; |
| + |
| + SubStringScanner(this.baseOffset, String string, |
| + {bool includeComments: false}) |
| + : super(string, includeComments: includeComments); |
| + |
| + @override |
| + void beginToken() { |
| + tokenStart = baseOffset + stringOffset; |
| + } |
| } |