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

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

Issue 2767083002: fasta scanner recovery and error code translation improvements (Closed)
Patch Set: merge Created 3 years, 9 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
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 fasta.scanner.token; 5 library fasta.scanner.token;
6 6
7 import '../../scanner/token.dart' as analyzer; 7 import '../../scanner/token.dart' as analyzer;
8 8
9 import '../errors.dart' show internalError;
10
9 import 'keyword.dart' show Keyword; 11 import 'keyword.dart' show Keyword;
10 12
11 import 'precedence.dart' 13 import 'precedence.dart'
12 show 14 show
13 AS_INFO, 15 AS_INFO,
14 BAD_INPUT_INFO, 16 BAD_INPUT_INFO,
15 EOF_INFO, 17 EOF_INFO,
16 IDENTIFIER_INFO, 18 IDENTIFIER_INFO,
17 IS_INFO, 19 IS_INFO,
18 KEYWORD_INFO, 20 KEYWORD_INFO,
19 MULTI_LINE_COMMENT_INFO,
20 SINGLE_LINE_COMMENT_INFO,
21 PrecedenceInfo; 21 PrecedenceInfo;
22 22
23 import 'token_constants.dart' show IDENTIFIER_TOKEN; 23 import 'token_constants.dart' show IDENTIFIER_TOKEN;
24 24
25 import 'string_canonicalizer.dart'; 25 import 'string_canonicalizer.dart';
26 26
27 /** 27 /**
28 * A token that doubles as a linked list. 28 * A token that doubles as a linked list.
29 */ 29 */
30 abstract class Token implements analyzer.TokenWithComment { 30 abstract class Token implements analyzer.TokenWithComment {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 251
252 /** 252 /**
253 * A [SymbolToken] represents the symbol in its precedence info. 253 * A [SymbolToken] represents the symbol in its precedence info.
254 * Also used for end of file with EOF_INFO. 254 * Also used for end of file with EOF_INFO.
255 */ 255 */
256 class SymbolToken extends Token { 256 class SymbolToken extends Token {
257 final PrecedenceInfo info; 257 final PrecedenceInfo info;
258 258
259 SymbolToken(this.info, int charOffset) : super(charOffset); 259 SymbolToken(this.info, int charOffset) : super(charOffset);
260 260
261 SymbolToken.eof(int charOffset)
262 : info = EOF_INFO,
263 super(charOffset) {
264 // EOF points to itself so there's always infinite look-ahead.
265 previousToken = this;
266 next = this;
267 }
268
261 String get lexeme => info.value; 269 String get lexeme => info.value;
262 270
263 String get stringValue => info.value; 271 String get stringValue => info.value;
264 272
265 bool isIdentifier() => false; 273 bool isIdentifier() => false;
266 274
267 String toString() => "SymbolToken($lexeme)"; 275 String toString() => "SymbolToken(${info == EOF_INFO ? '-eof-' : lexeme})";
268 276
269 bool get isEof => info == EOF_INFO; 277 bool get isEof => info == EOF_INFO;
270 278
271 @override 279 @override
272 Token copyWithoutComments() => new SymbolToken(info, charOffset); 280 Token copyWithoutComments() => new SymbolToken(info, charOffset);
273 } 281 }
274 282
275 /** 283 /**
276 * A [BeginGroupToken] represents a symbol that may be the beginning of 284 * A [BeginGroupToken] represents a symbol that may be the beginning of
277 * a pair of brackets, i.e., ( { [ < or ${ 285 * a pair of brackets, i.e., ( { [ < or ${
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 analyzer.TokenWithComment get parent { 491 analyzer.TokenWithComment get parent {
484 Token token = next; 492 Token token = next;
485 while (token is CommentToken) { 493 while (token is CommentToken) {
486 token = token.next; 494 token = token.next;
487 } 495 }
488 return token; 496 return token;
489 } 497 }
490 498
491 @override 499 @override
492 void set parent(analyzer.TokenWithComment ignored) { 500 void set parent(analyzer.TokenWithComment ignored) {
493 throw 'unsupported operation'; 501 internalError('Internal error: unsupported operation');
494 } 502 }
495 503
496 @override 504 @override
497 void remove() { 505 void remove() {
498 // TODO: implement remove 506 // TODO(danrubel): implement remove
499 throw 'not implemented yet'; 507 internalError('Internal error: not implemented yet');
500 } 508 }
501 } 509 }
502 510
503 class DartDocToken extends CommentToken 511 class DartDocToken extends CommentToken
504 implements analyzer.DocumentationCommentToken { 512 implements analyzer.DocumentationCommentToken {
505 /** 513 /**
506 * The references embedded within the documentation comment. 514 * The references embedded within the documentation comment.
507 * This list will be empty unless this is a documentation comment that has 515 * This list will be empty unless this is a documentation comment that has
508 * references embedded within it. 516 * references embedded within it.
509 */ 517 */
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 identical(value, "<=") || 636 identical(value, "<=") ||
629 identical(value, "<") || 637 identical(value, "<") ||
630 identical(value, "&") || 638 identical(value, "&") ||
631 identical(value, "^") || 639 identical(value, "^") ||
632 identical(value, "|"); 640 identical(value, "|");
633 } 641 }
634 642
635 bool isTernaryOperator(String value) => identical(value, "[]="); 643 bool isTernaryOperator(String value) => identical(value, "[]=");
636 644
637 bool isMinusOperator(String value) => identical(value, "-"); 645 bool isMinusOperator(String value) => identical(value, "-");
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698