Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: pkg/front_end/lib/src/fasta/scanner/string_scanner.dart

Issue 2794833003: Use SubStringScanner to scan generic comments. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/front_end/lib/src/fasta/parser/parser.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/parser/parser.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698