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