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

Side by Side Diff: dart/lib/compiler/implementation/scanner/parser.dart

Issue 11227007: Unify parsing of constructor references. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 (aka a token stream). 7 * all tokens in a linked list (aka a token stream).
8 * 8 *
9 * The class [Scanner] is used to generate a token stream. See the 9 * The class [Scanner] is used to generate a token stream. See the
10 * file scanner.dart. 10 * file scanner.dart.
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 Token start = token; 968 Token start = token;
969 if (identical(token.stringValue, 'external')) token = token.next; 969 if (identical(token.stringValue, 'external')) token = token.next;
970 Token constKeyword = null; 970 Token constKeyword = null;
971 if (optional('const', token)) { 971 if (optional('const', token)) {
972 constKeyword = token; 972 constKeyword = token;
973 token = token.next; 973 token = token.next;
974 } 974 }
975 Token factoryKeyword = token; 975 Token factoryKeyword = token;
976 listener.beginFactoryMethod(factoryKeyword); 976 listener.beginFactoryMethod(factoryKeyword);
977 token = token.next; // Skip 'factory'. 977 token = token.next; // Skip 'factory'.
978 token = parseIdentifier(token); 978 token = parseConstructorReference(token);
979 token = parseQualifiedRestOpt(token);
980 token = parseTypeVariablesOpt(token);
981 Token period = null;
982 if (optional('.', token)) {
983 period = token;
984 token = parseIdentifier(token.next);
985 }
986 token = parseFormalParameters(token); 979 token = parseFormalParameters(token);
987 if (optional('=', token)) { 980 if (optional('=', token)) {
988 token = parseRedirectingFactoryBody(token); 981 token = parseRedirectingFactoryBody(token);
989 } else { 982 } else {
990 token = parseFunctionBody(token, false); 983 token = parseFunctionBody(token, false);
991 } 984 }
992 listener.endFactoryMethod(start, period, token); 985 listener.endFactoryMethod(start, token);
993 return token.next; 986 return token.next;
994 } 987 }
995 988
996 Token parseOperatorName(Token token) { 989 Token parseOperatorName(Token token) {
997 assert(optional('operator', token)); 990 assert(optional('operator', token));
998 if (isUserDefinableOperator(token.next.stringValue)) { 991 if (isUserDefinableOperator(token.next.stringValue)) {
999 Token operator = token; 992 Token operator = token;
1000 token = token.next; 993 token = token.next;
1001 listener.handleOperatorName(operator, token); 994 listener.handleOperatorName(operator, token);
1002 return token.next; 995 return token.next;
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 if (optional('(', token)) { 1636 if (optional('(', token)) {
1644 BeginGroupToken begin = token; 1637 BeginGroupToken begin = token;
1645 String afterParens = begin.endGroup.next.stringValue; 1638 String afterParens = begin.endGroup.next.stringValue;
1646 if (identical(afterParens, '{') || identical(afterParens, '=>')) { 1639 if (identical(afterParens, '{') || identical(afterParens, '=>')) {
1647 return true; 1640 return true;
1648 } 1641 }
1649 } 1642 }
1650 return false; 1643 return false;
1651 } 1644 }
1652 1645
1653 Token parseNewExpression(Token token) { 1646 Token parseRequiredArguments(Token token) {
1654 Token newKeyword = token;
1655 token = expect('new', token);
1656 token = parseType(token);
1657 bool named = false;
1658 if (optional('.', token)) {
1659 named = true;
1660 token = parseIdentifier(token.next);
1661 }
1662 if (optional('(', token)) { 1647 if (optional('(', token)) {
1663 token = parseArguments(token); 1648 token = parseArguments(token);
1664 } else { 1649 } else {
1665 listener.handleNoArguments(token); 1650 listener.handleNoArguments(token);
1666 token = listener.unexpected(token); 1651 token = listener.unexpected(token);
1667 } 1652 }
1668 listener.handleNewExpression(newKeyword, named);
1669 return token; 1653 return token;
1670 } 1654 }
1671 1655
1656 Token parseNewExpression(Token token) {
1657 Token newKeyword = token;
1658 token = expect('new', token);
1659 token = parseConstructorReference(token);
1660 token = parseRequiredArguments(token);
1661 listener.handleNewExpression(newKeyword);
1662 return token;
1663 }
1664
1672 Token parseConstExpression(Token token) { 1665 Token parseConstExpression(Token token) {
1673 Token constKeyword = token; 1666 Token constKeyword = token;
1674 token = expect('const', token); 1667 token = expect('const', token);
1675 final String value = token.stringValue; 1668 final String value = token.stringValue;
1676 if ((identical(value, '<')) || 1669 if ((identical(value, '<')) ||
1677 (identical(value, '[')) || 1670 (identical(value, '[')) ||
1678 (identical(value, '[]')) || 1671 (identical(value, '[]')) ||
1679 (identical(value, '{'))) { 1672 (identical(value, '{'))) {
1680 return parseLiteralListOrMap(constKeyword); 1673 return parseLiteralListOrMap(constKeyword);
1681 } 1674 }
1682 token = parseType(token); 1675 token = parseConstructorReference(token);
1683 bool named = false; 1676 token = parseRequiredArguments(token);
1684 if (optional('.', token)) { 1677 listener.handleConstExpression(constKeyword);
1685 named = true;
1686 token = parseIdentifier(token.next);
1687 }
1688 expect('(', token);
1689 token = parseArguments(token);
1690 listener.handleConstExpression(constKeyword, named);
1691 return token; 1678 return token;
1692 } 1679 }
1693 1680
1694 Token parseLiteralInt(Token token) { 1681 Token parseLiteralInt(Token token) {
1695 listener.handleLiteralInt(token); 1682 listener.handleLiteralInt(token);
1696 return token.next; 1683 return token.next;
1697 } 1684 }
1698 1685
1699 Token parseLiteralDouble(Token token) { 1686 Token parseLiteralDouble(Token token) {
1700 listener.handleLiteralDouble(token); 1687 listener.handleLiteralDouble(token);
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 } 2147 }
2161 listener.handleContinueStatement(hasTarget, continueKeyword, token); 2148 listener.handleContinueStatement(hasTarget, continueKeyword, token);
2162 return expectSemicolon(token); 2149 return expectSemicolon(token);
2163 } 2150 }
2164 2151
2165 Token parseEmptyStatement(Token token) { 2152 Token parseEmptyStatement(Token token) {
2166 listener.handleEmptyStatement(token); 2153 listener.handleEmptyStatement(token);
2167 return expectSemicolon(token); 2154 return expectSemicolon(token);
2168 } 2155 }
2169 } 2156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698