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 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 } else { | 1199 } else { |
1200 return listener.expectedExpression(token); | 1200 return listener.expectedExpression(token); |
1201 } | 1201 } |
1202 } else if (kind === OPEN_PAREN_TOKEN) { | 1202 } else if (kind === OPEN_PAREN_TOKEN) { |
1203 return parseParenthesizedExpressionOrFunctionLiteral(token); | 1203 return parseParenthesizedExpressionOrFunctionLiteral(token); |
1204 } else if ((kind === LT_TOKEN) || | 1204 } else if ((kind === LT_TOKEN) || |
1205 (kind === OPEN_SQUARE_BRACKET_TOKEN) || | 1205 (kind === OPEN_SQUARE_BRACKET_TOKEN) || |
1206 (kind === OPEN_CURLY_BRACKET_TOKEN) || | 1206 (kind === OPEN_CURLY_BRACKET_TOKEN) || |
1207 token.stringValue === '[]') { | 1207 token.stringValue === '[]') { |
1208 return parseLiteralListOrMap(token); | 1208 return parseLiteralListOrMap(token); |
| 1209 } else if (kind === QUESTION_TOKEN) { |
| 1210 return parseArgumentDefinitionTest(token); |
1209 } else { | 1211 } else { |
1210 return listener.expectedExpression(token); | 1212 return listener.expectedExpression(token); |
1211 } | 1213 } |
1212 } | 1214 } |
1213 | 1215 |
| 1216 Token parseArgumentDefinitionTest(Token token) { |
| 1217 Token questionToken = token; |
| 1218 listener.beginArgumentDefinitionTest(questionToken); |
| 1219 assert(optional('?', token)); |
| 1220 token = parseIdentifier(token.next); |
| 1221 listener.endArgumentDefinitionTest(questionToken, token); |
| 1222 return token; |
| 1223 } |
| 1224 |
1214 Token parseParenthesizedExpressionOrFunctionLiteral(Token token) { | 1225 Token parseParenthesizedExpressionOrFunctionLiteral(Token token) { |
1215 BeginGroupToken beginGroup = token; | 1226 BeginGroupToken beginGroup = token; |
1216 int kind = beginGroup.endGroup.next.kind; | 1227 int kind = beginGroup.endGroup.next.kind; |
1217 if (mayParseFunctionExpressions && | 1228 if (mayParseFunctionExpressions && |
1218 (kind === FUNCTION_TOKEN || kind === OPEN_CURLY_BRACKET_TOKEN)) { | 1229 (kind === FUNCTION_TOKEN || kind === OPEN_CURLY_BRACKET_TOKEN)) { |
1219 return parseUnamedFunction(token); | 1230 return parseUnamedFunction(token); |
1220 } else { | 1231 } else { |
1221 bool old = mayParseFunctionExpressions; | 1232 bool old = mayParseFunctionExpressions; |
1222 mayParseFunctionExpressions = true; | 1233 mayParseFunctionExpressions = true; |
1223 token = parseParenthesizedExpression(token); | 1234 token = parseParenthesizedExpression(token); |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 } | 1851 } |
1841 listener.handleContinueStatement(hasTarget, continueKeyword, token); | 1852 listener.handleContinueStatement(hasTarget, continueKeyword, token); |
1842 return expectSemicolon(token); | 1853 return expectSemicolon(token); |
1843 } | 1854 } |
1844 | 1855 |
1845 Token parseEmptyStatement(Token token) { | 1856 Token parseEmptyStatement(Token token) { |
1846 listener.handleEmptyStatement(token); | 1857 listener.handleEmptyStatement(token); |
1847 return expectSemicolon(token); | 1858 return expectSemicolon(token); |
1848 } | 1859 } |
1849 } | 1860 } |
OLD | NEW |