Chromium Code Reviews| Index: pkg/analyzer/lib/src/dart/scanner/scanner.dart |
| diff --git a/pkg/analyzer/lib/src/dart/scanner/scanner.dart b/pkg/analyzer/lib/src/dart/scanner/scanner.dart |
| index 821768723e95b5591c59c404527129a734404a7f..0e92e3086bff85627886b8a921170adaa865428b 100644 |
| --- a/pkg/analyzer/lib/src/dart/scanner/scanner.dart |
| +++ b/pkg/analyzer/lib/src/dart/scanner/scanner.dart |
| @@ -10,6 +10,8 @@ import 'package:analyzer/src/dart/error/syntactic_errors.dart'; |
| import 'package:analyzer/src/dart/scanner/reader.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| import 'package:front_end/src/fasta/scanner.dart' as fasta; |
| +import 'package:front_end/src/fasta/scanner/abstract_scanner.dart' |
| + show fastaSupportsGenericMethodComments; |
| import 'package:front_end/src/fasta/scanner/precedence.dart' as fasta; |
| import 'package:front_end/src/scanner/errors.dart' show translateErrorToken; |
| import 'package:front_end/src/scanner/scanner.dart' as fe; |
| @@ -41,12 +43,6 @@ class Scanner extends fe.Scanner { |
| final AnalysisErrorListener _errorListener; |
| /** |
| - * A flag indicating whether the [Scanner] factory method |
| - * will return a fasta based scanner or an analyzer based scanner. |
| - */ |
| - static bool useFasta = false; |
| - |
| - /** |
| * Initialize a newly created scanner to scan characters from the given |
| * [source]. The given character [reader] will be used to read the characters |
| * in the source. The given [_errorListener] will be informed of any errors |
| @@ -54,7 +50,7 @@ class Scanner extends fe.Scanner { |
| */ |
| factory Scanner(Source source, CharacterReader reader, |
| AnalysisErrorListener errorListener) => |
| - useFasta |
| + fe.Scanner.useFasta |
| ? new _Scanner2(source, reader.getContents(), errorListener) |
| : new Scanner._(source, reader, errorListener); |
| @@ -93,7 +89,7 @@ class _Scanner2 implements Scanner { |
| bool _preserveComments = true; |
| @override |
| - List<int> lineStarts; |
| + final List<int> lineStarts = new List<int>(); |
|
Brian Wilkerson
2017/03/31 20:39:05
nit: "<int>[]" is shorter.
danrubel
2017/04/04 12:45:41
Good idea. Done.
|
| @override |
| Token firstToken; |
| @@ -104,7 +100,9 @@ class _Scanner2 implements Scanner { |
| @override |
| bool scanLazyAssignmentOperators = false; |
| - _Scanner2(this.source, this._contents, this._errorListener); |
| + _Scanner2(this.source, this._contents, this._errorListener) { |
| + lineStarts.add(0); |
| + } |
| @override |
| void appendToken(Token token) { |
| @@ -147,7 +145,7 @@ class _Scanner2 implements Scanner { |
| Token tokenize() { |
| // Note: Fasta always supports lazy assignment operators (`&&=` and `||=`), |
| // so we can ignore the `scanLazyAssignmentOperators` flag. |
| - if (scanGenericMethodComments) { |
| + if (scanGenericMethodComments && !fastaSupportsGenericMethodComments) { |
| // Fasta doesn't support generic method comments. |
| // TODO(danrubel): remove this once fasts support has been added. |
| throw 'No generic method comment support in Fasta'; |
| @@ -155,7 +153,8 @@ class _Scanner2 implements Scanner { |
| fasta.ScannerResult result = |
| fasta.scanString(_contents, includeComments: _preserveComments); |
| // fasta pretends there is an additional line at EOF |
| - lineStarts = result.lineStarts.sublist(0, result.lineStarts.length - 1); |
| + lineStarts |
| + .addAll(result.lineStarts.sublist(1, result.lineStarts.length - 1)); |
| fasta.Token token = result.tokens; |
| // The default recovery strategy used by scanString |
| // places all error tokens at the head of the stream. |