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

Side by Side Diff: pkg/analyzer/lib/src/generated/incremental_scanner.dart

Issue 1045553002: Implement the new '??' operator in analyzer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix if_null_precedence_test for unchecked operation. Created 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 engine.incremental_scanner; 5 library engine.incremental_scanner;
6 6
7 import "dart:math" as math; 7 import "dart:math" as math;
8 8
9 import 'package:analyzer/src/generated/engine.dart';
10
9 import 'error.dart'; 11 import 'error.dart';
10 import 'scanner.dart'; 12 import 'scanner.dart';
11 import 'source.dart'; 13 import 'source.dart';
12 import 'utilities_collection.dart' show TokenMap; 14 import 'utilities_collection.dart' show TokenMap;
13 15
14 /** 16 /**
15 * An `IncrementalScanner` is a scanner that scans a subset of a string and 17 * An `IncrementalScanner` is a scanner that scans a subset of a string and
16 * inserts the resulting tokens into the middle of an existing token stream. 18 * inserts the resulting tokens into the middle of an existing token stream.
17 */ 19 */
18 class IncrementalScanner { 20 class IncrementalScanner {
19 /** 21 /**
20 * The source being scanned. 22 * The source being scanned.
21 */ 23 */
22 final Source source; 24 final Source source;
23 25
24 /** 26 /**
25 * The reader used to access the characters in the source. 27 * The reader used to access the characters in the source.
26 */ 28 */
27 final CharacterReader reader; 29 final CharacterReader reader;
28 30
29 /** 31 /**
30 * The error listener that will be informed of any errors that are found 32 * The error listener that will be informed of any errors that are found
31 * during the scan. 33 * during the scan.
32 * 34 *
33 * TODO(brianwilkerson) Replace this with a list of errors so that we can 35 * TODO(brianwilkerson) Replace this with a list of errors so that we can
34 * update the errors. 36 * update the errors.
35 */ 37 */
36 final AnalysisErrorListener errorListener; 38 final AnalysisErrorListener errorListener;
37 39
40 final AnalysisOptions _options;
41
38 /** 42 /**
39 * A map from tokens that were copied to the copies of the tokens. 43 * A map from tokens that were copied to the copies of the tokens.
40 */ 44 */
41 TokenMap _tokenMap = new TokenMap(); 45 TokenMap _tokenMap = new TokenMap();
42 46
43 /** 47 /**
44 * The token immediately to the left of the range of tokens that were 48 * The token immediately to the left of the range of tokens that were
45 * modified. 49 * modified.
46 */ 50 */
47 Token leftToken; 51 Token leftToken;
48 52
49 /** 53 /**
50 * The token immediately to the right of the range of tokens that were 54 * The token immediately to the right of the range of tokens that were
51 * modified. 55 * modified.
52 */ 56 */
53 Token rightToken; 57 Token rightToken;
54 58
55 /** 59 /**
56 * A flag indicating whether there were any non-comment tokens changed (other 60 * A flag indicating whether there were any non-comment tokens changed (other
57 * than having their position updated) as a result of the modification. 61 * than having their position updated) as a result of the modification.
58 */ 62 */
59 bool hasNonWhitespaceChange = false; 63 bool hasNonWhitespaceChange = false;
60 64
61 /** 65 /**
62 * Initialize a newly created scanner to scan characters within the given 66 * Initialize a newly created scanner to scan characters within the given
63 * [source]. The content of the source can be read using the given [reader]. 67 * [source]. The content of the source can be read using the given [reader].
64 * Any errors that are found will be reported to the given [errorListener]. 68 * Any errors that are found will be reported to the given [errorListener].
69 * [_options] will determine how scanning is to be performed.
65 */ 70 */
66 IncrementalScanner(this.source, this.reader, this.errorListener); 71 IncrementalScanner(
72 this.source, this.reader, this.errorListener, this._options);
67 73
68 /** 74 /**
69 * Return a map from tokens that were copied to the copies of the tokens. 75 * Return a map from tokens that were copied to the copies of the tokens.
70 * 76 *
71 * @return a map from tokens that were copied to the copies of the tokens 77 * @return a map from tokens that were copied to the copies of the tokens
72 */ 78 */
73 TokenMap get tokenMap => _tokenMap; 79 TokenMap get tokenMap => _tokenMap;
74 80
75 /** 81 /**
76 * Given the [stream] of tokens scanned from the original source, the modified 82 * Given the [stream] of tokens scanned from the original source, the modified
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 return token; 217 return token;
212 } 218 }
213 219
214 /** 220 /**
215 * Scan the token between the [start] (inclusive) and [end] (exclusive) 221 * Scan the token between the [start] (inclusive) and [end] (exclusive)
216 * offsets. 222 * offsets.
217 */ 223 */
218 Token _scanRange(int start, int end) { 224 Token _scanRange(int start, int end) {
219 Scanner scanner = new Scanner( 225 Scanner scanner = new Scanner(
220 source, new CharacterRangeReader(reader, start, end), errorListener); 226 source, new CharacterRangeReader(reader, start, end), errorListener);
227 scanner.enableNullAwareOperators = _options.enableNullAwareOperators;
221 return scanner.tokenize(); 228 return scanner.tokenize();
222 } 229 }
223 230
224 /** 231 /**
225 * Update the offsets of every token from the given [token] to the end of the 232 * Update the offsets of every token from the given [token] to the end of the
226 * stream by adding the given [delta]. 233 * stream by adding the given [delta].
227 */ 234 */
228 void _updateOffsets(Token token, int delta) { 235 void _updateOffsets(Token token, int delta) {
229 while (token.type != TokenType.EOF) { 236 while (token.type != TokenType.EOF) {
230 _tokenMap.put(token, token); 237 _tokenMap.put(token, token);
231 token.offset += delta; 238 token.offset += delta;
232 Token comment = token.precedingComments; 239 Token comment = token.precedingComments;
233 while (comment != null) { 240 while (comment != null) {
234 comment.offset += delta; 241 comment.offset += delta;
235 comment = comment.next; 242 comment = comment.next;
236 } 243 }
237 token = token.next; 244 token = token.next;
238 } 245 }
239 _tokenMap.put(token, token); 246 _tokenMap.put(token, token);
240 token.offset += delta; 247 token.offset += delta;
241 } 248 }
242 } 249 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/incremental_resolver.dart ('k') | pkg/analyzer/lib/src/generated/static_type_analyzer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698