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; |
+ } |
} |