| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |