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

Side by Side Diff: dart/frog/leg/scanner/parser.dart

Issue 8660004: Parse parenthesized expressions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: frogsh Created 9 years, 1 month 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
« no previous file with comments | « dart/frog/leg/scanner/listener.dart ('k') | dart/frog/leg/ssa/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 /** 5 /**
6 * An event generating parser of Dart programs. This parser expects 6 * An event generating parser of Dart programs. This parser expects
7 * all tokens in a linked list. 7 * all tokens in a linked list.
8 */ 8 */
9 class PartialParser<L extends Listener> { 9 class PartialParser<L extends Listener> {
10 final L listener; 10 final L listener;
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 final value = token.stringValue; 627 final value = token.stringValue;
628 if ((value === 'true') || (value === 'false')) { 628 if ((value === 'true') || (value === 'false')) {
629 return parseLiteralBool(token); 629 return parseLiteralBool(token);
630 } else if (value === 'null') { 630 } else if (value === 'null') {
631 return parseLiteralNull(token); 631 return parseLiteralNull(token);
632 } else { 632 } else {
633 listener.unexpected(token); 633 listener.unexpected(token);
634 throw 'not yet implemented'; 634 throw 'not yet implemented';
635 } 635 }
636 } 636 }
637 } else if (kind === LPAREN_TOKEN) {
638 return parseParenthesizedExpression(token);
637 } else { 639 } else {
638 listener.unexpected(token); 640 listener.unexpected(token);
639 throw 'not yet implemented'; 641 throw 'not yet implemented';
640 } 642 }
641 } 643 }
642 644
645 Token parseParenthesizedExpression(Token token) {
646 BeginGroupToken begin = token;
647 token = expect('(', token);
648 token = parseExpression(token);
649 assert(begin.endGroup === token);
650 listener.handleParenthesizedExpression(begin);
651 return expect(')', token);
652 }
653
643 Token parseLiteralInt(Token token) { 654 Token parseLiteralInt(Token token) {
644 listener.handleLiteralInt(token); 655 listener.handleLiteralInt(token);
645 return token.next; 656 return token.next;
646 } 657 }
647 658
648 Token parseLiteralDouble(Token token) { 659 Token parseLiteralDouble(Token token) {
649 listener.handleLiteralDouble(token); 660 listener.handleLiteralDouble(token);
650 return token.next; 661 return token.next;
651 } 662 }
652 663
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 return token.next; 742 return token.next;
732 } else { 743 } else {
733 return parseType(token); 744 return parseType(token);
734 } 745 }
735 } 746 }
736 747
737 Token parseIfStatement(Token token) { 748 Token parseIfStatement(Token token) {
738 Token ifToken = token; 749 Token ifToken = token;
739 listener.beginIfStatement(ifToken); 750 listener.beginIfStatement(ifToken);
740 token = expect('if', token); 751 token = expect('if', token);
741 expect('(', token); 752 token = parseParenthesizedExpression(token);
742 token = parseArguments(token);
743 token = parseStatement(token); 753 token = parseStatement(token);
744 Token elseToken = null; 754 Token elseToken = null;
745 if (optional('else', token)) { 755 if (optional('else', token)) {
746 elseToken = token; 756 elseToken = token;
747 token = parseStatement(token.next); 757 token = parseStatement(token.next);
748 } 758 }
749 listener.endIfStatement(ifToken, elseToken); 759 listener.endIfStatement(ifToken, elseToken);
750 return token; 760 return token;
751 } 761 }
752 762
753 Token parseForStatement(Token token) { 763 Token parseForStatement(Token token) {
754 // TODO(ahe): Support for-in. 764 // TODO(ahe): Support for-in.
755 Token forToken = token; 765 Token forToken = token;
756 listener.beginForStatement(forToken); 766 listener.beginForStatement(forToken);
757 token = expect('for', token); 767 token = expect('for', token);
758 token = expect('(', token); 768 token = expect('(', token);
759 token = parseVariablesDeclaration(token); // TODO(ahe): Support other forms. 769 token = parseVariablesDeclaration(token); // TODO(ahe): Support other forms.
760 token = parseExpressionStatement(token); 770 token = parseExpressionStatement(token);
761 token = parseExpression(token); // TODO(ahe): Support expression list here. 771 token = parseExpression(token); // TODO(ahe): Support expression list here.
762 token = expect(')', token); 772 token = expect(')', token);
763 token = parseStatement(token); 773 token = parseStatement(token);
764 listener.endForStatement(forToken, token); 774 listener.endForStatement(forToken, token);
765 return token; 775 return token;
766 } 776 }
767 777
768 Token parseWhileStatement(Token token) { 778 Token parseWhileStatement(Token token) {
769 Token whileToken = token; 779 Token whileToken = token;
770 listener.beginWhileStatement(whileToken); 780 listener.beginWhileStatement(whileToken);
771 token = expect('while', token); 781 token = expect('while', token);
772 token = expect('(', token); 782 token = parseParenthesizedExpression(token);
773 token = parseExpression(token);
774 token = expect(')', token);
775 token = parseStatement(token); 783 token = parseStatement(token);
776 listener.endWhileStatement(whileToken, token); 784 listener.endWhileStatement(whileToken, token);
777 return token; 785 return token;
778 } 786 }
779 787
780 Token parseDoWhileStatement(Token token) { 788 Token parseDoWhileStatement(Token token) {
781 Token doToken = token; 789 Token doToken = token;
782 listener.beginDoWhileStatement(doToken); 790 listener.beginDoWhileStatement(doToken);
783 token = expect('do', token); 791 token = expect('do', token);
784 token = parseStatement(token); 792 token = parseStatement(token);
785 Token whileToken = token; 793 Token whileToken = token;
786 token = expect('while', token); 794 token = expect('while', token);
787 token = expect('(', token); 795 token = parseParenthesizedExpression(token);
788 token = parseExpression(token);
789 token = expect(')', token);
790 listener.endDoWhileStatement(doToken, whileToken, token); 796 listener.endDoWhileStatement(doToken, whileToken, token);
791 return expectSemicolon(token); 797 return expectSemicolon(token);
792 } 798 }
793 799
794 Token parseBlock(Token token) { 800 Token parseBlock(Token token) {
795 Token begin = token; 801 Token begin = token;
796 listener.beginBlock(begin); 802 listener.beginBlock(begin);
797 int statementCount = 0; 803 int statementCount = 0;
798 token = expect('{', token); 804 token = expect('{', token);
799 while (!optional('}', token)) { 805 while (!optional('}', token)) {
(...skipping 11 matching lines...) Expand all
811 if (optional(';', token)) { 817 if (optional(';', token)) {
812 listener.endRethrowStatement(throwToken, token); 818 listener.endRethrowStatement(throwToken, token);
813 return token.next; 819 return token.next;
814 } else { 820 } else {
815 token = parseExpression(token); 821 token = parseExpression(token);
816 listener.endThrowStatement(throwToken, token); 822 listener.endThrowStatement(throwToken, token);
817 return expectSemicolon(token); 823 return expectSemicolon(token);
818 } 824 }
819 } 825 }
820 } 826 }
OLDNEW
« no previous file with comments | « dart/frog/leg/scanner/listener.dart ('k') | dart/frog/leg/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698