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