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

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

Issue 1151163004: Implementation of null-aware operators. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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 part of scanner; 5 part of scanner;
6 6
7 const int EOF_TOKEN = 0; 7 const int EOF_TOKEN = 0;
8 8
9 const int KEYWORD_TOKEN = $k; 9 const int KEYWORD_TOKEN = $k;
10 const int IDENTIFIER_TOKEN = $a; 10 const int IDENTIFIER_TOKEN = $a;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 const int PLUS_EQ_TOKEN = PLUS_PLUS_TOKEN + 1; 68 const int PLUS_EQ_TOKEN = PLUS_PLUS_TOKEN + 1;
69 const int MINUS_MINUS_TOKEN = PLUS_EQ_TOKEN + 1; 69 const int MINUS_MINUS_TOKEN = PLUS_EQ_TOKEN + 1;
70 const int MINUS_EQ_TOKEN = MINUS_MINUS_TOKEN + 1; 70 const int MINUS_EQ_TOKEN = MINUS_MINUS_TOKEN + 1;
71 const int TILDE_SLASH_EQ_TOKEN = MINUS_EQ_TOKEN + 1; 71 const int TILDE_SLASH_EQ_TOKEN = MINUS_EQ_TOKEN + 1;
72 const int TILDE_SLASH_TOKEN = TILDE_SLASH_EQ_TOKEN + 1; 72 const int TILDE_SLASH_TOKEN = TILDE_SLASH_EQ_TOKEN + 1;
73 const int PERCENT_EQ_TOKEN = TILDE_SLASH_TOKEN + 1; 73 const int PERCENT_EQ_TOKEN = TILDE_SLASH_TOKEN + 1;
74 const int GT_GT_TOKEN = PERCENT_EQ_TOKEN + 1; 74 const int GT_GT_TOKEN = PERCENT_EQ_TOKEN + 1;
75 const int CARET_EQ_TOKEN = GT_GT_TOKEN + 1; 75 const int CARET_EQ_TOKEN = GT_GT_TOKEN + 1;
76 const int COMMENT_TOKEN = CARET_EQ_TOKEN + 1; 76 const int COMMENT_TOKEN = CARET_EQ_TOKEN + 1;
77 const int STRING_INTERPOLATION_IDENTIFIER_TOKEN = COMMENT_TOKEN + 1; 77 const int STRING_INTERPOLATION_IDENTIFIER_TOKEN = COMMENT_TOKEN + 1;
78 const int QUESTION_PERIOD_TOKEN = STRING_INTERPOLATION_IDENTIFIER_TOKEN + 1;
79 const int QUESTION_QUESTION_TOKEN = QUESTION_PERIOD_TOKEN + 1;
80 const int QUESTION_QUESTION_EQ_TOKEN = QUESTION_QUESTION_TOKEN + 1;
78 81
79 /** 82 /**
80 * A token that doubles as a linked list. 83 * A token that doubles as a linked list.
81 */ 84 */
82 abstract class Token implements Spannable { 85 abstract class Token implements Spannable {
83 /** 86 /**
84 * The character offset of the start of this token within the source text. 87 * The character offset of the start of this token within the source text.
85 */ 88 */
86 final int charOffset; 89 final int charOffset;
87 90
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 BadInputToken(this.character, int charOffset) 255 BadInputToken(this.character, int charOffset)
253 : super(charOffset); 256 : super(charOffset);
254 257
255 String toString() => "BadInputToken($character)"; 258 String toString() => "BadInputToken($character)";
256 259
257 String get assertionMessage { 260 String get assertionMessage {
258 return 'Character U+${character.toRadixString(16)} not allowed here.'; 261 return 'Character U+${character.toRadixString(16)} not allowed here.';
259 } 262 }
260 } 263 }
261 264
265 // TODO(sigmund): delete once we enable null-aware-operators by default.
266 class UnsupportedNullAwareToken extends ErrorToken {
267 final String operator;
268
269 UnsupportedNullAwareToken(this.operator, int charOffset)
270 : super(charOffset);
271
272 String toString() => "UnsupportedNullAwareToken($operator)";
273
274 int get charCount => operator.length;
275 }
276
262 class UnterminatedToken extends ErrorToken { 277 class UnterminatedToken extends ErrorToken {
263 final String start; 278 final String start;
264 final int endOffset; 279 final int endOffset;
265 280
266 UnterminatedToken(this.start, int charOffset, this.endOffset) 281 UnterminatedToken(this.start, int charOffset, this.endOffset)
267 : super(charOffset); 282 : super(charOffset);
268 283
269 String toString() => "UnterminatedToken($start)"; 284 String toString() => "UnterminatedToken($start)";
270 285
271 String get assertionMessage => "'$start' isn't terminated."; 286 String get assertionMessage => "'$start' isn't terminated.";
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN); 597 ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN);
583 const PrecedenceInfo SLASH_EQ_INFO = 598 const PrecedenceInfo SLASH_EQ_INFO =
584 const PrecedenceInfo('/=', 599 const PrecedenceInfo('/=',
585 ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN); 600 ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN);
586 const PrecedenceInfo STAR_EQ_INFO = 601 const PrecedenceInfo STAR_EQ_INFO =
587 const PrecedenceInfo('*=', 602 const PrecedenceInfo('*=',
588 ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN); 603 ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN);
589 const PrecedenceInfo TILDE_SLASH_EQ_INFO = 604 const PrecedenceInfo TILDE_SLASH_EQ_INFO =
590 const PrecedenceInfo('~/=', 605 const PrecedenceInfo('~/=',
591 ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN); 606 ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN);
607 const PrecedenceInfo QUESTION_QUESTION_EQ_INFO =
608 const PrecedenceInfo('??=',
609 ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN);
592 610
593 const PrecedenceInfo QUESTION_INFO = 611 const PrecedenceInfo QUESTION_INFO =
594 const PrecedenceInfo('?', 3, QUESTION_TOKEN); 612 const PrecedenceInfo('?', 3, QUESTION_TOKEN);
595 613
614 const PrecedenceInfo QUESTION_QUESTION_INFO =
615 const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN);
616
596 const PrecedenceInfo BAR_BAR_INFO = 617 const PrecedenceInfo BAR_BAR_INFO =
597 const PrecedenceInfo('||', 4, BAR_BAR_TOKEN); 618 const PrecedenceInfo('||', 5, BAR_BAR_TOKEN);
598 619
599 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = 620 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO =
600 const PrecedenceInfo('&&', 5, AMPERSAND_AMPERSAND_TOKEN); 621 const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN);
601 622
602 const PrecedenceInfo BAR_INFO = 623 const PrecedenceInfo BAR_INFO =
603 const PrecedenceInfo('|', 8, BAR_TOKEN); 624 const PrecedenceInfo('|', 9, BAR_TOKEN);
604 625
605 const PrecedenceInfo CARET_INFO = 626 const PrecedenceInfo CARET_INFO =
606 const PrecedenceInfo('^', 9, CARET_TOKEN); 627 const PrecedenceInfo('^', 10, CARET_TOKEN);
607 628
608 const PrecedenceInfo AMPERSAND_INFO = 629 const PrecedenceInfo AMPERSAND_INFO =
609 const PrecedenceInfo('&', 10, AMPERSAND_TOKEN); 630 const PrecedenceInfo('&', 11, AMPERSAND_TOKEN);
610 631
611 // Equality operators. 632 // Equality operators.
612 const int EQUALITY_PRECEDENCE = 6; 633 const int EQUALITY_PRECEDENCE = 7;
613 const PrecedenceInfo BANG_EQ_EQ_INFO = 634 const PrecedenceInfo BANG_EQ_EQ_INFO =
614 const PrecedenceInfo('!==', 635 const PrecedenceInfo('!==',
615 EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); 636 EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
616 const PrecedenceInfo BANG_EQ_INFO = 637 const PrecedenceInfo BANG_EQ_INFO =
617 const PrecedenceInfo('!=', 638 const PrecedenceInfo('!=',
618 EQUALITY_PRECEDENCE, BANG_EQ_TOKEN); 639 EQUALITY_PRECEDENCE, BANG_EQ_TOKEN);
619 const PrecedenceInfo EQ_EQ_EQ_INFO = 640 const PrecedenceInfo EQ_EQ_EQ_INFO =
620 const PrecedenceInfo('===', 641 const PrecedenceInfo('===',
621 EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); 642 EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
622 const PrecedenceInfo EQ_EQ_INFO = 643 const PrecedenceInfo EQ_EQ_INFO =
623 const PrecedenceInfo('==', 644 const PrecedenceInfo('==',
624 EQUALITY_PRECEDENCE, EQ_EQ_TOKEN); 645 EQUALITY_PRECEDENCE, EQ_EQ_TOKEN);
625 646
626 // Relational operators. 647 // Relational operators.
627 const int RELATIONAL_PRECEDENCE = 7; 648 const int RELATIONAL_PRECEDENCE = 8;
628 const PrecedenceInfo GT_EQ_INFO = 649 const PrecedenceInfo GT_EQ_INFO =
629 const PrecedenceInfo('>=', 650 const PrecedenceInfo('>=',
630 RELATIONAL_PRECEDENCE, GT_EQ_TOKEN); 651 RELATIONAL_PRECEDENCE, GT_EQ_TOKEN);
631 const PrecedenceInfo GT_INFO = 652 const PrecedenceInfo GT_INFO =
632 const PrecedenceInfo('>', 653 const PrecedenceInfo('>',
633 RELATIONAL_PRECEDENCE, GT_TOKEN); 654 RELATIONAL_PRECEDENCE, GT_TOKEN);
634 const PrecedenceInfo IS_INFO = 655 const PrecedenceInfo IS_INFO =
635 const PrecedenceInfo('is', 656 const PrecedenceInfo('is',
636 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 657 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
637 const PrecedenceInfo AS_INFO = 658 const PrecedenceInfo AS_INFO =
638 const PrecedenceInfo('as', 659 const PrecedenceInfo('as',
639 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 660 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
640 const PrecedenceInfo LT_EQ_INFO = 661 const PrecedenceInfo LT_EQ_INFO =
641 const PrecedenceInfo('<=', 662 const PrecedenceInfo('<=',
642 RELATIONAL_PRECEDENCE, LT_EQ_TOKEN); 663 RELATIONAL_PRECEDENCE, LT_EQ_TOKEN);
643 const PrecedenceInfo LT_INFO = 664 const PrecedenceInfo LT_INFO =
644 const PrecedenceInfo('<', 665 const PrecedenceInfo('<',
645 RELATIONAL_PRECEDENCE, LT_TOKEN); 666 RELATIONAL_PRECEDENCE, LT_TOKEN);
646 667
647 // Shift operators. 668 // Shift operators.
648 const PrecedenceInfo GT_GT_INFO = 669 const PrecedenceInfo GT_GT_INFO =
649 const PrecedenceInfo('>>', 11, GT_GT_TOKEN); 670 const PrecedenceInfo('>>', 12, GT_GT_TOKEN);
650 const PrecedenceInfo LT_LT_INFO = 671 const PrecedenceInfo LT_LT_INFO =
651 const PrecedenceInfo('<<', 11, LT_LT_TOKEN); 672 const PrecedenceInfo('<<', 12, LT_LT_TOKEN);
652 673
653 // Additive operators. 674 // Additive operators.
654 const PrecedenceInfo MINUS_INFO = 675 const PrecedenceInfo MINUS_INFO =
655 const PrecedenceInfo('-', 12, MINUS_TOKEN); 676 const PrecedenceInfo('-', 13, MINUS_TOKEN);
656 const PrecedenceInfo PLUS_INFO = 677 const PrecedenceInfo PLUS_INFO =
657 const PrecedenceInfo('+', 12, PLUS_TOKEN); 678 const PrecedenceInfo('+', 13, PLUS_TOKEN);
658 679
659 // Multiplicative operators. 680 // Multiplicative operators.
660 const PrecedenceInfo PERCENT_INFO = 681 const PrecedenceInfo PERCENT_INFO =
661 const PrecedenceInfo('%', 13, PERCENT_TOKEN); 682 const PrecedenceInfo('%', 14, PERCENT_TOKEN);
662 const PrecedenceInfo SLASH_INFO = 683 const PrecedenceInfo SLASH_INFO =
663 const PrecedenceInfo('/', 13, SLASH_TOKEN); 684 const PrecedenceInfo('/', 14, SLASH_TOKEN);
664 const PrecedenceInfo STAR_INFO = 685 const PrecedenceInfo STAR_INFO =
665 const PrecedenceInfo('*', 13, STAR_TOKEN); 686 const PrecedenceInfo('*', 14, STAR_TOKEN);
666 const PrecedenceInfo TILDE_SLASH_INFO = 687 const PrecedenceInfo TILDE_SLASH_INFO =
667 const PrecedenceInfo('~/', 13, TILDE_SLASH_TOKEN); 688 const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN);
668 689
669 const int POSTFIX_PRECEDENCE = 14; 690 const int POSTFIX_PRECEDENCE = 15;
670 const PrecedenceInfo PERIOD_INFO = 691 const PrecedenceInfo PERIOD_INFO =
671 const PrecedenceInfo('.', POSTFIX_PRECEDENCE, 692 const PrecedenceInfo('.', POSTFIX_PRECEDENCE,
672 PERIOD_TOKEN); 693 PERIOD_TOKEN);
694 const PrecedenceInfo QUESTION_PERIOD_INFO =
695 const PrecedenceInfo('?.', POSTFIX_PRECEDENCE,
696 QUESTION_PERIOD_TOKEN);
673 697
674 const PrecedenceInfo KEYWORD_INFO = 698 const PrecedenceInfo KEYWORD_INFO =
675 const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN); 699 const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN);
676 700
677 const PrecedenceInfo EOF_INFO = 701 const PrecedenceInfo EOF_INFO =
678 const PrecedenceInfo('EOF', 0, EOF_TOKEN); 702 const PrecedenceInfo('EOF', 0, EOF_TOKEN);
679 703
680 const PrecedenceInfo IDENTIFIER_INFO = 704 const PrecedenceInfo IDENTIFIER_INFO =
681 const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN); 705 const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN);
682 706
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 743
720 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO = 744 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO =
721 const PrecedenceInfo('\$', 0, 745 const PrecedenceInfo('\$', 0,
722 STRING_INTERPOLATION_IDENTIFIER_TOKEN); 746 STRING_INTERPOLATION_IDENTIFIER_TOKEN);
723 747
724 const PrecedenceInfo HEXADECIMAL_INFO = 748 const PrecedenceInfo HEXADECIMAL_INFO =
725 const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN); 749 const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN);
726 750
727 const PrecedenceInfo COMMENT_INFO = 751 const PrecedenceInfo COMMENT_INFO =
728 const PrecedenceInfo('comment', 0, COMMENT_TOKEN); 752 const PrecedenceInfo('comment', 0, COMMENT_TOKEN);
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/scanner/string_scanner.dart ('k') | pkg/compiler/lib/src/scanner/utf8_bytes_scanner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698