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 |