Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.scanner.string_scanner; | 5 library dart2js.scanner.string_scanner; |
| 6 | 6 |
| 7 import 'array_based_scanner.dart' show ArrayBasedScanner; | 7 import 'array_based_scanner.dart' show ArrayBasedScanner; |
| 8 | |
| 9 import 'precedence.dart' show PrecedenceInfo; | 8 import 'precedence.dart' show PrecedenceInfo; |
| 10 | |
| 11 import 'token.dart' show CommentToken, DartDocToken, StringToken; | 9 import 'token.dart' show CommentToken, DartDocToken, StringToken; |
| 12 | 10 |
| 13 /** | 11 /** |
| 14 * Scanner that reads from a String and creates tokens that points to | 12 * Scanner that reads from a String and creates tokens that points to |
| 15 * substrings. | 13 * substrings. |
| 16 */ | 14 */ |
| 17 class StringScanner extends ArrayBasedScanner { | 15 class StringScanner extends ArrayBasedScanner { |
| 18 /** The file content. */ | 16 /** The file content. */ |
| 19 String string; | 17 String string; |
| 20 | 18 |
| 21 /** The current offset in [string]. */ | 19 /** The current offset in [string]. */ |
| 20 @override | |
| 22 int scanOffset = -1; | 21 int scanOffset = -1; |
| 23 | 22 |
| 24 StringScanner(String string, {bool includeComments: false}) | 23 StringScanner(String string, {bool includeComments: false}) |
| 25 : string = ensureZeroTermination(string), | 24 : string = ensureZeroTermination(string), |
| 26 super(includeComments); | 25 super(includeComments); |
| 27 | 26 |
| 28 static String ensureZeroTermination(String string) { | 27 @override |
|
ahe
2017/04/04 08:17:00
Please revert unrelated formatting changes.
| |
| 29 return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) | |
| 30 // TODO(lry): abort instead of copying the array, or warn? | |
| 31 ? string + '\x00' | |
| 32 : string; | |
| 33 } | |
| 34 | |
| 35 int advance() => string.codeUnitAt(++scanOffset); | |
| 36 int peek() => string.codeUnitAt(scanOffset + 1); | |
| 37 | |
| 38 int get stringOffset => scanOffset; | 28 int get stringOffset => scanOffset; |
| 39 | 29 |
| 40 int currentAsUnicode(int next) => next; | 30 @override |
| 41 | 31 int advance() => string.codeUnitAt(++scanOffset); |
| 42 void handleUnicode(int startScanOffset) {} | |
| 43 | 32 |
| 44 @override | 33 @override |
| 45 StringToken createSubstringToken( | 34 bool atEndOfFile() => scanOffset >= string.length - 1; |
| 46 PrecedenceInfo info, int start, bool asciiOnly, | |
| 47 [int extraOffset = 0]) { | |
| 48 return new StringToken.fromSubstring( | |
| 49 info, string, start, scanOffset + extraOffset, tokenStart, | |
| 50 canonicalize: true); | |
| 51 } | |
| 52 | 35 |
| 53 @override | 36 @override |
| 54 CommentToken createCommentToken( | 37 CommentToken createCommentToken( |
| 55 PrecedenceInfo info, int start, bool asciiOnly, | 38 PrecedenceInfo info, int start, bool asciiOnly, |
| 56 [int extraOffset = 0]) { | 39 [int extraOffset = 0]) { |
| 57 return new CommentToken.fromSubstring( | 40 return new CommentToken.fromSubstring( |
| 58 info, string, start, scanOffset + extraOffset, tokenStart, | 41 info, string, start, scanOffset + extraOffset, tokenStart, |
| 59 canonicalize: true); | 42 canonicalize: true); |
| 60 } | 43 } |
| 61 | 44 |
| 62 @override | 45 @override |
| 63 DartDocToken createDartDocToken( | 46 DartDocToken createDartDocToken( |
| 64 PrecedenceInfo info, int start, bool asciiOnly, | 47 PrecedenceInfo info, int start, bool asciiOnly, |
| 65 [int extraOffset = 0]) { | 48 [int extraOffset = 0]) { |
| 66 return new DartDocToken.fromSubstring( | 49 return new DartDocToken.fromSubstring( |
| 67 info, string, start, scanOffset + extraOffset, tokenStart, | 50 info, string, start, scanOffset + extraOffset, tokenStart, |
| 68 canonicalize: true); | 51 canonicalize: true); |
| 69 } | 52 } |
| 70 | 53 |
| 71 bool atEndOfFile() => scanOffset >= string.length - 1; | 54 @override |
| 55 StringToken createSubstringToken( | |
| 56 PrecedenceInfo info, int start, bool asciiOnly, | |
| 57 [int extraOffset = 0]) { | |
| 58 return new StringToken.fromSubstring( | |
| 59 info, string, start, scanOffset + extraOffset, tokenStart, | |
| 60 canonicalize: true); | |
| 61 } | |
| 62 | |
| 63 @override | |
| 64 int currentAsUnicode(int next) => next; | |
| 65 | |
| 66 @override | |
| 67 void handleUnicode(int startScanOffset) {} | |
| 68 | |
| 69 @override | |
| 70 int peek() => string.codeUnitAt(scanOffset + 1); | |
| 71 | |
| 72 static String ensureZeroTermination(String string) { | |
| 73 return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) | |
| 74 // TODO(lry): abort instead of copying the array, or warn? | |
| 75 ? string + '\x00' | |
| 76 : string; | |
| 77 } | |
| 72 } | 78 } |
| 79 | |
| 80 /** | |
| 81 * Scanner that creates tokens for a part of a larger [String], where the part | |
| 82 * starts at the [baseOffset]. | |
| 83 */ | |
| 84 class SubStringScanner extends StringScanner { | |
| 85 final int baseOffset; | |
| 86 | |
| 87 SubStringScanner(this.baseOffset, String string, | |
| 88 {bool includeComments: false}) | |
| 89 : super(string, includeComments: includeComments); | |
| 90 | |
| 91 @override | |
| 92 void beginToken() { | |
| 93 tokenStart = baseOffset + stringOffset; | |
| 94 } | |
| 95 } | |
| OLD | NEW |