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

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 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN); 585 ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN);
583 const PrecedenceInfo SLASH_EQ_INFO = 586 const PrecedenceInfo SLASH_EQ_INFO =
584 const PrecedenceInfo('/=', 587 const PrecedenceInfo('/=',
585 ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN); 588 ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN);
586 const PrecedenceInfo STAR_EQ_INFO = 589 const PrecedenceInfo STAR_EQ_INFO =
587 const PrecedenceInfo('*=', 590 const PrecedenceInfo('*=',
588 ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN); 591 ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN);
589 const PrecedenceInfo TILDE_SLASH_EQ_INFO = 592 const PrecedenceInfo TILDE_SLASH_EQ_INFO =
590 const PrecedenceInfo('~/=', 593 const PrecedenceInfo('~/=',
591 ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN); 594 ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN);
595 const PrecedenceInfo QUESTION_QUESTION_EQ_INFO =
596 const PrecedenceInfo('??=',
597 ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN);
592 598
593 const PrecedenceInfo QUESTION_INFO = 599 const PrecedenceInfo QUESTION_INFO =
594 const PrecedenceInfo('?', 3, QUESTION_TOKEN); 600 const PrecedenceInfo('?', 3, QUESTION_TOKEN);
595 601
602 const PrecedenceInfo QUESTION_QUESTION_INFO =
603 const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN);
604
596 const PrecedenceInfo BAR_BAR_INFO = 605 const PrecedenceInfo BAR_BAR_INFO =
597 const PrecedenceInfo('||', 4, BAR_BAR_TOKEN); 606 const PrecedenceInfo('||', 5, BAR_BAR_TOKEN);
598 607
599 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = 608 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO =
600 const PrecedenceInfo('&&', 5, AMPERSAND_AMPERSAND_TOKEN); 609 const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN);
601 610
602 const PrecedenceInfo BAR_INFO = 611 const PrecedenceInfo BAR_INFO =
603 const PrecedenceInfo('|', 8, BAR_TOKEN); 612 const PrecedenceInfo('|', 9, BAR_TOKEN);
604 613
605 const PrecedenceInfo CARET_INFO = 614 const PrecedenceInfo CARET_INFO =
606 const PrecedenceInfo('^', 9, CARET_TOKEN); 615 const PrecedenceInfo('^', 10, CARET_TOKEN);
607 616
608 const PrecedenceInfo AMPERSAND_INFO = 617 const PrecedenceInfo AMPERSAND_INFO =
609 const PrecedenceInfo('&', 10, AMPERSAND_TOKEN); 618 const PrecedenceInfo('&', 11, AMPERSAND_TOKEN);
610 619
611 // Equality operators. 620 // Equality operators.
612 const int EQUALITY_PRECEDENCE = 6; 621 const int EQUALITY_PRECEDENCE = 7;
613 const PrecedenceInfo BANG_EQ_EQ_INFO = 622 const PrecedenceInfo BANG_EQ_EQ_INFO =
614 const PrecedenceInfo('!==', 623 const PrecedenceInfo('!==',
615 EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); 624 EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
616 const PrecedenceInfo BANG_EQ_INFO = 625 const PrecedenceInfo BANG_EQ_INFO =
617 const PrecedenceInfo('!=', 626 const PrecedenceInfo('!=',
618 EQUALITY_PRECEDENCE, BANG_EQ_TOKEN); 627 EQUALITY_PRECEDENCE, BANG_EQ_TOKEN);
619 const PrecedenceInfo EQ_EQ_EQ_INFO = 628 const PrecedenceInfo EQ_EQ_EQ_INFO =
620 const PrecedenceInfo('===', 629 const PrecedenceInfo('===',
621 EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); 630 EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
622 const PrecedenceInfo EQ_EQ_INFO = 631 const PrecedenceInfo EQ_EQ_INFO =
623 const PrecedenceInfo('==', 632 const PrecedenceInfo('==',
624 EQUALITY_PRECEDENCE, EQ_EQ_TOKEN); 633 EQUALITY_PRECEDENCE, EQ_EQ_TOKEN);
625 634
626 // Relational operators. 635 // Relational operators.
627 const int RELATIONAL_PRECEDENCE = 7; 636 const int RELATIONAL_PRECEDENCE = 8;
628 const PrecedenceInfo GT_EQ_INFO = 637 const PrecedenceInfo GT_EQ_INFO =
629 const PrecedenceInfo('>=', 638 const PrecedenceInfo('>=',
630 RELATIONAL_PRECEDENCE, GT_EQ_TOKEN); 639 RELATIONAL_PRECEDENCE, GT_EQ_TOKEN);
631 const PrecedenceInfo GT_INFO = 640 const PrecedenceInfo GT_INFO =
632 const PrecedenceInfo('>', 641 const PrecedenceInfo('>',
633 RELATIONAL_PRECEDENCE, GT_TOKEN); 642 RELATIONAL_PRECEDENCE, GT_TOKEN);
634 const PrecedenceInfo IS_INFO = 643 const PrecedenceInfo IS_INFO =
635 const PrecedenceInfo('is', 644 const PrecedenceInfo('is',
636 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 645 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
637 const PrecedenceInfo AS_INFO = 646 const PrecedenceInfo AS_INFO =
638 const PrecedenceInfo('as', 647 const PrecedenceInfo('as',
639 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 648 RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
640 const PrecedenceInfo LT_EQ_INFO = 649 const PrecedenceInfo LT_EQ_INFO =
641 const PrecedenceInfo('<=', 650 const PrecedenceInfo('<=',
642 RELATIONAL_PRECEDENCE, LT_EQ_TOKEN); 651 RELATIONAL_PRECEDENCE, LT_EQ_TOKEN);
643 const PrecedenceInfo LT_INFO = 652 const PrecedenceInfo LT_INFO =
644 const PrecedenceInfo('<', 653 const PrecedenceInfo('<',
645 RELATIONAL_PRECEDENCE, LT_TOKEN); 654 RELATIONAL_PRECEDENCE, LT_TOKEN);
646 655
647 // Shift operators. 656 // Shift operators.
648 const PrecedenceInfo GT_GT_INFO = 657 const PrecedenceInfo GT_GT_INFO =
649 const PrecedenceInfo('>>', 11, GT_GT_TOKEN); 658 const PrecedenceInfo('>>', 12, GT_GT_TOKEN);
650 const PrecedenceInfo LT_LT_INFO = 659 const PrecedenceInfo LT_LT_INFO =
651 const PrecedenceInfo('<<', 11, LT_LT_TOKEN); 660 const PrecedenceInfo('<<', 12, LT_LT_TOKEN);
652 661
653 // Additive operators. 662 // Additive operators.
654 const PrecedenceInfo MINUS_INFO = 663 const PrecedenceInfo MINUS_INFO =
655 const PrecedenceInfo('-', 12, MINUS_TOKEN); 664 const PrecedenceInfo('-', 13, MINUS_TOKEN);
656 const PrecedenceInfo PLUS_INFO = 665 const PrecedenceInfo PLUS_INFO =
657 const PrecedenceInfo('+', 12, PLUS_TOKEN); 666 const PrecedenceInfo('+', 13, PLUS_TOKEN);
658 667
659 // Multiplicative operators. 668 // Multiplicative operators.
660 const PrecedenceInfo PERCENT_INFO = 669 const PrecedenceInfo PERCENT_INFO =
661 const PrecedenceInfo('%', 13, PERCENT_TOKEN); 670 const PrecedenceInfo('%', 14, PERCENT_TOKEN);
662 const PrecedenceInfo SLASH_INFO = 671 const PrecedenceInfo SLASH_INFO =
663 const PrecedenceInfo('/', 13, SLASH_TOKEN); 672 const PrecedenceInfo('/', 14, SLASH_TOKEN);
664 const PrecedenceInfo STAR_INFO = 673 const PrecedenceInfo STAR_INFO =
665 const PrecedenceInfo('*', 13, STAR_TOKEN); 674 const PrecedenceInfo('*', 14, STAR_TOKEN);
666 const PrecedenceInfo TILDE_SLASH_INFO = 675 const PrecedenceInfo TILDE_SLASH_INFO =
667 const PrecedenceInfo('~/', 13, TILDE_SLASH_TOKEN); 676 const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN);
668 677
669 const int POSTFIX_PRECEDENCE = 14; 678 const int POSTFIX_PRECEDENCE = 15;
670 const PrecedenceInfo PERIOD_INFO = 679 const PrecedenceInfo PERIOD_INFO =
671 const PrecedenceInfo('.', POSTFIX_PRECEDENCE, 680 const PrecedenceInfo('.', POSTFIX_PRECEDENCE,
672 PERIOD_TOKEN); 681 PERIOD_TOKEN);
682 const PrecedenceInfo QUESTION_PERIOD_INFO =
683 const PrecedenceInfo('?.', POSTFIX_PRECEDENCE,
684 QUESTION_PERIOD_TOKEN);
673 685
674 const PrecedenceInfo KEYWORD_INFO = 686 const PrecedenceInfo KEYWORD_INFO =
675 const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN); 687 const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN);
676 688
677 const PrecedenceInfo EOF_INFO = 689 const PrecedenceInfo EOF_INFO =
678 const PrecedenceInfo('EOF', 0, EOF_TOKEN); 690 const PrecedenceInfo('EOF', 0, EOF_TOKEN);
679 691
680 const PrecedenceInfo IDENTIFIER_INFO = 692 const PrecedenceInfo IDENTIFIER_INFO =
681 const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN); 693 const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN);
682 694
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 731
720 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO = 732 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO =
721 const PrecedenceInfo('\$', 0, 733 const PrecedenceInfo('\$', 0,
722 STRING_INTERPOLATION_IDENTIFIER_TOKEN); 734 STRING_INTERPOLATION_IDENTIFIER_TOKEN);
723 735
724 const PrecedenceInfo HEXADECIMAL_INFO = 736 const PrecedenceInfo HEXADECIMAL_INFO =
725 const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN); 737 const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN);
726 738
727 const PrecedenceInfo COMMENT_INFO = 739 const PrecedenceInfo COMMENT_INFO =
728 const PrecedenceInfo('comment', 0, COMMENT_TOKEN); 740 const PrecedenceInfo('comment', 0, COMMENT_TOKEN);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698