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

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: Add asRaw from other CL Created 8 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
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 part of scanner; 5 part of scanner;
6 6
7 /** 7 /**
8 * An event generating parser of Dart programs. This parser expects 8 * An event generating parser of Dart programs. This parser expects
9 * all tokens in a linked list (aka a token stream). 9 * all tokens in a linked list (aka a token stream).
10 * 10 *
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 Token start = token; 970 Token start = token;
971 if (identical(token.stringValue, 'external')) token = token.next; 971 if (identical(token.stringValue, 'external')) token = token.next;
972 Token constKeyword = null; 972 Token constKeyword = null;
973 if (optional('const', token)) { 973 if (optional('const', token)) {
974 constKeyword = token; 974 constKeyword = token;
975 token = token.next; 975 token = token.next;
976 } 976 }
977 Token factoryKeyword = token; 977 Token factoryKeyword = token;
978 listener.beginFactoryMethod(factoryKeyword); 978 listener.beginFactoryMethod(factoryKeyword);
979 token = token.next; // Skip 'factory'. 979 token = token.next; // Skip 'factory'.
980 token = parseIdentifier(token); 980 token = parseConstructorReference(token);
981 token = parseQualifiedRestOpt(token);
982 token = parseTypeVariablesOpt(token);
983 Token period = null;
984 if (optional('.', token)) {
985 period = token;
986 token = parseIdentifier(token.next);
987 }
988 token = parseFormalParameters(token); 981 token = parseFormalParameters(token);
989 if (optional('=', token)) { 982 if (optional('=', token)) {
990 token = parseRedirectingFactoryBody(token); 983 token = parseRedirectingFactoryBody(token);
991 } else { 984 } else {
992 token = parseFunctionBody(token, false); 985 token = parseFunctionBody(token, false);
993 } 986 }
994 listener.endFactoryMethod(start, period, token); 987 listener.endFactoryMethod(start, token);
995 return token.next; 988 return token.next;
996 } 989 }
997 990
998 Token parseOperatorName(Token token) { 991 Token parseOperatorName(Token token) {
999 assert(optional('operator', token)); 992 assert(optional('operator', token));
1000 if (isUserDefinableOperator(token.next.stringValue)) { 993 if (isUserDefinableOperator(token.next.stringValue)) {
1001 Token operator = token; 994 Token operator = token;
1002 token = token.next; 995 token = token.next;
1003 listener.handleOperatorName(operator, token); 996 listener.handleOperatorName(operator, token);
1004 return token.next; 997 return token.next;
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1645 if (optional('(', token)) { 1638 if (optional('(', token)) {
1646 BeginGroupToken begin = token; 1639 BeginGroupToken begin = token;
1647 String afterParens = begin.endGroup.next.stringValue; 1640 String afterParens = begin.endGroup.next.stringValue;
1648 if (identical(afterParens, '{') || identical(afterParens, '=>')) { 1641 if (identical(afterParens, '{') || identical(afterParens, '=>')) {
1649 return true; 1642 return true;
1650 } 1643 }
1651 } 1644 }
1652 return false; 1645 return false;
1653 } 1646 }
1654 1647
1655 Token parseNewExpression(Token token) { 1648 Token parseRequiredArguments(Token token) {
1656 Token newKeyword = token;
1657 token = expect('new', token);
1658 token = parseType(token);
1659 bool named = false;
1660 if (optional('.', token)) {
1661 named = true;
1662 token = parseIdentifier(token.next);
1663 }
1664 if (optional('(', token)) { 1649 if (optional('(', token)) {
1665 token = parseArguments(token); 1650 token = parseArguments(token);
1666 } else { 1651 } else {
1667 listener.handleNoArguments(token); 1652 listener.handleNoArguments(token);
1668 token = listener.unexpected(token); 1653 token = listener.unexpected(token);
1669 } 1654 }
1670 listener.handleNewExpression(newKeyword, named);
1671 return token; 1655 return token;
1672 } 1656 }
1673 1657
1658 Token parseNewExpression(Token token) {
1659 Token newKeyword = token;
1660 token = expect('new', token);
1661 token = parseConstructorReference(token);
1662 token = parseRequiredArguments(token);
1663 listener.handleNewExpression(newKeyword);
1664 return token;
1665 }
1666
1674 Token parseConstExpression(Token token) { 1667 Token parseConstExpression(Token token) {
1675 Token constKeyword = token; 1668 Token constKeyword = token;
1676 token = expect('const', token); 1669 token = expect('const', token);
1677 final String value = token.stringValue; 1670 final String value = token.stringValue;
1678 if ((identical(value, '<')) || 1671 if ((identical(value, '<')) ||
1679 (identical(value, '[')) || 1672 (identical(value, '[')) ||
1680 (identical(value, '[]')) || 1673 (identical(value, '[]')) ||
1681 (identical(value, '{'))) { 1674 (identical(value, '{'))) {
1682 return parseLiteralListOrMap(constKeyword); 1675 return parseLiteralListOrMap(constKeyword);
1683 } 1676 }
1684 token = parseType(token); 1677 token = parseConstructorReference(token);
1685 bool named = false; 1678 token = parseRequiredArguments(token);
1686 if (optional('.', token)) { 1679 listener.handleConstExpression(constKeyword);
1687 named = true;
1688 token = parseIdentifier(token.next);
1689 }
1690 expect('(', token);
1691 token = parseArguments(token);
1692 listener.handleConstExpression(constKeyword, named);
1693 return token; 1680 return token;
1694 } 1681 }
1695 1682
1696 Token parseLiteralInt(Token token) { 1683 Token parseLiteralInt(Token token) {
1697 listener.handleLiteralInt(token); 1684 listener.handleLiteralInt(token);
1698 return token.next; 1685 return token.next;
1699 } 1686 }
1700 1687
1701 Token parseLiteralDouble(Token token) { 1688 Token parseLiteralDouble(Token token) {
1702 listener.handleLiteralDouble(token); 1689 listener.handleLiteralDouble(token);
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
2162 } 2149 }
2163 listener.handleContinueStatement(hasTarget, continueKeyword, token); 2150 listener.handleContinueStatement(hasTarget, continueKeyword, token);
2164 return expectSemicolon(token); 2151 return expectSemicolon(token);
2165 } 2152 }
2166 2153
2167 Token parseEmptyStatement(Token token) { 2154 Token parseEmptyStatement(Token token) {
2168 listener.handleEmptyStatement(token); 2155 listener.handleEmptyStatement(token);
2169 return expectSemicolon(token); 2156 return expectSemicolon(token);
2170 } 2157 }
2171 } 2158 }
OLDNEW
« no previous file with comments | « dart/lib/compiler/implementation/scanner/listener.dart ('k') | dart/lib/compiler/implementation/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698