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

Side by Side Diff: pkg/analyzer/lib/src/generated/parser.dart

Issue 1309543011: Add support for assert statements with messages to the analyzer. Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library engine.parser; 5 library engine.parser;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import "dart:math" as math; 8 import "dart:math" as math;
9 9
10 import 'ast.dart'; 10 import 'ast.dart';
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 0, (Parser target) => target.parseTypeArgumentList()), 82 0, (Parser target) => target.parseTypeArgumentList()),
83 'parseTypeName_0': 83 'parseTypeName_0':
84 new MethodTrampoline(0, (Parser target) => target.parseTypeName()), 84 new MethodTrampoline(0, (Parser target) => target.parseTypeName()),
85 'parseTypeParameter_0': 85 'parseTypeParameter_0':
86 new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()), 86 new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()),
87 'parseTypeParameterList_0': new MethodTrampoline( 87 'parseTypeParameterList_0': new MethodTrampoline(
88 0, (Parser target) => target.parseTypeParameterList()), 88 0, (Parser target) => target.parseTypeParameterList()),
89 'parseWithClause_0': 89 'parseWithClause_0':
90 new MethodTrampoline(0, (Parser target) => target.parseWithClause()), 90 new MethodTrampoline(0, (Parser target) => target.parseWithClause()),
91 'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()), 91 'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()),
92 'appendScalarValue_5': new MethodTrampoline(5, (Parser target, arg0, arg1, 92 'appendScalarValue_5': new MethodTrampoline(
93 arg2, arg3, 93 5,
94 arg4) => target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)), 94 (Parser target, arg0, arg1, arg2, arg3, arg4) =>
95 'computeStringValue_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 95 target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
96 arg2) => target._computeStringValue(arg0, arg1, arg2)), 96 'computeStringValue_3': new MethodTrampoline(
97 3,
98 (Parser target, arg0, arg1, arg2) =>
99 target._computeStringValue(arg0, arg1, arg2)),
97 'convertToFunctionDeclaration_1': new MethodTrampoline( 100 'convertToFunctionDeclaration_1': new MethodTrampoline(
98 1, (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)), 101 1, (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
99 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline( 102 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(
100 0, (Parser target) => target._couldBeStartOfCompilationUnitMember()), 103 0, (Parser target) => target._couldBeStartOfCompilationUnitMember()),
101 'createSyntheticIdentifier_0': new MethodTrampoline( 104 'createSyntheticIdentifier_0': new MethodTrampoline(
102 0, (Parser target) => target._createSyntheticIdentifier()), 105 0, (Parser target) => target._createSyntheticIdentifier()),
103 'createSyntheticKeyword_1': new MethodTrampoline( 106 'createSyntheticKeyword_1': new MethodTrampoline(
104 1, (Parser target, arg0) => target._createSyntheticKeyword(arg0)), 107 1, (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
105 'createSyntheticStringLiteral_0': new MethodTrampoline( 108 'createSyntheticStringLiteral_0': new MethodTrampoline(
106 0, (Parser target) => target._createSyntheticStringLiteral()), 109 0, (Parser target) => target._createSyntheticStringLiteral()),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 'matchesString_1': new MethodTrampoline( 155 'matchesString_1': new MethodTrampoline(
153 1, (Parser target, arg0) => target._matchesString(arg0)), 156 1, (Parser target, arg0) => target._matchesString(arg0)),
154 'optional_1': 157 'optional_1':
155 new MethodTrampoline(1, (Parser target, arg0) => target._optional(arg0)), 158 new MethodTrampoline(1, (Parser target, arg0) => target._optional(arg0)),
156 'parseAdditiveExpression_0': new MethodTrampoline( 159 'parseAdditiveExpression_0': new MethodTrampoline(
157 0, (Parser target) => target._parseAdditiveExpression()), 160 0, (Parser target) => target._parseAdditiveExpression()),
158 'parseAssertStatement_0': new MethodTrampoline( 161 'parseAssertStatement_0': new MethodTrampoline(
159 0, (Parser target) => target._parseAssertStatement()), 162 0, (Parser target) => target._parseAssertStatement()),
160 'parseAssignableExpression_1': new MethodTrampoline( 163 'parseAssignableExpression_1': new MethodTrampoline(
161 1, (Parser target, arg0) => target._parseAssignableExpression(arg0)), 164 1, (Parser target, arg0) => target._parseAssignableExpression(arg0)),
162 'parseAssignableSelector_2': new MethodTrampoline(2, (Parser target, arg0, 165 'parseAssignableSelector_2': new MethodTrampoline(
163 arg1) => target._parseAssignableSelector(arg0, arg1)), 166 2,
167 (Parser target, arg0, arg1) =>
168 target._parseAssignableSelector(arg0, arg1)),
164 'parseAwaitExpression_0': new MethodTrampoline( 169 'parseAwaitExpression_0': new MethodTrampoline(
165 0, (Parser target) => target._parseAwaitExpression()), 170 0, (Parser target) => target._parseAwaitExpression()),
166 'parseBitwiseAndExpression_0': new MethodTrampoline( 171 'parseBitwiseAndExpression_0': new MethodTrampoline(
167 0, (Parser target) => target._parseBitwiseAndExpression()), 172 0, (Parser target) => target._parseBitwiseAndExpression()),
168 'parseBitwiseXorExpression_0': new MethodTrampoline( 173 'parseBitwiseXorExpression_0': new MethodTrampoline(
169 0, (Parser target) => target._parseBitwiseXorExpression()), 174 0, (Parser target) => target._parseBitwiseXorExpression()),
170 'parseBreakStatement_0': 175 'parseBreakStatement_0':
171 new MethodTrampoline(0, (Parser target) => target._parseBreakStatement()), 176 new MethodTrampoline(0, (Parser target) => target._parseBreakStatement()),
172 'parseCascadeSection_0': 177 'parseCascadeSection_0':
173 new MethodTrampoline(0, (Parser target) => target._parseCascadeSection()), 178 new MethodTrampoline(0, (Parser target) => target._parseCascadeSection()),
174 'parseClassDeclaration_2': new MethodTrampoline(2, 179 'parseClassDeclaration_2': new MethodTrampoline(2,
175 (Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)), 180 (Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)),
176 'parseClassMembers_2': new MethodTrampoline( 181 'parseClassMembers_2': new MethodTrampoline(
177 2, (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)), 182 2, (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
178 'parseClassTypeAlias_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 183 'parseClassTypeAlias_3': new MethodTrampoline(
179 arg2) => target._parseClassTypeAlias(arg0, arg1, arg2)), 184 3,
185 (Parser target, arg0, arg1, arg2) =>
186 target._parseClassTypeAlias(arg0, arg1, arg2)),
180 'parseCombinator_0': 187 'parseCombinator_0':
181 new MethodTrampoline(0, (Parser target) => target.parseCombinator()), 188 new MethodTrampoline(0, (Parser target) => target.parseCombinator()),
182 'parseCombinators_0': 189 'parseCombinators_0':
183 new MethodTrampoline(0, (Parser target) => target._parseCombinators()), 190 new MethodTrampoline(0, (Parser target) => target._parseCombinators()),
184 'parseCommentAndMetadata_0': new MethodTrampoline( 191 'parseCommentAndMetadata_0': new MethodTrampoline(
185 0, (Parser target) => target._parseCommentAndMetadata()), 192 0, (Parser target) => target._parseCommentAndMetadata()),
186 'parseCommentReference_2': new MethodTrampoline(2, 193 'parseCommentReference_2': new MethodTrampoline(2,
187 (Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)), 194 (Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)),
188 'parseCommentReferences_1': new MethodTrampoline( 195 'parseCommentReferences_1': new MethodTrampoline(
189 1, (Parser target, arg0) => target._parseCommentReferences(arg0)), 196 1, (Parser target, arg0) => target._parseCommentReferences(arg0)),
190 'parseCompilationUnitMember_1': new MethodTrampoline( 197 'parseCompilationUnitMember_1': new MethodTrampoline(
191 1, (Parser target, arg0) => target._parseCompilationUnitMember(arg0)), 198 1, (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
192 'parseConstExpression_0': new MethodTrampoline( 199 'parseConstExpression_0': new MethodTrampoline(
193 0, (Parser target) => target._parseConstExpression()), 200 0, (Parser target) => target._parseConstExpression()),
194 'parseConstructor_8': new MethodTrampoline(8, (Parser target, arg0, arg1, 201 'parseConstructor_8': new MethodTrampoline(
195 arg2, arg3, arg4, arg5, arg6, arg7) => 202 8,
196 target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)), 203 (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) => target
204 ._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
197 'parseConstructorFieldInitializer_0': new MethodTrampoline( 205 'parseConstructorFieldInitializer_0': new MethodTrampoline(
198 0, (Parser target) => target._parseConstructorFieldInitializer()), 206 0, (Parser target) => target._parseConstructorFieldInitializer()),
199 'parseContinueStatement_0': new MethodTrampoline( 207 'parseContinueStatement_0': new MethodTrampoline(
200 0, (Parser target) => target._parseContinueStatement()), 208 0, (Parser target) => target._parseContinueStatement()),
201 'parseDirective_1': new MethodTrampoline( 209 'parseDirective_1': new MethodTrampoline(
202 1, (Parser target, arg0) => target._parseDirective(arg0)), 210 1, (Parser target, arg0) => target._parseDirective(arg0)),
203 'parseDirectives_0': 211 'parseDirectives_0':
204 new MethodTrampoline(0, (Parser target) => target._parseDirectives()), 212 new MethodTrampoline(0, (Parser target) => target._parseDirectives()),
205 'parseDocumentationComment_0': new MethodTrampoline( 213 'parseDocumentationComment_0': new MethodTrampoline(
206 0, (Parser target) => target._parseDocumentationComment()), 214 0, (Parser target) => target._parseDocumentationComment()),
(...skipping 10 matching lines...) Expand all
217 'parseExportDirective_1': new MethodTrampoline( 225 'parseExportDirective_1': new MethodTrampoline(
218 1, (Parser target, arg0) => target._parseExportDirective(arg0)), 226 1, (Parser target, arg0) => target._parseExportDirective(arg0)),
219 'parseExpressionList_0': 227 'parseExpressionList_0':
220 new MethodTrampoline(0, (Parser target) => target._parseExpressionList()), 228 new MethodTrampoline(0, (Parser target) => target._parseExpressionList()),
221 'parseFinalConstVarOrType_1': new MethodTrampoline( 229 'parseFinalConstVarOrType_1': new MethodTrampoline(
222 1, (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)), 230 1, (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
223 'parseFormalParameter_1': new MethodTrampoline( 231 'parseFormalParameter_1': new MethodTrampoline(
224 1, (Parser target, arg0) => target._parseFormalParameter(arg0)), 232 1, (Parser target, arg0) => target._parseFormalParameter(arg0)),
225 'parseForStatement_0': 233 'parseForStatement_0':
226 new MethodTrampoline(0, (Parser target) => target._parseForStatement()), 234 new MethodTrampoline(0, (Parser target) => target._parseForStatement()),
227 'parseFunctionBody_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 235 'parseFunctionBody_3': new MethodTrampoline(
228 arg2) => target._parseFunctionBody(arg0, arg1, arg2)), 236 3,
229 'parseFunctionDeclaration_3': new MethodTrampoline(3, (Parser target, arg0, 237 (Parser target, arg0, arg1, arg2) =>
230 arg1, arg2) => target._parseFunctionDeclaration(arg0, arg1, arg2)), 238 target._parseFunctionBody(arg0, arg1, arg2)),
239 'parseFunctionDeclaration_3': new MethodTrampoline(
240 3,
241 (Parser target, arg0, arg1, arg2) =>
242 target._parseFunctionDeclaration(arg0, arg1, arg2)),
231 'parseFunctionDeclarationStatement_0': new MethodTrampoline( 243 'parseFunctionDeclarationStatement_0': new MethodTrampoline(
232 0, (Parser target) => target._parseFunctionDeclarationStatement()), 244 0, (Parser target) => target._parseFunctionDeclarationStatement()),
233 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(2, 245 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(
246 2,
234 (Parser target, arg0, arg1) => 247 (Parser target, arg0, arg1) =>
235 target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)), 248 target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
236 'parseFunctionTypeAlias_2': new MethodTrampoline(2, (Parser target, arg0, 249 'parseFunctionTypeAlias_2': new MethodTrampoline(
237 arg1) => target._parseFunctionTypeAlias(arg0, arg1)), 250 2,
238 'parseGetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, 251 (Parser target, arg0, arg1) =>
239 arg3) => target._parseGetter(arg0, arg1, arg2, arg3)), 252 target._parseFunctionTypeAlias(arg0, arg1)),
253 'parseGetter_4': new MethodTrampoline(
254 4,
255 (Parser target, arg0, arg1, arg2, arg3) =>
256 target._parseGetter(arg0, arg1, arg2, arg3)),
240 'parseIdentifierList_0': 257 'parseIdentifierList_0':
241 new MethodTrampoline(0, (Parser target) => target._parseIdentifierList()), 258 new MethodTrampoline(0, (Parser target) => target._parseIdentifierList()),
242 'parseIfStatement_0': 259 'parseIfStatement_0':
243 new MethodTrampoline(0, (Parser target) => target._parseIfStatement()), 260 new MethodTrampoline(0, (Parser target) => target._parseIfStatement()),
244 'parseImportDirective_1': new MethodTrampoline( 261 'parseImportDirective_1': new MethodTrampoline(
245 1, (Parser target, arg0) => target._parseImportDirective(arg0)), 262 1, (Parser target, arg0) => target._parseImportDirective(arg0)),
246 'parseInitializedIdentifierList_4': new MethodTrampoline(4, 263 'parseInitializedIdentifierList_4': new MethodTrampoline(
264 4,
247 (Parser target, arg0, arg1, arg2, arg3) => 265 (Parser target, arg0, arg1, arg2, arg3) =>
248 target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)), 266 target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
249 'parseInstanceCreationExpression_1': new MethodTrampoline(1, 267 'parseInstanceCreationExpression_1': new MethodTrampoline(1,
250 (Parser target, arg0) => target._parseInstanceCreationExpression(arg0)), 268 (Parser target, arg0) => target._parseInstanceCreationExpression(arg0)),
251 'parseLibraryDirective_1': new MethodTrampoline( 269 'parseLibraryDirective_1': new MethodTrampoline(
252 1, (Parser target, arg0) => target._parseLibraryDirective(arg0)), 270 1, (Parser target, arg0) => target._parseLibraryDirective(arg0)),
253 'parseLibraryName_2': new MethodTrampoline( 271 'parseLibraryName_2': new MethodTrampoline(
254 2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)), 272 2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
255 'parseListLiteral_2': new MethodTrampoline( 273 'parseListLiteral_2': new MethodTrampoline(
256 2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)), 274 2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
257 'parseListOrMapLiteral_1': new MethodTrampoline( 275 'parseListOrMapLiteral_1': new MethodTrampoline(
258 1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)), 276 1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
259 'parseLogicalAndExpression_0': new MethodTrampoline( 277 'parseLogicalAndExpression_0': new MethodTrampoline(
260 0, (Parser target) => target._parseLogicalAndExpression()), 278 0, (Parser target) => target._parseLogicalAndExpression()),
261 'parseMapLiteral_2': new MethodTrampoline( 279 'parseMapLiteral_2': new MethodTrampoline(
262 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)), 280 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
263 'parseMethodDeclarationAfterParameters_7': new MethodTrampoline(7, 281 'parseMethodDeclarationAfterParameters_7': new MethodTrampoline(
264 (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6) => target 282 7,
265 ._parseMethodDeclarationAfterParameters( 283 (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6) =>
284 target._parseMethodDeclarationAfterParameters(
266 arg0, arg1, arg2, arg3, arg4, arg5, arg6)), 285 arg0, arg1, arg2, arg3, arg4, arg5, arg6)),
267 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, 286 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(
287 4,
268 (Parser target, arg0, arg1, arg2, arg3) => target 288 (Parser target, arg0, arg1, arg2, arg3) => target
269 ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)), 289 ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
270 'parseModifiers_0': 290 'parseModifiers_0':
271 new MethodTrampoline(0, (Parser target) => target._parseModifiers()), 291 new MethodTrampoline(0, (Parser target) => target._parseModifiers()),
272 'parseMultiplicativeExpression_0': new MethodTrampoline( 292 'parseMultiplicativeExpression_0': new MethodTrampoline(
273 0, (Parser target) => target._parseMultiplicativeExpression()), 293 0, (Parser target) => target._parseMultiplicativeExpression()),
274 'parseNativeClause_0': 294 'parseNativeClause_0':
275 new MethodTrampoline(0, (Parser target) => target._parseNativeClause()), 295 new MethodTrampoline(0, (Parser target) => target._parseNativeClause()),
276 'parseNewExpression_0': 296 'parseNewExpression_0':
277 new MethodTrampoline(0, (Parser target) => target._parseNewExpression()), 297 new MethodTrampoline(0, (Parser target) => target._parseNewExpression()),
278 'parseNonLabeledStatement_0': new MethodTrampoline( 298 'parseNonLabeledStatement_0': new MethodTrampoline(
279 0, (Parser target) => target._parseNonLabeledStatement()), 299 0, (Parser target) => target._parseNonLabeledStatement()),
280 'parseOperator_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 300 'parseOperator_3': new MethodTrampoline(
281 arg2) => target._parseOperator(arg0, arg1, arg2)), 301 3,
302 (Parser target, arg0, arg1, arg2) =>
303 target._parseOperator(arg0, arg1, arg2)),
282 'parseOptionalReturnType_0': new MethodTrampoline( 304 'parseOptionalReturnType_0': new MethodTrampoline(
283 0, (Parser target) => target._parseOptionalReturnType()), 305 0, (Parser target) => target._parseOptionalReturnType()),
284 'parsePartDirective_1': new MethodTrampoline( 306 'parsePartDirective_1': new MethodTrampoline(
285 1, (Parser target, arg0) => target._parsePartDirective(arg0)), 307 1, (Parser target, arg0) => target._parsePartDirective(arg0)),
286 'parsePostfixExpression_0': new MethodTrampoline( 308 'parsePostfixExpression_0': new MethodTrampoline(
287 0, (Parser target) => target._parsePostfixExpression()), 309 0, (Parser target) => target._parsePostfixExpression()),
288 'parsePrimaryExpression_0': new MethodTrampoline( 310 'parsePrimaryExpression_0': new MethodTrampoline(
289 0, (Parser target) => target._parsePrimaryExpression()), 311 0, (Parser target) => target._parsePrimaryExpression()),
290 'parseRedirectingConstructorInvocation_0': new MethodTrampoline( 312 'parseRedirectingConstructorInvocation_0': new MethodTrampoline(
291 0, (Parser target) => target._parseRedirectingConstructorInvocation()), 313 0, (Parser target) => target._parseRedirectingConstructorInvocation()),
292 'parseRelationalExpression_0': new MethodTrampoline( 314 'parseRelationalExpression_0': new MethodTrampoline(
293 0, (Parser target) => target._parseRelationalExpression()), 315 0, (Parser target) => target._parseRelationalExpression()),
294 'parseRethrowExpression_0': new MethodTrampoline( 316 'parseRethrowExpression_0': new MethodTrampoline(
295 0, (Parser target) => target._parseRethrowExpression()), 317 0, (Parser target) => target._parseRethrowExpression()),
296 'parseReturnStatement_0': new MethodTrampoline( 318 'parseReturnStatement_0': new MethodTrampoline(
297 0, (Parser target) => target._parseReturnStatement()), 319 0, (Parser target) => target._parseReturnStatement()),
298 'parseSetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, 320 'parseSetter_4': new MethodTrampoline(
299 arg3) => target._parseSetter(arg0, arg1, arg2, arg3)), 321 4,
322 (Parser target, arg0, arg1, arg2, arg3) =>
323 target._parseSetter(arg0, arg1, arg2, arg3)),
300 'parseShiftExpression_0': new MethodTrampoline( 324 'parseShiftExpression_0': new MethodTrampoline(
301 0, (Parser target) => target._parseShiftExpression()), 325 0, (Parser target) => target._parseShiftExpression()),
302 'parseStatementList_0': 326 'parseStatementList_0':
303 new MethodTrampoline(0, (Parser target) => target._parseStatementList()), 327 new MethodTrampoline(0, (Parser target) => target._parseStatementList()),
304 'parseStringInterpolation_1': new MethodTrampoline( 328 'parseStringInterpolation_1': new MethodTrampoline(
305 1, (Parser target, arg0) => target._parseStringInterpolation(arg0)), 329 1, (Parser target, arg0) => target._parseStringInterpolation(arg0)),
306 'parseSuperConstructorInvocation_0': new MethodTrampoline( 330 'parseSuperConstructorInvocation_0': new MethodTrampoline(
307 0, (Parser target) => target._parseSuperConstructorInvocation()), 331 0, (Parser target) => target._parseSuperConstructorInvocation()),
308 'parseSwitchStatement_0': new MethodTrampoline( 332 'parseSwitchStatement_0': new MethodTrampoline(
309 0, (Parser target) => target._parseSwitchStatement()), 333 0, (Parser target) => target._parseSwitchStatement()),
310 'parseSymbolLiteral_0': 334 'parseSymbolLiteral_0':
311 new MethodTrampoline(0, (Parser target) => target._parseSymbolLiteral()), 335 new MethodTrampoline(0, (Parser target) => target._parseSymbolLiteral()),
312 'parseThrowExpression_0': new MethodTrampoline( 336 'parseThrowExpression_0': new MethodTrampoline(
313 0, (Parser target) => target._parseThrowExpression()), 337 0, (Parser target) => target._parseThrowExpression()),
314 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline( 338 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(
315 0, (Parser target) => target._parseThrowExpressionWithoutCascade()), 339 0, (Parser target) => target._parseThrowExpressionWithoutCascade()),
316 'parseTryStatement_0': 340 'parseTryStatement_0':
317 new MethodTrampoline(0, (Parser target) => target._parseTryStatement()), 341 new MethodTrampoline(0, (Parser target) => target._parseTryStatement()),
318 'parseTypeAlias_1': new MethodTrampoline( 342 'parseTypeAlias_1': new MethodTrampoline(
319 1, (Parser target, arg0) => target._parseTypeAlias(arg0)), 343 1, (Parser target, arg0) => target._parseTypeAlias(arg0)),
320 'parseUnaryExpression_0': new MethodTrampoline( 344 'parseUnaryExpression_0': new MethodTrampoline(
321 0, (Parser target) => target._parseUnaryExpression()), 345 0, (Parser target) => target._parseUnaryExpression()),
322 'parseVariableDeclaration_0': new MethodTrampoline( 346 'parseVariableDeclaration_0': new MethodTrampoline(
323 0, (Parser target) => target._parseVariableDeclaration()), 347 0, (Parser target) => target._parseVariableDeclaration()),
324 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(1, 348 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(
349 1,
325 (Parser target, arg0) => 350 (Parser target, arg0) =>
326 target._parseVariableDeclarationListAfterMetadata(arg0)), 351 target._parseVariableDeclarationListAfterMetadata(arg0)),
327 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(3, 352 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(
353 3,
328 (Parser target, arg0, arg1, arg2) => 354 (Parser target, arg0, arg1, arg2) =>
329 target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)), 355 target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
330 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(1, 356 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(
357 1,
331 (Parser target, arg0) => 358 (Parser target, arg0) =>
332 target._parseVariableDeclarationStatementAfterMetadata(arg0)), 359 target._parseVariableDeclarationStatementAfterMetadata(arg0)),
333 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(3, 360 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(
361 3,
334 (Parser target, arg0, arg1, arg2) => 362 (Parser target, arg0, arg1, arg2) =>
335 target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)), 363 target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
336 'parseWhileStatement_0': 364 'parseWhileStatement_0':
337 new MethodTrampoline(0, (Parser target) => target._parseWhileStatement()), 365 new MethodTrampoline(0, (Parser target) => target._parseWhileStatement()),
338 'parseYieldStatement_0': 366 'parseYieldStatement_0':
339 new MethodTrampoline(0, (Parser target) => target._parseYieldStatement()), 367 new MethodTrampoline(0, (Parser target) => target._parseYieldStatement()),
340 'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()), 368 'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()),
341 'peekAt_1': 369 'peekAt_1':
342 new MethodTrampoline(1, (Parser target, arg0) => target._peekAt(arg0)), 370 new MethodTrampoline(1, (Parser target, arg0) => target._peekAt(arg0)),
343 'reportError_1': new MethodTrampoline( 371 'reportError_1': new MethodTrampoline(
344 1, (Parser target, arg0) => target._reportError(arg0)), 372 1, (Parser target, arg0) => target._reportError(arg0)),
345 'reportErrorForCurrentToken_2': new MethodTrampoline(2, (Parser target, arg0, 373 'reportErrorForCurrentToken_2': new MethodTrampoline(
346 arg1) => target._reportErrorForCurrentToken(arg0, arg1)), 374 2,
347 'reportErrorForNode_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 375 (Parser target, arg0, arg1) =>
348 arg2) => target._reportErrorForNode(arg0, arg1, arg2)), 376 target._reportErrorForCurrentToken(arg0, arg1)),
349 'reportErrorForToken_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 377 'reportErrorForNode_3': new MethodTrampoline(
350 arg2) => target._reportErrorForToken(arg0, arg1, arg2)), 378 3,
379 (Parser target, arg0, arg1, arg2) =>
380 target._reportErrorForNode(arg0, arg1, arg2)),
381 'reportErrorForToken_3': new MethodTrampoline(
382 3,
383 (Parser target, arg0, arg1, arg2) =>
384 target._reportErrorForToken(arg0, arg1, arg2)),
351 'skipBlock_0': 385 'skipBlock_0':
352 new MethodTrampoline(0, (Parser target) => target._skipBlock()), 386 new MethodTrampoline(0, (Parser target) => target._skipBlock()),
353 'skipFinalConstVarOrType_1': new MethodTrampoline( 387 'skipFinalConstVarOrType_1': new MethodTrampoline(
354 1, (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)), 388 1, (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
355 'skipFormalParameterList_1': new MethodTrampoline( 389 'skipFormalParameterList_1': new MethodTrampoline(
356 1, (Parser target, arg0) => target._skipFormalParameterList(arg0)), 390 1, (Parser target, arg0) => target._skipFormalParameterList(arg0)),
357 'skipPastMatchingToken_1': new MethodTrampoline( 391 'skipPastMatchingToken_1': new MethodTrampoline(
358 1, (Parser target, arg0) => target._skipPastMatchingToken(arg0)), 392 1, (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
359 'skipPrefixedIdentifier_1': new MethodTrampoline( 393 'skipPrefixedIdentifier_1': new MethodTrampoline(
360 1, (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)), 394 1, (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
(...skipping 12 matching lines...) Expand all
373 'skipTypeParameterList_1': new MethodTrampoline( 407 'skipTypeParameterList_1': new MethodTrampoline(
374 1, (Parser target, arg0) => target._skipTypeParameterList(arg0)), 408 1, (Parser target, arg0) => target._skipTypeParameterList(arg0)),
375 'tokenMatches_2': new MethodTrampoline( 409 'tokenMatches_2': new MethodTrampoline(
376 2, (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)), 410 2, (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
377 'tokenMatchesIdentifier_1': new MethodTrampoline( 411 'tokenMatchesIdentifier_1': new MethodTrampoline(
378 1, (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)), 412 1, (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
379 'tokenMatchesKeyword_2': new MethodTrampoline(2, 413 'tokenMatchesKeyword_2': new MethodTrampoline(2,
380 (Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)), 414 (Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)),
381 'tokenMatchesString_2': new MethodTrampoline( 415 'tokenMatchesString_2': new MethodTrampoline(
382 2, (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)), 416 2, (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)),
383 'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1, 417 'translateCharacter_3': new MethodTrampoline(
384 arg2) => target._translateCharacter(arg0, arg1, arg2)), 418 3,
419 (Parser target, arg0, arg1, arg2) =>
420 target._translateCharacter(arg0, arg1, arg2)),
385 'unlockErrorListener_0': 421 'unlockErrorListener_0':
386 new MethodTrampoline(0, (Parser target) => target._unlockErrorListener()), 422 new MethodTrampoline(0, (Parser target) => target._unlockErrorListener()),
387 'validateFormalParameterList_1': new MethodTrampoline( 423 'validateFormalParameterList_1': new MethodTrampoline(
388 1, (Parser target, arg0) => target._validateFormalParameterList(arg0)), 424 1, (Parser target, arg0) => target._validateFormalParameterList(arg0)),
389 'validateModifiersForClass_1': new MethodTrampoline( 425 'validateModifiersForClass_1': new MethodTrampoline(
390 1, (Parser target, arg0) => target._validateModifiersForClass(arg0)), 426 1, (Parser target, arg0) => target._validateModifiersForClass(arg0)),
391 'validateModifiersForConstructor_1': new MethodTrampoline(1, 427 'validateModifiersForConstructor_1': new MethodTrampoline(1,
392 (Parser target, arg0) => target._validateModifiersForConstructor(arg0)), 428 (Parser target, arg0) => target._validateModifiersForConstructor(arg0)),
393 'validateModifiersForEnum_1': new MethodTrampoline( 429 'validateModifiersForEnum_1': new MethodTrampoline(
394 1, (Parser target, arg0) => target._validateModifiersForEnum(arg0)), 430 1, (Parser target, arg0) => target._validateModifiersForEnum(arg0)),
395 'validateModifiersForField_1': new MethodTrampoline( 431 'validateModifiersForField_1': new MethodTrampoline(
396 1, (Parser target, arg0) => target._validateModifiersForField(arg0)), 432 1, (Parser target, arg0) => target._validateModifiersForField(arg0)),
397 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(1, 433 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(
434 1,
398 (Parser target, arg0) => 435 (Parser target, arg0) =>
399 target._validateModifiersForFunctionDeclarationStatement(arg0)), 436 target._validateModifiersForFunctionDeclarationStatement(arg0)),
400 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(1, 437 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(
438 1,
401 (Parser target, arg0) => 439 (Parser target, arg0) =>
402 target._validateModifiersForGetterOrSetterOrMethod(arg0)), 440 target._validateModifiersForGetterOrSetterOrMethod(arg0)),
403 'validateModifiersForOperator_1': new MethodTrampoline( 441 'validateModifiersForOperator_1': new MethodTrampoline(
404 1, (Parser target, arg0) => target._validateModifiersForOperator(arg0)), 442 1, (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
405 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(1, 443 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(
444 1,
406 (Parser target, arg0) => 445 (Parser target, arg0) =>
407 target._validateModifiersForTopLevelDeclaration(arg0)), 446 target._validateModifiersForTopLevelDeclaration(arg0)),
408 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(1, 447 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(
448 1,
409 (Parser target, arg0) => 449 (Parser target, arg0) =>
410 target._validateModifiersForTopLevelFunction(arg0)), 450 target._validateModifiersForTopLevelFunction(arg0)),
411 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(1, 451 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(
452 1,
412 (Parser target, arg0) => 453 (Parser target, arg0) =>
413 target._validateModifiersForTopLevelVariable(arg0)), 454 target._validateModifiersForTopLevelVariable(arg0)),
414 'validateModifiersForTypedef_1': new MethodTrampoline( 455 'validateModifiersForTypedef_1': new MethodTrampoline(
415 1, (Parser target, arg0) => target._validateModifiersForTypedef(arg0)), 456 1, (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),
416 }; 457 };
417 458
418 Object invokeParserMethodImpl( 459 Object invokeParserMethodImpl(
419 Parser parser, String methodName, List<Object> objects, Token tokenStream) { 460 Parser parser, String methodName, List<Object> objects, Token tokenStream) {
420 parser.currentToken = tokenStream; 461 parser.currentToken = tokenStream;
421 MethodTrampoline method = 462 MethodTrampoline method =
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1622 */ 1663 */
1623 final TokenMap _tokenMap; 1664 final TokenMap _tokenMap;
1624 1665
1625 /** 1666 /**
1626 * The error listener that will be informed of any errors that are found 1667 * The error listener that will be informed of any errors that are found
1627 * during the parse. 1668 * during the parse.
1628 */ 1669 */
1629 final AnalysisErrorListener _errorListener; 1670 final AnalysisErrorListener _errorListener;
1630 1671
1631 /** 1672 /**
1673 * A flag indicating whether the parser is to allow assertions with messages
1674 * (DEP 37).
1675 */
1676 final bool enableAssertMessage;
1677
1678 /**
1632 * The node in the AST structure that contains the revised content. 1679 * The node in the AST structure that contains the revised content.
1633 */ 1680 */
1634 AstNode _updatedNode; 1681 AstNode _updatedNode;
1635 1682
1636 /** 1683 /**
1637 * Initialize a newly created incremental parser to parse a portion of the 1684 * Initialize a newly created incremental parser to parse a portion of the
1638 * content of the given [_source]. The [_tokenMap] is a map from old tokens to 1685 * content of the given [_source]. The [_tokenMap] is a map from old tokens to
1639 * new tokens that is used during the cloning process. The [_errorListener] 1686 * new tokens that is used during the cloning process. The [_errorListener]
1640 * will be informed of any errors that are found during the parse. 1687 * will be informed of any errors that are found during the parse.
1641 */ 1688 */
1642 IncrementalParser(this._source, this._tokenMap, this._errorListener); 1689 IncrementalParser(this._source, this._tokenMap, this._errorListener,
1690 {this.enableAssertMessage: false});
1643 1691
1644 /** 1692 /**
1645 * Return the node in the AST structure that contains the revised content. 1693 * Return the node in the AST structure that contains the revised content.
1646 */ 1694 */
1647 AstNode get updatedNode => _updatedNode; 1695 AstNode get updatedNode => _updatedNode;
1648 1696
1649 /** 1697 /**
1650 * Given a range of tokens that were re-scanned, re-parse the minimum number 1698 * Given a range of tokens that were re-scanned, re-parse the minimum number
1651 * of tokens to produce a consistent AST structure. The range is represented 1699 * of tokens to produce a consistent AST structure. The range is represented
1652 * by the first and last tokens in the range. 1700 * by the first and last tokens in the range.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 // Find the token at which parsing is to begin. 1735 // Find the token at which parsing is to begin.
1688 // 1736 //
1689 int originalOffset = oldNode.offset; 1737 int originalOffset = oldNode.offset;
1690 Token parseToken = _findTokenAt(firstToken, originalOffset); 1738 Token parseToken = _findTokenAt(firstToken, originalOffset);
1691 if (parseToken == null) { 1739 if (parseToken == null) {
1692 return null; 1740 return null;
1693 } 1741 }
1694 // 1742 //
1695 // Parse the appropriate AST structure starting at the appropriate place. 1743 // Parse the appropriate AST structure starting at the appropriate place.
1696 // 1744 //
1697 Parser parser = new Parser(_source, _errorListener); 1745 Parser parser = new Parser(_source, _errorListener,
1746 enableAssertMessage: enableAssertMessage);
1698 parser.currentToken = parseToken; 1747 parser.currentToken = parseToken;
1699 while (newNode == null) { 1748 while (newNode == null) {
1700 AstNode parent = oldNode.parent; 1749 AstNode parent = oldNode.parent;
1701 if (parent == null) { 1750 if (parent == null) {
1702 parseToken = _findFirstToken(parseToken); 1751 parseToken = _findFirstToken(parseToken);
1703 parser.currentToken = parseToken; 1752 parser.currentToken = parseToken;
1704 return parser.parseCompilationUnit2(); 1753 return parser.parseCompilationUnit2();
1705 } 1754 }
1706 bool advanceToParent = false; 1755 bool advanceToParent = false;
1707 try { 1756 try {
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 * An [errorListener] lock, if more than `0`, then errors are not reported. 2086 * An [errorListener] lock, if more than `0`, then errors are not reported.
2038 */ 2087 */
2039 int _errorListenerLock = 0; 2088 int _errorListenerLock = 0;
2040 2089
2041 /** 2090 /**
2042 * A flag indicating whether parser is to parse function bodies. 2091 * A flag indicating whether parser is to parse function bodies.
2043 */ 2092 */
2044 bool _parseFunctionBodies = true; 2093 bool _parseFunctionBodies = true;
2045 2094
2046 /** 2095 /**
2096 * A flag indicating whether the parser is to allow assertions with messages
2097 * (DEP 37).
2098 */
2099 final bool enableAssertMessage;
2100
2101 /**
2047 * The next token to be parsed. 2102 * The next token to be parsed.
2048 */ 2103 */
2049 Token _currentToken; 2104 Token _currentToken;
2050 2105
2051 /** 2106 /**
2052 * A flag indicating whether the parser is currently in a function body marked 2107 * A flag indicating whether the parser is currently in a function body marked
2053 * as being 'async'. 2108 * as being 'async'.
2054 */ 2109 */
2055 bool _inAsync = false; 2110 bool _inAsync = false;
2056 2111
(...skipping 22 matching lines...) Expand all
2079 /** 2134 /**
2080 * A flag indicating whether the parser is to parse generic method syntax. 2135 * A flag indicating whether the parser is to parse generic method syntax.
2081 */ 2136 */
2082 bool parseGenericMethods = false; 2137 bool parseGenericMethods = false;
2083 2138
2084 /** 2139 /**
2085 * Initialize a newly created parser to parse the content of the given 2140 * Initialize a newly created parser to parse the content of the given
2086 * [_source] and to report any errors that are found to the given 2141 * [_source] and to report any errors that are found to the given
2087 * [_errorListener]. 2142 * [_errorListener].
2088 */ 2143 */
2089 Parser(this._source, this._errorListener); 2144 Parser(this._source, this._errorListener, {this.enableAssertMessage: false});
2090 2145
2091 void set currentToken(Token currentToken) { 2146 void set currentToken(Token currentToken) {
2092 this._currentToken = currentToken; 2147 this._currentToken = currentToken;
2093 } 2148 }
2094 2149
2095 /** 2150 /**
2096 * Return `true` if the current token is the first token of a return type that 2151 * Return `true` if the current token is the first token of a return type that
2097 * is followed by an identifier, possibly followed by a list of type 2152 * is followed by an identifier, possibly followed by a list of type
2098 * parameters, followed by a left-parenthesis. This is used by 2153 * parameters, followed by a left-parenthesis. This is used by
2099 * [_parseTypeAlias] to determine whether or not to parse a return type. 2154 * [_parseTypeAlias] to determine whether or not to parse a return type.
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
2321 _tokenMatchesIdentifier(_peek())) { 2376 _tokenMatchesIdentifier(_peek())) {
2322 _validateModifiersForGetterOrSetterOrMethod(modifiers); 2377 _validateModifiersForGetterOrSetterOrMethod(modifiers);
2323 return _parseSetter(commentAndMetadata, modifiers.externalKeyword, 2378 return _parseSetter(commentAndMetadata, modifiers.externalKeyword,
2324 modifiers.staticKeyword, returnType); 2379 modifiers.staticKeyword, returnType);
2325 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) { 2380 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
2326 _validateModifiersForOperator(modifiers); 2381 _validateModifiersForOperator(modifiers);
2327 return _parseOperator( 2382 return _parseOperator(
2328 commentAndMetadata, modifiers.externalKeyword, returnType); 2383 commentAndMetadata, modifiers.externalKeyword, returnType);
2329 } else if (_matchesIdentifier() && 2384 } else if (_matchesIdentifier() &&
2330 _peek().matchesAny([ 2385 _peek().matchesAny([
2331 TokenType.OPEN_PAREN, 2386 TokenType.OPEN_PAREN,
2332 TokenType.OPEN_CURLY_BRACKET, 2387 TokenType.OPEN_CURLY_BRACKET,
2333 TokenType.FUNCTION, 2388 TokenType.FUNCTION,
2334 TokenType.LT 2389 TokenType.LT
2335 ])) { 2390 ])) {
2336 _validateModifiersForGetterOrSetterOrMethod(modifiers); 2391 _validateModifiersForGetterOrSetterOrMethod(modifiers);
2337 return _parseMethodDeclarationAfterReturnType(commentAndMetadata, 2392 return _parseMethodDeclarationAfterReturnType(commentAndMetadata,
2338 modifiers.externalKeyword, modifiers.staticKeyword, returnType); 2393 modifiers.externalKeyword, modifiers.staticKeyword, returnType);
2339 } else { 2394 } else {
2340 // 2395 //
2341 // We have found an error of some kind. Try to recover. 2396 // We have found an error of some kind. Try to recover.
2342 // 2397 //
2343 if (_matchesIdentifier()) { 2398 if (_matchesIdentifier()) {
2344 if (_peek().matchesAny( 2399 if (_peek().matchesAny(
2345 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { 2400 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
2346 // 2401 //
2347 // We appear to have a variable declaration with a type of "void". 2402 // We appear to have a variable declaration with a type of "void".
2348 // 2403 //
2349 _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType); 2404 _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
2350 return _parseInitializedIdentifierList(commentAndMetadata, 2405 return _parseInitializedIdentifierList(
2351 modifiers.staticKeyword, _validateModifiersForField(modifiers), 2406 commentAndMetadata,
2407 modifiers.staticKeyword,
2408 _validateModifiersForField(modifiers),
2352 returnType); 2409 returnType);
2353 } 2410 }
2354 } 2411 }
2355 if (_isOperator(_currentToken)) { 2412 if (_isOperator(_currentToken)) {
2356 // 2413 //
2357 // We appear to have found an operator declaration without the 2414 // We appear to have found an operator declaration without the
2358 // 'operator' keyword. 2415 // 'operator' keyword.
2359 // 2416 //
2360 _validateModifiersForOperator(modifiers); 2417 _validateModifiersForOperator(modifiers);
2361 return _parseOperator( 2418 return _parseOperator(
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2419 keyword = modifiers.constKeyword; 2476 keyword = modifiers.constKeyword;
2420 } 2477 }
2421 if (keyword != null) { 2478 if (keyword != null) {
2422 // 2479 //
2423 // We appear to have found an incomplete field declaration. 2480 // We appear to have found an incomplete field declaration.
2424 // 2481 //
2425 _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER); 2482 _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
2426 List<VariableDeclaration> variables = new List<VariableDeclaration>(); 2483 List<VariableDeclaration> variables = new List<VariableDeclaration>();
2427 variables.add( 2484 variables.add(
2428 new VariableDeclaration(_createSyntheticIdentifier(), null, null)); 2485 new VariableDeclaration(_createSyntheticIdentifier(), null, null));
2429 return new FieldDeclaration(commentAndMetadata.comment, 2486 return new FieldDeclaration(
2430 commentAndMetadata.metadata, null, 2487 commentAndMetadata.comment,
2488 commentAndMetadata.metadata,
2489 null,
2431 new VariableDeclarationList(null, null, keyword, null, variables), 2490 new VariableDeclarationList(null, null, keyword, null, variables),
2432 _expectSemicolon()); 2491 _expectSemicolon());
2433 } 2492 }
2434 _reportErrorForToken( 2493 _reportErrorForToken(
2435 ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken); 2494 ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
2436 if (commentAndMetadata.comment != null || 2495 if (commentAndMetadata.comment != null ||
2437 !commentAndMetadata.metadata.isEmpty) { 2496 !commentAndMetadata.metadata.isEmpty) {
2438 // 2497 //
2439 // We appear to have found an incomplete declaration at the end of the 2498 // We appear to have found an incomplete declaration at the end of the
2440 // class. At this point it consists of a metadata, which we don't want 2499 // class. At this point it consists of a metadata, which we don't want
2441 // to loose, so we'll treat it as a method declaration with a missing 2500 // to loose, so we'll treat it as a method declaration with a missing
2442 // name, parameters and empty body. 2501 // name, parameters and empty body.
2443 // 2502 //
2444 return new MethodDeclaration(commentAndMetadata.comment, 2503 return new MethodDeclaration(
2445 commentAndMetadata.metadata, null, null, null, null, null, 2504 commentAndMetadata.comment,
2446 _createSyntheticIdentifier(), null, new FormalParameterList( 2505 commentAndMetadata.metadata,
2506 null,
2507 null,
2508 null,
2509 null,
2510 null,
2511 _createSyntheticIdentifier(),
2512 null,
2513 new FormalParameterList(
2447 null, new List<FormalParameter>(), null, null, null), 2514 null, new List<FormalParameter>(), null, null, null),
2448 new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON))); 2515 new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
2449 } 2516 }
2450 return null; 2517 return null;
2451 } else if (_tokenMatches(_peek(), TokenType.PERIOD) && 2518 } else if (_tokenMatches(_peek(), TokenType.PERIOD) &&
2452 _tokenMatchesIdentifier(_peekAt(2)) && 2519 _tokenMatchesIdentifier(_peekAt(2)) &&
2453 _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) { 2520 _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
2454 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, 2521 return _parseConstructor(
2455 _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, 2522 commentAndMetadata,
2456 parseSimpleIdentifier(), getAndAdvance(), parseSimpleIdentifier(), 2523 modifiers.externalKeyword,
2524 _validateModifiersForConstructor(modifiers),
2525 modifiers.factoryKeyword,
2526 parseSimpleIdentifier(),
2527 getAndAdvance(),
2528 parseSimpleIdentifier(),
2457 parseFormalParameterList()); 2529 parseFormalParameterList());
2458 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 2530 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
2459 SimpleIdentifier methodName = parseSimpleIdentifier(); 2531 SimpleIdentifier methodName = parseSimpleIdentifier();
2460 FormalParameterList parameters = parseFormalParameterList(); 2532 FormalParameterList parameters = parseFormalParameterList();
2461 if (_matches(TokenType.COLON) || 2533 if (_matches(TokenType.COLON) ||
2462 modifiers.factoryKeyword != null || 2534 modifiers.factoryKeyword != null ||
2463 methodName.name == className) { 2535 methodName.name == className) {
2464 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, 2536 return _parseConstructor(
2537 commentAndMetadata,
2538 modifiers.externalKeyword,
2465 _validateModifiersForConstructor(modifiers), 2539 _validateModifiersForConstructor(modifiers),
2466 modifiers.factoryKeyword, methodName, null, null, parameters); 2540 modifiers.factoryKeyword,
2541 methodName,
2542 null,
2543 null,
2544 parameters);
2467 } 2545 }
2468 _validateModifiersForGetterOrSetterOrMethod(modifiers); 2546 _validateModifiersForGetterOrSetterOrMethod(modifiers);
2469 _validateFormalParameterList(parameters); 2547 _validateFormalParameterList(parameters);
2470 return _parseMethodDeclarationAfterParameters(commentAndMetadata, 2548 return _parseMethodDeclarationAfterParameters(
2471 modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, 2549 commentAndMetadata,
2472 null, parameters); 2550 modifiers.externalKeyword,
2551 modifiers.staticKeyword,
2552 null,
2553 methodName,
2554 null,
2555 parameters);
2473 } else if (_peek() 2556 } else if (_peek()
2474 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { 2557 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
2475 if (modifiers.constKeyword == null && 2558 if (modifiers.constKeyword == null &&
2476 modifiers.finalKeyword == null && 2559 modifiers.finalKeyword == null &&
2477 modifiers.varKeyword == null) { 2560 modifiers.varKeyword == null) {
2478 _reportErrorForCurrentToken( 2561 _reportErrorForCurrentToken(
2479 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE); 2562 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
2480 } 2563 }
2481 return _parseInitializedIdentifierList(commentAndMetadata, 2564 return _parseInitializedIdentifierList(commentAndMetadata,
2482 modifiers.staticKeyword, _validateModifiersForField(modifiers), null); 2565 modifiers.staticKeyword, _validateModifiersForField(modifiers), null);
(...skipping 24 matching lines...) Expand all
2507 _validateModifiersForOperator(modifiers); 2590 _validateModifiersForOperator(modifiers);
2508 return _parseOperator( 2591 return _parseOperator(
2509 commentAndMetadata, modifiers.externalKeyword, type); 2592 commentAndMetadata, modifiers.externalKeyword, type);
2510 } else if (!_matchesIdentifier()) { 2593 } else if (!_matchesIdentifier()) {
2511 if (_matches(TokenType.CLOSE_CURLY_BRACKET)) { 2594 if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
2512 // 2595 //
2513 // We appear to have found an incomplete declaration at the end of the 2596 // We appear to have found an incomplete declaration at the end of the
2514 // class. At this point it consists of a type name, so we'll treat it as 2597 // class. At this point it consists of a type name, so we'll treat it as
2515 // a field declaration with a missing field name and semicolon. 2598 // a field declaration with a missing field name and semicolon.
2516 // 2599 //
2517 return _parseInitializedIdentifierList(commentAndMetadata, 2600 return _parseInitializedIdentifierList(
2518 modifiers.staticKeyword, _validateModifiersForField(modifiers), 2601 commentAndMetadata,
2602 modifiers.staticKeyword,
2603 _validateModifiersForField(modifiers),
2519 type); 2604 type);
2520 } 2605 }
2521 if (_isOperator(_currentToken)) { 2606 if (_isOperator(_currentToken)) {
2522 // 2607 //
2523 // We appear to have found an operator declaration without the 2608 // We appear to have found an operator declaration without the
2524 // 'operator' keyword. 2609 // 'operator' keyword.
2525 // 2610 //
2526 _validateModifiersForOperator(modifiers); 2611 _validateModifiersForOperator(modifiers);
2527 return _parseOperator( 2612 return _parseOperator(
2528 commentAndMetadata, modifiers.externalKeyword, type); 2613 commentAndMetadata, modifiers.externalKeyword, type);
2529 } 2614 }
2530 // 2615 //
2531 // We appear to have found an incomplete declaration before another 2616 // We appear to have found an incomplete declaration before another
2532 // declaration. At this point it consists of a type name, so we'll treat 2617 // declaration. At this point it consists of a type name, so we'll treat
2533 // it as a field declaration with a missing field name and semicolon. 2618 // it as a field declaration with a missing field name and semicolon.
2534 // 2619 //
2535 _reportErrorForToken( 2620 _reportErrorForToken(
2536 ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken); 2621 ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
2537 try { 2622 try {
2538 _lockErrorListener(); 2623 _lockErrorListener();
2539 return _parseInitializedIdentifierList(commentAndMetadata, 2624 return _parseInitializedIdentifierList(
2540 modifiers.staticKeyword, _validateModifiersForField(modifiers), 2625 commentAndMetadata,
2626 modifiers.staticKeyword,
2627 _validateModifiersForField(modifiers),
2541 type); 2628 type);
2542 } finally { 2629 } finally {
2543 _unlockErrorListener(); 2630 _unlockErrorListener();
2544 } 2631 }
2545 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 2632 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
2546 SimpleIdentifier methodName = parseSimpleIdentifier(); 2633 SimpleIdentifier methodName = parseSimpleIdentifier();
2547 FormalParameterList parameters = parseFormalParameterList(); 2634 FormalParameterList parameters = parseFormalParameterList();
2548 if (methodName.name == className) { 2635 if (methodName.name == className) {
2549 _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type); 2636 _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type);
2550 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, 2637 return _parseConstructor(
2638 commentAndMetadata,
2639 modifiers.externalKeyword,
2551 _validateModifiersForConstructor(modifiers), 2640 _validateModifiersForConstructor(modifiers),
2552 modifiers.factoryKeyword, methodName, null, null, parameters); 2641 modifiers.factoryKeyword,
2642 methodName,
2643 null,
2644 null,
2645 parameters);
2553 } 2646 }
2554 _validateModifiersForGetterOrSetterOrMethod(modifiers); 2647 _validateModifiersForGetterOrSetterOrMethod(modifiers);
2555 _validateFormalParameterList(parameters); 2648 _validateFormalParameterList(parameters);
2556 return _parseMethodDeclarationAfterParameters(commentAndMetadata, 2649 return _parseMethodDeclarationAfterParameters(
2557 modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, 2650 commentAndMetadata,
2558 null, parameters); 2651 modifiers.externalKeyword,
2652 modifiers.staticKeyword,
2653 type,
2654 methodName,
2655 null,
2656 parameters);
2559 } else if (parseGenericMethods && _tokenMatches(_peek(), TokenType.LT)) { 2657 } else if (parseGenericMethods && _tokenMatches(_peek(), TokenType.LT)) {
2560 return _parseMethodDeclarationAfterReturnType(commentAndMetadata, 2658 return _parseMethodDeclarationAfterReturnType(commentAndMetadata,
2561 modifiers.externalKeyword, modifiers.staticKeyword, type); 2659 modifiers.externalKeyword, modifiers.staticKeyword, type);
2562 } else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) { 2660 } else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) {
2563 // We have found "TypeName identifier {", and are guessing that this is a 2661 // We have found "TypeName identifier {", and are guessing that this is a
2564 // getter without the keyword 'get'. 2662 // getter without the keyword 'get'.
2565 _validateModifiersForGetterOrSetterOrMethod(modifiers); 2663 _validateModifiersForGetterOrSetterOrMethod(modifiers);
2566 _reportErrorForCurrentToken(ParserErrorCode.MISSING_GET); 2664 _reportErrorForCurrentToken(ParserErrorCode.MISSING_GET);
2567 _currentToken = _injectToken( 2665 _currentToken = _injectToken(
2568 new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset)); 2666 new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset));
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
3185 if (parseGenericMethods && _matches(TokenType.LT)) { 3283 if (parseGenericMethods && _matches(TokenType.LT)) {
3186 typeParameters = parseTypeParameterList(); 3284 typeParameters = parseTypeParameterList();
3187 } 3285 }
3188 if (_matches(TokenType.OPEN_PAREN)) { 3286 if (_matches(TokenType.OPEN_PAREN)) {
3189 FormalParameterList parameters = parseFormalParameterList(); 3287 FormalParameterList parameters = parseFormalParameterList();
3190 if (thisKeyword == null) { 3288 if (thisKeyword == null) {
3191 if (holder.keyword != null) { 3289 if (holder.keyword != null) {
3192 _reportErrorForToken( 3290 _reportErrorForToken(
3193 ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword); 3291 ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword);
3194 } 3292 }
3195 return new FunctionTypedFormalParameter(commentAndMetadata.comment, 3293 return new FunctionTypedFormalParameter(
3196 commentAndMetadata.metadata, holder.type, identifier, 3294 commentAndMetadata.comment,
3197 typeParameters, parameters); 3295 commentAndMetadata.metadata,
3296 holder.type,
3297 identifier,
3298 typeParameters,
3299 parameters);
3198 } else { 3300 } else {
3199 return new FieldFormalParameter(commentAndMetadata.comment, 3301 return new FieldFormalParameter(
3200 commentAndMetadata.metadata, holder.keyword, holder.type, 3302 commentAndMetadata.comment,
3201 thisKeyword, period, identifier, typeParameters, parameters); 3303 commentAndMetadata.metadata,
3304 holder.keyword,
3305 holder.type,
3306 thisKeyword,
3307 period,
3308 identifier,
3309 typeParameters,
3310 parameters);
3202 } 3311 }
3203 } else if (typeParameters != null) { 3312 } else if (typeParameters != null) {
3204 // TODO(brianwilkerson) Report an error. It looks like a function-typed 3313 // TODO(brianwilkerson) Report an error. It looks like a function-typed
3205 // parameter with no parameter list. 3314 // parameter with no parameter list.
3206 //_reportErrorForToken(ParserErrorCode.MISSING_PARAMETERS, typeParameters. endToken); 3315 //_reportErrorForToken(ParserErrorCode.MISSING_PARAMETERS, typeParameters. endToken);
3207 } 3316 }
3208 TypeName type = holder.type; 3317 TypeName type = holder.type;
3209 if (type != null) { 3318 if (type != null) {
3210 if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) { 3319 if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) {
3211 _reportErrorForToken( 3320 _reportErrorForToken(
3212 ParserErrorCode.VOID_PARAMETER, type.name.beginToken); 3321 ParserErrorCode.VOID_PARAMETER, type.name.beginToken);
3213 } else if (holder.keyword != null && 3322 } else if (holder.keyword != null &&
3214 _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) { 3323 _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
3215 _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword); 3324 _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword);
3216 } 3325 }
3217 } 3326 }
3218 if (thisKeyword != null) { 3327 if (thisKeyword != null) {
3219 // TODO(brianwilkerson) If there are type parameters but no parameters, 3328 // TODO(brianwilkerson) If there are type parameters but no parameters,
3220 // should we create a synthetic empty parameter list here so we can 3329 // should we create a synthetic empty parameter list here so we can
3221 // capture the type parameters? 3330 // capture the type parameters?
3222 return new FieldFormalParameter(commentAndMetadata.comment, 3331 return new FieldFormalParameter(
3223 commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, 3332 commentAndMetadata.comment,
3224 period, identifier, null, null); 3333 commentAndMetadata.metadata,
3334 holder.keyword,
3335 holder.type,
3336 thisKeyword,
3337 period,
3338 identifier,
3339 null,
3340 null);
3225 } 3341 }
3226 return new SimpleFormalParameter(commentAndMetadata.comment, 3342 return new SimpleFormalParameter(commentAndMetadata.comment,
3227 commentAndMetadata.metadata, holder.keyword, holder.type, identifier); 3343 commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
3228 } 3344 }
3229 3345
3230 /** 3346 /**
3231 * Parse a prefixed identifier. Return the prefixed identifier that was 3347 * Parse a prefixed identifier. Return the prefixed identifier that was
3232 * parsed. 3348 * parsed.
3233 * 3349 *
3234 * prefixedIdentifier ::= 3350 * prefixedIdentifier ::=
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
3501 } 3617 }
3502 return buffer.toString(); 3618 return buffer.toString();
3503 } 3619 }
3504 3620
3505 /** 3621 /**
3506 * Convert the given [method] declaration into the nearest valid top-level 3622 * Convert the given [method] declaration into the nearest valid top-level
3507 * function declaration (that is, the function declaration that most closely 3623 * function declaration (that is, the function declaration that most closely
3508 * captures the components of the given method declaration). 3624 * captures the components of the given method declaration).
3509 */ 3625 */
3510 FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) => 3626 FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) =>
3511 new FunctionDeclaration(method.documentationComment, method.metadata, 3627 new FunctionDeclaration(
3512 method.externalKeyword, method.returnType, method.propertyKeyword, 3628 method.documentationComment,
3513 method.name, new FunctionExpression( 3629 method.metadata,
3630 method.externalKeyword,
3631 method.returnType,
3632 method.propertyKeyword,
3633 method.name,
3634 new FunctionExpression(
3514 method.typeParameters, method.parameters, method.body)); 3635 method.typeParameters, method.parameters, method.body));
3515 3636
3516 /** 3637 /**
3517 * Return `true` if the current token could be the start of a compilation unit 3638 * Return `true` if the current token could be the start of a compilation unit
3518 * member. This method is used for recovery purposes to decide when to stop 3639 * member. This method is used for recovery purposes to decide when to stop
3519 * skipping tokens after finding an error while parsing a compilation unit 3640 * skipping tokens after finding an error while parsing a compilation unit
3520 * member. 3641 * member.
3521 */ 3642 */
3522 bool _couldBeStartOfCompilationUnitMember() { 3643 bool _couldBeStartOfCompilationUnitMember() {
3523 if ((_matchesKeyword(Keyword.IMPORT) || 3644 if ((_matchesKeyword(Keyword.IMPORT) ||
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
4186 } else if (expression is CascadeExpression) { 4307 } else if (expression is CascadeExpression) {
4187 _reportErrorForNode( 4308 _reportErrorForNode(
4188 ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression); 4309 ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression);
4189 } else if (expression is ThrowExpression) { 4310 } else if (expression is ThrowExpression) {
4190 _reportErrorForNode( 4311 _reportErrorForNode(
4191 ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression); 4312 ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression);
4192 } else if (expression is RethrowExpression) { 4313 } else if (expression is RethrowExpression) {
4193 _reportErrorForNode( 4314 _reportErrorForNode(
4194 ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression); 4315 ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression);
4195 } 4316 }
4317 Token comma;
4318 Expression message;
4319 if (enableAssertMessage && _matches(TokenType.COMMA)) {
Brian Wilkerson 2015/09/02 15:49:16 An alternative would be to always parse the messag
Paul Berry 2015/09/02 17:20:03 I like this idea. I'll rework the CL.
4320 comma = getAndAdvance();
4321 message = parseExpression2();
4322 }
4196 Token rightParen = _expect(TokenType.CLOSE_PAREN); 4323 Token rightParen = _expect(TokenType.CLOSE_PAREN);
4197 Token semicolon = _expect(TokenType.SEMICOLON); 4324 Token semicolon = _expect(TokenType.SEMICOLON);
4198 return new AssertStatement( 4325 return new AssertStatement(
4199 keyword, leftParen, expression, rightParen, semicolon); 4326 keyword, leftParen, expression, rightParen, semicolon,
4327 comma: comma, message: message);
4200 } 4328 }
4201 4329
4202 /** 4330 /**
4203 * Parse an assignable expression. The [primaryAllowed] is `true` if the 4331 * Parse an assignable expression. The [primaryAllowed] is `true` if the
4204 * expression is allowed to be a primary without any assignable selector. 4332 * expression is allowed to be a primary without any assignable selector.
4205 * Return the assignable expression that was parsed. 4333 * Return the assignable expression that was parsed.
4206 * 4334 *
4207 * assignableExpression ::= 4335 * assignableExpression ::=
4208 * primary (arguments* assignableSelector)+ 4336 * primary (arguments* assignableSelector)+
4209 * | 'super' unconditionalAssignableSelector 4337 * | 'super' unconditionalAssignableSelector
4210 * | identifier 4338 * | identifier
4211 */ 4339 */
4212 Expression _parseAssignableExpression(bool primaryAllowed) { 4340 Expression _parseAssignableExpression(bool primaryAllowed) {
4213 if (_matchesKeyword(Keyword.SUPER)) { 4341 if (_matchesKeyword(Keyword.SUPER)) {
4214 return _parseAssignableSelector( 4342 return _parseAssignableSelector(
4215 new SuperExpression(getAndAdvance()), false, allowConditional: false); 4343 new SuperExpression(getAndAdvance()), false,
4344 allowConditional: false);
4216 } 4345 }
4217 // 4346 //
4218 // A primary expression can start with an identifier. We resolve the 4347 // A primary expression can start with an identifier. We resolve the
4219 // ambiguity by determining whether the primary consists of anything other 4348 // ambiguity by determining whether the primary consists of anything other
4220 // than an identifier and/or is followed by an assignableSelector. 4349 // than an identifier and/or is followed by an assignableSelector.
4221 // 4350 //
4222 Expression expression = _parsePrimaryExpression(); 4351 Expression expression = _parsePrimaryExpression();
4223 bool isOptional = primaryAllowed || expression is SimpleIdentifier; 4352 bool isOptional = primaryAllowed || expression is SimpleIdentifier;
4224 while (true) { 4353 while (true) {
4225 while (_isLikelyParameterList()) { 4354 while (_isLikelyParameterList()) {
4226 TypeArgumentList typeArguments = null; 4355 TypeArgumentList typeArguments = null;
4227 if (_matches(TokenType.LT)) { 4356 if (_matches(TokenType.LT)) {
4228 typeArguments = parseTypeArgumentList(); 4357 typeArguments = parseTypeArgumentList();
4229 } 4358 }
4230 ArgumentList argumentList = parseArgumentList(); 4359 ArgumentList argumentList = parseArgumentList();
4231 if (expression is SimpleIdentifier) { 4360 if (expression is SimpleIdentifier) {
4232 expression = new MethodInvocation(null, null, 4361 expression = new MethodInvocation(null, null,
4233 expression as SimpleIdentifier, typeArguments, argumentList); 4362 expression as SimpleIdentifier, typeArguments, argumentList);
4234 } else if (expression is PrefixedIdentifier) { 4363 } else if (expression is PrefixedIdentifier) {
4235 PrefixedIdentifier identifier = expression as PrefixedIdentifier; 4364 PrefixedIdentifier identifier = expression as PrefixedIdentifier;
4236 expression = new MethodInvocation(identifier.prefix, 4365 expression = new MethodInvocation(
4237 identifier.period, identifier.identifier, typeArguments, 4366 identifier.prefix,
4367 identifier.period,
4368 identifier.identifier,
4369 typeArguments,
4238 argumentList); 4370 argumentList);
4239 } else if (expression is PropertyAccess) { 4371 } else if (expression is PropertyAccess) {
4240 PropertyAccess access = expression as PropertyAccess; 4372 PropertyAccess access = expression as PropertyAccess;
4241 expression = new MethodInvocation(access.target, access.operator, 4373 expression = new MethodInvocation(access.target, access.operator,
4242 access.propertyName, typeArguments, argumentList); 4374 access.propertyName, typeArguments, argumentList);
4243 } else { 4375 } else {
4244 expression = new FunctionExpressionInvocation( 4376 expression = new FunctionExpressionInvocation(
4245 expression, typeArguments, argumentList); 4377 expression, typeArguments, argumentList);
4246 } 4378 }
4247 if (!primaryAllowed) { 4379 if (!primaryAllowed) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
4462 if (!identical(selector, expression)) { 4594 if (!identical(selector, expression)) {
4463 expression = selector; 4595 expression = selector;
4464 progress = true; 4596 progress = true;
4465 while (_isLikelyParameterList()) { 4597 while (_isLikelyParameterList()) {
4466 TypeArgumentList typeArguments = null; 4598 TypeArgumentList typeArguments = null;
4467 if (_matches(TokenType.LT)) { 4599 if (_matches(TokenType.LT)) {
4468 typeArguments = parseTypeArgumentList(); 4600 typeArguments = parseTypeArgumentList();
4469 } 4601 }
4470 if (expression is PropertyAccess) { 4602 if (expression is PropertyAccess) {
4471 PropertyAccess propertyAccess = expression as PropertyAccess; 4603 PropertyAccess propertyAccess = expression as PropertyAccess;
4472 expression = new MethodInvocation(propertyAccess.target, 4604 expression = new MethodInvocation(
4473 propertyAccess.operator, propertyAccess.propertyName, 4605 propertyAccess.target,
4474 typeArguments, parseArgumentList()); 4606 propertyAccess.operator,
4607 propertyAccess.propertyName,
4608 typeArguments,
4609 parseArgumentList());
4475 } else { 4610 } else {
4476 expression = new FunctionExpressionInvocation( 4611 expression = new FunctionExpressionInvocation(
4477 expression, typeArguments, parseArgumentList()); 4612 expression, typeArguments, parseArgumentList());
4478 } 4613 }
4479 } 4614 }
4480 } 4615 }
4481 } 4616 }
4482 if (_currentToken.type.isAssignmentOperator) { 4617 if (_currentToken.type.isAssignmentOperator) {
4483 Token operator = getAndAdvance(); 4618 Token operator = getAndAdvance();
4484 _ensureAssignable(expression); 4619 _ensureAssignable(expression);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
4593 if (_matches(TokenType.OPEN_CURLY_BRACKET)) { 4728 if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
4594 leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET); 4729 leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
4595 members = _parseClassMembers(className, _getEndToken(leftBracket)); 4730 members = _parseClassMembers(className, _getEndToken(leftBracket));
4596 rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET); 4731 rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
4597 } else { 4732 } else {
4598 leftBracket = _createSyntheticToken(TokenType.OPEN_CURLY_BRACKET); 4733 leftBracket = _createSyntheticToken(TokenType.OPEN_CURLY_BRACKET);
4599 rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET); 4734 rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
4600 _reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY); 4735 _reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY);
4601 } 4736 }
4602 ClassDeclaration classDeclaration = new ClassDeclaration( 4737 ClassDeclaration classDeclaration = new ClassDeclaration(
4603 commentAndMetadata.comment, commentAndMetadata.metadata, 4738 commentAndMetadata.comment,
4604 abstractKeyword, keyword, name, typeParameters, extendsClause, 4739 commentAndMetadata.metadata,
4605 withClause, implementsClause, leftBracket, members, rightBracket); 4740 abstractKeyword,
4741 keyword,
4742 name,
4743 typeParameters,
4744 extendsClause,
4745 withClause,
4746 implementsClause,
4747 leftBracket,
4748 members,
4749 rightBracket);
4606 classDeclaration.nativeClause = nativeClause; 4750 classDeclaration.nativeClause = nativeClause;
4607 return classDeclaration; 4751 return classDeclaration;
4608 } 4752 }
4609 4753
4610 /** 4754 /**
4611 * Parse a list of class members. The [className] is the name of the class 4755 * Parse a list of class members. The [className] is the name of the class
4612 * whose members are being parsed. The [closingBracket] is the closing bracket 4756 * whose members are being parsed. The [closingBracket] is the closing bracket
4613 * for the class, or `null` if the closing bracket is missing. Return the list 4757 * for the class, or `null` if the closing bracket is missing. Return the list
4614 * of class members that were parsed. 4758 * of class members that were parsed.
4615 * 4759 *
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
4685 ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]); 4829 ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
4686 Token leftBracket = getAndAdvance(); 4830 Token leftBracket = getAndAdvance();
4687 _parseClassMembers(className.name, _getEndToken(leftBracket)); 4831 _parseClassMembers(className.name, _getEndToken(leftBracket));
4688 _expect(TokenType.CLOSE_CURLY_BRACKET); 4832 _expect(TokenType.CLOSE_CURLY_BRACKET);
4689 } else { 4833 } else {
4690 _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, 4834 _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN,
4691 _currentToken.previous, [TokenType.SEMICOLON.lexeme]); 4835 _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
4692 } 4836 }
4693 semicolon = _createSyntheticToken(TokenType.SEMICOLON); 4837 semicolon = _createSyntheticToken(TokenType.SEMICOLON);
4694 } 4838 }
4695 return new ClassTypeAlias(commentAndMetadata.comment, 4839 return new ClassTypeAlias(
4696 commentAndMetadata.metadata, classKeyword, className, typeParameters, 4840 commentAndMetadata.comment,
4697 equals, abstractKeyword, superclass, withClause, implementsClause, 4841 commentAndMetadata.metadata,
4842 classKeyword,
4843 className,
4844 typeParameters,
4845 equals,
4846 abstractKeyword,
4847 superclass,
4848 withClause,
4849 implementsClause,
4698 semicolon); 4850 semicolon);
4699 } 4851 }
4700 4852
4701 /** 4853 /**
4702 * Parse a list of combinators in a directive. Return the combinators that 4854 * Parse a list of combinators in a directive. Return the combinators that
4703 * were parsed. 4855 * were parsed.
4704 * 4856 *
4705 * combinator ::= 4857 * combinator ::=
4706 * 'show' identifier (',' identifier)* 4858 * 'show' identifier (',' identifier)*
4707 * | 'hide' identifier (',' identifier)* 4859 * | 'hide' identifier (',' identifier)*
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
4917 _tokenMatchesIdentifier(_peek())) { 5069 _tokenMatchesIdentifier(_peek())) {
4918 _validateModifiersForTopLevelFunction(modifiers); 5070 _validateModifiersForTopLevelFunction(modifiers);
4919 return _parseFunctionDeclaration( 5071 return _parseFunctionDeclaration(
4920 commentAndMetadata, modifiers.externalKeyword, returnType); 5072 commentAndMetadata, modifiers.externalKeyword, returnType);
4921 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) { 5073 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
4922 _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken); 5074 _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
4923 return _convertToFunctionDeclaration(_parseOperator( 5075 return _convertToFunctionDeclaration(_parseOperator(
4924 commentAndMetadata, modifiers.externalKeyword, returnType)); 5076 commentAndMetadata, modifiers.externalKeyword, returnType));
4925 } else if (_matchesIdentifier() && 5077 } else if (_matchesIdentifier() &&
4926 _peek().matchesAny([ 5078 _peek().matchesAny([
4927 TokenType.OPEN_PAREN, 5079 TokenType.OPEN_PAREN,
4928 TokenType.OPEN_CURLY_BRACKET, 5080 TokenType.OPEN_CURLY_BRACKET,
4929 TokenType.FUNCTION 5081 TokenType.FUNCTION
4930 ])) { 5082 ])) {
4931 _validateModifiersForTopLevelFunction(modifiers); 5083 _validateModifiersForTopLevelFunction(modifiers);
4932 return _parseFunctionDeclaration( 5084 return _parseFunctionDeclaration(
4933 commentAndMetadata, modifiers.externalKeyword, returnType); 5085 commentAndMetadata, modifiers.externalKeyword, returnType);
4934 } else { 5086 } else {
4935 // 5087 //
4936 // We have found an error of some kind. Try to recover. 5088 // We have found an error of some kind. Try to recover.
4937 // 5089 //
4938 if (_matchesIdentifier()) { 5090 if (_matchesIdentifier()) {
4939 if (_peek().matchesAny( 5091 if (_peek().matchesAny(
4940 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { 5092 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
4941 // 5093 //
4942 // We appear to have a variable declaration with a type of "void". 5094 // We appear to have a variable declaration with a type of "void".
4943 // 5095 //
4944 _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType); 5096 _reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
4945 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5097 return new TopLevelVariableDeclaration(
5098 commentAndMetadata.comment,
4946 commentAndMetadata.metadata, 5099 commentAndMetadata.metadata,
4947 _parseVariableDeclarationListAfterType(null, 5100 _parseVariableDeclarationListAfterType(null,
4948 _validateModifiersForTopLevelVariable(modifiers), null), 5101 _validateModifiersForTopLevelVariable(modifiers), null),
4949 _expect(TokenType.SEMICOLON)); 5102 _expect(TokenType.SEMICOLON));
4950 } 5103 }
4951 } 5104 }
4952 _reportErrorForToken( 5105 _reportErrorForToken(
4953 ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken); 5106 ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
4954 return null; 5107 return null;
4955 } 5108 }
(...skipping 15 matching lines...) Expand all
4971 keyword = modifiers.constKeyword; 5124 keyword = modifiers.constKeyword;
4972 } 5125 }
4973 if (keyword != null) { 5126 if (keyword != null) {
4974 // 5127 //
4975 // We appear to have found an incomplete top-level variable declaration. 5128 // We appear to have found an incomplete top-level variable declaration.
4976 // 5129 //
4977 _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER); 5130 _reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
4978 List<VariableDeclaration> variables = new List<VariableDeclaration>(); 5131 List<VariableDeclaration> variables = new List<VariableDeclaration>();
4979 variables.add( 5132 variables.add(
4980 new VariableDeclaration(_createSyntheticIdentifier(), null, null)); 5133 new VariableDeclaration(_createSyntheticIdentifier(), null, null));
4981 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5134 return new TopLevelVariableDeclaration(
5135 commentAndMetadata.comment,
4982 commentAndMetadata.metadata, 5136 commentAndMetadata.metadata,
4983 new VariableDeclarationList(null, null, keyword, null, variables), 5137 new VariableDeclarationList(null, null, keyword, null, variables),
4984 _expectSemicolon()); 5138 _expectSemicolon());
4985 } 5139 }
4986 _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken); 5140 _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
4987 return null; 5141 return null;
4988 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 5142 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
4989 _validateModifiersForTopLevelFunction(modifiers); 5143 _validateModifiersForTopLevelFunction(modifiers);
4990 return _parseFunctionDeclaration( 5144 return _parseFunctionDeclaration(
4991 commentAndMetadata, modifiers.externalKeyword, null); 5145 commentAndMetadata, modifiers.externalKeyword, null);
4992 } else if (_peek() 5146 } else if (_peek()
4993 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { 5147 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
4994 if (modifiers.constKeyword == null && 5148 if (modifiers.constKeyword == null &&
4995 modifiers.finalKeyword == null && 5149 modifiers.finalKeyword == null &&
4996 modifiers.varKeyword == null) { 5150 modifiers.varKeyword == null) {
4997 _reportErrorForCurrentToken( 5151 _reportErrorForCurrentToken(
4998 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE); 5152 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
4999 } 5153 }
5000 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5154 return new TopLevelVariableDeclaration(
5001 commentAndMetadata.metadata, _parseVariableDeclarationListAfterType( 5155 commentAndMetadata.comment,
5156 commentAndMetadata.metadata,
5157 _parseVariableDeclarationListAfterType(
5002 null, _validateModifiersForTopLevelVariable(modifiers), null), 5158 null, _validateModifiersForTopLevelVariable(modifiers), null),
5003 _expect(TokenType.SEMICOLON)); 5159 _expect(TokenType.SEMICOLON));
5004 } 5160 }
5005 TypeName returnType = parseReturnType(); 5161 TypeName returnType = parseReturnType();
5006 if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && 5162 if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
5007 _tokenMatchesIdentifier(_peek())) { 5163 _tokenMatchesIdentifier(_peek())) {
5008 _validateModifiersForTopLevelFunction(modifiers); 5164 _validateModifiersForTopLevelFunction(modifiers);
5009 return _parseFunctionDeclaration( 5165 return _parseFunctionDeclaration(
5010 commentAndMetadata, modifiers.externalKeyword, returnType); 5166 commentAndMetadata, modifiers.externalKeyword, returnType);
5011 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) { 5167 } else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
5012 _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken); 5168 _reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
5013 return _convertToFunctionDeclaration(_parseOperator( 5169 return _convertToFunctionDeclaration(_parseOperator(
5014 commentAndMetadata, modifiers.externalKeyword, returnType)); 5170 commentAndMetadata, modifiers.externalKeyword, returnType));
5015 } else if (_matches(TokenType.AT)) { 5171 } else if (_matches(TokenType.AT)) {
5016 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5172 return new TopLevelVariableDeclaration(
5017 commentAndMetadata.metadata, _parseVariableDeclarationListAfterType( 5173 commentAndMetadata.comment,
5018 null, _validateModifiersForTopLevelVariable(modifiers), 5174 commentAndMetadata.metadata,
5019 returnType), _expect(TokenType.SEMICOLON)); 5175 _parseVariableDeclarationListAfterType(null,
5176 _validateModifiersForTopLevelVariable(modifiers), returnType),
5177 _expect(TokenType.SEMICOLON));
5020 } else if (!_matchesIdentifier()) { 5178 } else if (!_matchesIdentifier()) {
5021 // TODO(brianwilkerson) Generalize this error. We could also be parsing a 5179 // TODO(brianwilkerson) Generalize this error. We could also be parsing a
5022 // top-level variable at this point. 5180 // top-level variable at this point.
5023 _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken); 5181 _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
5024 Token semicolon; 5182 Token semicolon;
5025 if (_matches(TokenType.SEMICOLON)) { 5183 if (_matches(TokenType.SEMICOLON)) {
5026 semicolon = getAndAdvance(); 5184 semicolon = getAndAdvance();
5027 } else { 5185 } else {
5028 semicolon = _createSyntheticToken(TokenType.SEMICOLON); 5186 semicolon = _createSyntheticToken(TokenType.SEMICOLON);
5029 } 5187 }
5030 List<VariableDeclaration> variables = new List<VariableDeclaration>(); 5188 List<VariableDeclaration> variables = new List<VariableDeclaration>();
5031 variables.add( 5189 variables.add(
5032 new VariableDeclaration(_createSyntheticIdentifier(), null, null)); 5190 new VariableDeclaration(_createSyntheticIdentifier(), null, null));
5033 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5191 return new TopLevelVariableDeclaration(
5192 commentAndMetadata.comment,
5034 commentAndMetadata.metadata, 5193 commentAndMetadata.metadata,
5035 new VariableDeclarationList(null, null, null, returnType, variables), 5194 new VariableDeclarationList(null, null, null, returnType, variables),
5036 semicolon); 5195 semicolon);
5037 } 5196 }
5038 if (_peek().matchesAny([ 5197 if (_peek().matchesAny([
5039 TokenType.OPEN_PAREN, 5198 TokenType.OPEN_PAREN,
5040 TokenType.FUNCTION, 5199 TokenType.FUNCTION,
5041 TokenType.OPEN_CURLY_BRACKET 5200 TokenType.OPEN_CURLY_BRACKET
5042 ])) { 5201 ])) {
5043 _validateModifiersForTopLevelFunction(modifiers); 5202 _validateModifiersForTopLevelFunction(modifiers);
5044 return _parseFunctionDeclaration( 5203 return _parseFunctionDeclaration(
5045 commentAndMetadata, modifiers.externalKeyword, returnType); 5204 commentAndMetadata, modifiers.externalKeyword, returnType);
5046 } 5205 }
5047 return new TopLevelVariableDeclaration(commentAndMetadata.comment, 5206 return new TopLevelVariableDeclaration(
5048 commentAndMetadata.metadata, _parseVariableDeclarationListAfterType( 5207 commentAndMetadata.comment,
5208 commentAndMetadata.metadata,
5209 _parseVariableDeclarationListAfterType(
5049 null, _validateModifiersForTopLevelVariable(modifiers), returnType), 5210 null, _validateModifiersForTopLevelVariable(modifiers), returnType),
5050 _expect(TokenType.SEMICOLON)); 5211 _expect(TokenType.SEMICOLON));
5051 } 5212 }
5052 5213
5053 /** 5214 /**
5054 * Parse a const expression. Return the const expression that was parsed. 5215 * Parse a const expression. Return the const expression that was parsed.
5055 * 5216 *
5056 * constExpression ::= 5217 * constExpression ::=
5057 * instanceCreationExpression 5218 * instanceCreationExpression
5058 * | listLiteral 5219 * | listLiteral
5059 * | mapLiteral 5220 * | mapLiteral
5060 */ 5221 */
5061 Expression _parseConstExpression() { 5222 Expression _parseConstExpression() {
5062 Token keyword = _expectKeyword(Keyword.CONST); 5223 Token keyword = _expectKeyword(Keyword.CONST);
5063 if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) { 5224 if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
5064 return _parseListLiteral(keyword, null); 5225 return _parseListLiteral(keyword, null);
5065 } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) { 5226 } else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
5066 return _parseMapLiteral(keyword, null); 5227 return _parseMapLiteral(keyword, null);
5067 } else if (_matches(TokenType.LT)) { 5228 } else if (_matches(TokenType.LT)) {
5068 return _parseListOrMapLiteral(keyword); 5229 return _parseListOrMapLiteral(keyword);
5069 } 5230 }
5070 return _parseInstanceCreationExpression(keyword); 5231 return _parseInstanceCreationExpression(keyword);
5071 } 5232 }
5072 5233
5073 ConstructorDeclaration _parseConstructor( 5234 ConstructorDeclaration _parseConstructor(
5074 CommentAndMetadata commentAndMetadata, Token externalKeyword, 5235 CommentAndMetadata commentAndMetadata,
5075 Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType, 5236 Token externalKeyword,
5076 Token period, SimpleIdentifier name, FormalParameterList parameters) { 5237 Token constKeyword,
5238 Token factoryKeyword,
5239 SimpleIdentifier returnType,
5240 Token period,
5241 SimpleIdentifier name,
5242 FormalParameterList parameters) {
5077 bool bodyAllowed = externalKeyword == null; 5243 bool bodyAllowed = externalKeyword == null;
5078 Token separator = null; 5244 Token separator = null;
5079 List<ConstructorInitializer> initializers = null; 5245 List<ConstructorInitializer> initializers = null;
5080 if (_matches(TokenType.COLON)) { 5246 if (_matches(TokenType.COLON)) {
5081 separator = getAndAdvance(); 5247 separator = getAndAdvance();
5082 initializers = new List<ConstructorInitializer>(); 5248 initializers = new List<ConstructorInitializer>();
5083 do { 5249 do {
5084 if (_matchesKeyword(Keyword.THIS)) { 5250 if (_matchesKeyword(Keyword.THIS)) {
5085 if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 5251 if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
5086 bodyAllowed = false; 5252 bodyAllowed = false;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
5134 } else { 5300 } else {
5135 if (constKeyword != null) { 5301 if (constKeyword != null) {
5136 _reportErrorForNode( 5302 _reportErrorForNode(
5137 ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body); 5303 ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body);
5138 } else if (!bodyAllowed) { 5304 } else if (!bodyAllowed) {
5139 _reportErrorForNode( 5305 _reportErrorForNode(
5140 ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body); 5306 ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body);
5141 } 5307 }
5142 } 5308 }
5143 } 5309 }
5144 return new ConstructorDeclaration(commentAndMetadata.comment, 5310 return new ConstructorDeclaration(
5145 commentAndMetadata.metadata, externalKeyword, constKeyword, 5311 commentAndMetadata.comment,
5146 factoryKeyword, returnType, period, name, parameters, separator, 5312 commentAndMetadata.metadata,
5147 initializers, redirectedConstructor, body); 5313 externalKeyword,
5314 constKeyword,
5315 factoryKeyword,
5316 returnType,
5317 period,
5318 name,
5319 parameters,
5320 separator,
5321 initializers,
5322 redirectedConstructor,
5323 body);
5148 } 5324 }
5149 5325
5150 /** 5326 /**
5151 * Parse a field initializer within a constructor. Return the field 5327 * Parse a field initializer within a constructor. Return the field
5152 * initializer that was parsed. 5328 * initializer that was parsed.
5153 * 5329 *
5154 * fieldInitializer: 5330 * fieldInitializer:
5155 * ('this' '.')? identifier '=' conditionalExpression cascadeSection* 5331 * ('this' '.')? identifier '=' conditionalExpression cascadeSection*
5156 */ 5332 */
5157 ConstructorFieldInitializer _parseConstructorFieldInitializer() { 5333 ConstructorFieldInitializer _parseConstructorFieldInitializer() {
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
5405 break; 5581 break;
5406 } 5582 }
5407 constants.add(_parseEnumConstantDeclaration()); 5583 constants.add(_parseEnumConstantDeclaration());
5408 } 5584 }
5409 rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET); 5585 rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
5410 } else { 5586 } else {
5411 leftBracket = _createSyntheticToken(TokenType.OPEN_CURLY_BRACKET); 5587 leftBracket = _createSyntheticToken(TokenType.OPEN_CURLY_BRACKET);
5412 rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET); 5588 rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
5413 _reportErrorForCurrentToken(ParserErrorCode.MISSING_ENUM_BODY); 5589 _reportErrorForCurrentToken(ParserErrorCode.MISSING_ENUM_BODY);
5414 } 5590 }
5415 return new EnumDeclaration(commentAndMetadata.comment, 5591 return new EnumDeclaration(
5416 commentAndMetadata.metadata, keyword, name, leftBracket, constants, 5592 commentAndMetadata.comment,
5593 commentAndMetadata.metadata,
5594 keyword,
5595 name,
5596 leftBracket,
5597 constants,
5417 rightBracket); 5598 rightBracket);
5418 } 5599 }
5419 5600
5420 /** 5601 /**
5421 * Parse an equality expression. Return the equality expression that was 5602 * Parse an equality expression. Return the equality expression that was
5422 * parsed. 5603 * parsed.
5423 * 5604 *
5424 * equalityExpression ::= 5605 * equalityExpression ::=
5425 * relationalExpression (equalityOperator relationalExpression)? 5606 * relationalExpression (equalityOperator relationalExpression)?
5426 * | 'super' equalityOperator relationalExpression 5607 * | 'super' equalityOperator relationalExpression
(...skipping 25 matching lines...) Expand all
5452 * associated with the directive. Return the export directive that was parsed. 5633 * associated with the directive. Return the export directive that was parsed.
5453 * 5634 *
5454 * exportDirective ::= 5635 * exportDirective ::=
5455 * metadata 'export' stringLiteral combinator*';' 5636 * metadata 'export' stringLiteral combinator*';'
5456 */ 5637 */
5457 ExportDirective _parseExportDirective(CommentAndMetadata commentAndMetadata) { 5638 ExportDirective _parseExportDirective(CommentAndMetadata commentAndMetadata) {
5458 Token exportKeyword = _expectKeyword(Keyword.EXPORT); 5639 Token exportKeyword = _expectKeyword(Keyword.EXPORT);
5459 StringLiteral libraryUri = _parseUri(); 5640 StringLiteral libraryUri = _parseUri();
5460 List<Combinator> combinators = _parseCombinators(); 5641 List<Combinator> combinators = _parseCombinators();
5461 Token semicolon = _expectSemicolon(); 5642 Token semicolon = _expectSemicolon();
5462 return new ExportDirective(commentAndMetadata.comment, 5643 return new ExportDirective(
5463 commentAndMetadata.metadata, exportKeyword, libraryUri, combinators, 5644 commentAndMetadata.comment,
5645 commentAndMetadata.metadata,
5646 exportKeyword,
5647 libraryUri,
5648 combinators,
5464 semicolon); 5649 semicolon);
5465 } 5650 }
5466 5651
5467 /** 5652 /**
5468 * Parse a list of expressions. Return the expression that was parsed. 5653 * Parse a list of expressions. Return the expression that was parsed.
5469 * 5654 *
5470 * expressionList ::= 5655 * expressionList ::=
5471 * expression (',' expression)* 5656 * expression (',' expression)*
5472 */ 5657 */
5473 List<Expression> _parseExpressionList() { 5658 List<Expression> _parseExpressionList() {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
5633 // has content 5818 // has content
5634 } 5819 }
5635 identifier = variable.name; 5820 identifier = variable.name;
5636 } 5821 }
5637 } 5822 }
5638 Token inKeyword = getAndAdvance(); 5823 Token inKeyword = getAndAdvance();
5639 Expression iterator = parseExpression2(); 5824 Expression iterator = parseExpression2();
5640 Token rightParenthesis = _expect(TokenType.CLOSE_PAREN); 5825 Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
5641 Statement body = parseStatement2(); 5826 Statement body = parseStatement2();
5642 if (loopVariable == null) { 5827 if (loopVariable == null) {
5643 return new ForEachStatement.withReference(awaitKeyword, forKeyword, 5828 return new ForEachStatement.withReference(
5644 leftParenthesis, identifier, inKeyword, iterator, 5829 awaitKeyword,
5645 rightParenthesis, body); 5830 forKeyword,
5831 leftParenthesis,
5832 identifier,
5833 inKeyword,
5834 iterator,
5835 rightParenthesis,
5836 body);
5646 } 5837 }
5647 return new ForEachStatement.withDeclaration(awaitKeyword, forKeyword, 5838 return new ForEachStatement.withDeclaration(
5648 leftParenthesis, loopVariable, inKeyword, iterator, 5839 awaitKeyword,
5649 rightParenthesis, body); 5840 forKeyword,
5841 leftParenthesis,
5842 loopVariable,
5843 inKeyword,
5844 iterator,
5845 rightParenthesis,
5846 body);
5650 } 5847 }
5651 } 5848 }
5652 if (awaitKeyword != null) { 5849 if (awaitKeyword != null) {
5653 _reportErrorForToken( 5850 _reportErrorForToken(
5654 ParserErrorCode.INVALID_AWAIT_IN_FOR, awaitKeyword); 5851 ParserErrorCode.INVALID_AWAIT_IN_FOR, awaitKeyword);
5655 } 5852 }
5656 Token leftSeparator = _expect(TokenType.SEMICOLON); 5853 Token leftSeparator = _expect(TokenType.SEMICOLON);
5657 Expression condition = null; 5854 Expression condition = null;
5658 if (!_matches(TokenType.SEMICOLON)) { 5855 if (!_matches(TokenType.SEMICOLON)) {
5659 condition = parseExpression2(); 5856 condition = parseExpression2();
5660 } 5857 }
5661 Token rightSeparator = _expect(TokenType.SEMICOLON); 5858 Token rightSeparator = _expect(TokenType.SEMICOLON);
5662 List<Expression> updaters = null; 5859 List<Expression> updaters = null;
5663 if (!_matches(TokenType.CLOSE_PAREN)) { 5860 if (!_matches(TokenType.CLOSE_PAREN)) {
5664 updaters = _parseExpressionList(); 5861 updaters = _parseExpressionList();
5665 } 5862 }
5666 Token rightParenthesis = _expect(TokenType.CLOSE_PAREN); 5863 Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
5667 Statement body = parseStatement2(); 5864 Statement body = parseStatement2();
5668 return new ForStatement(forKeyword, leftParenthesis, variableList, 5865 return new ForStatement(
5669 initialization, leftSeparator, condition, rightSeparator, updaters, 5866 forKeyword,
5670 rightParenthesis, body); 5867 leftParenthesis,
5868 variableList,
5869 initialization,
5870 leftSeparator,
5871 condition,
5872 rightSeparator,
5873 updaters,
5874 rightParenthesis,
5875 body);
5671 } finally { 5876 } finally {
5672 _inLoop = wasInLoop; 5877 _inLoop = wasInLoop;
5673 } 5878 }
5674 } 5879 }
5675 5880
5676 /** 5881 /**
5677 * Parse a function body. The [mayBeEmpty] is `true` if the function body is 5882 * Parse a function body. The [mayBeEmpty] is `true` if the function body is
5678 * allowed to be empty. The [emptyErrorCode] is the error code to report if 5883 * allowed to be empty. The [emptyErrorCode] is the error code to report if
5679 * function body expected, but not found. The [inExpression] is `true` if the 5884 * function body expected, but not found. The [inExpression] is `true` if the
5680 * function body is being parsed as part of an expression and therefore does 5885 * function body is being parsed as part of an expression and therefore does
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
5790 * not external. The [returnType] is the return type, or `null` if there is no 5995 * not external. The [returnType] is the return type, or `null` if there is no
5791 * return type. The [isStatement] is `true` if the function declaration is 5996 * return type. The [isStatement] is `true` if the function declaration is
5792 * being parsed as a statement. Return the function declaration that was 5997 * being parsed as a statement. Return the function declaration that was
5793 * parsed. 5998 * parsed.
5794 * 5999 *
5795 * functionDeclaration ::= 6000 * functionDeclaration ::=
5796 * functionSignature functionBody 6001 * functionSignature functionBody
5797 * | returnType? getOrSet identifier formalParameterList functionBody 6002 * | returnType? getOrSet identifier formalParameterList functionBody
5798 */ 6003 */
5799 FunctionDeclaration _parseFunctionDeclaration( 6004 FunctionDeclaration _parseFunctionDeclaration(
5800 CommentAndMetadata commentAndMetadata, Token externalKeyword, 6005 CommentAndMetadata commentAndMetadata,
6006 Token externalKeyword,
5801 TypeName returnType) { 6007 TypeName returnType) {
5802 Token keyword = null; 6008 Token keyword = null;
5803 bool isGetter = false; 6009 bool isGetter = false;
5804 if (_matchesKeyword(Keyword.GET) && 6010 if (_matchesKeyword(Keyword.GET) &&
5805 !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 6011 !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
5806 keyword = getAndAdvance(); 6012 keyword = getAndAdvance();
5807 isGetter = true; 6013 isGetter = true;
5808 } else if (_matchesKeyword(Keyword.SET) && 6014 } else if (_matchesKeyword(Keyword.SET) &&
5809 !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { 6015 !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
5810 keyword = getAndAdvance(); 6016 keyword = getAndAdvance();
5811 } 6017 }
5812 SimpleIdentifier name = parseSimpleIdentifier(); 6018 SimpleIdentifier name = parseSimpleIdentifier();
5813 TypeParameterList typeParameters = null; 6019 TypeParameterList typeParameters = null;
5814 if (parseGenericMethods && _matches(TokenType.LT)) { 6020 if (parseGenericMethods && _matches(TokenType.LT)) {
5815 typeParameters = parseTypeParameterList(); 6021 typeParameters = parseTypeParameterList();
5816 } 6022 }
5817 FormalParameterList parameters = null; 6023 FormalParameterList parameters = null;
5818 if (!isGetter) { 6024 if (!isGetter) {
5819 if (_matches(TokenType.OPEN_PAREN)) { 6025 if (_matches(TokenType.OPEN_PAREN)) {
5820 parameters = parseFormalParameterList(); 6026 parameters = parseFormalParameterList();
5821 _validateFormalParameterList(parameters); 6027 _validateFormalParameterList(parameters);
5822 } else { 6028 } else {
5823 _reportErrorForCurrentToken( 6029 _reportErrorForCurrentToken(
5824 ParserErrorCode.MISSING_FUNCTION_PARAMETERS); 6030 ParserErrorCode.MISSING_FUNCTION_PARAMETERS);
5825 parameters = new FormalParameterList( 6031 parameters = new FormalParameterList(
5826 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, 6032 _createSyntheticToken(TokenType.OPEN_PAREN),
6033 null,
6034 null,
6035 null,
5827 _createSyntheticToken(TokenType.CLOSE_PAREN)); 6036 _createSyntheticToken(TokenType.CLOSE_PAREN));
5828 } 6037 }
5829 } else if (_matches(TokenType.OPEN_PAREN)) { 6038 } else if (_matches(TokenType.OPEN_PAREN)) {
5830 _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS); 6039 _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS);
5831 parseFormalParameterList(); 6040 parseFormalParameterList();
5832 } 6041 }
5833 FunctionBody body; 6042 FunctionBody body;
5834 if (externalKeyword == null) { 6043 if (externalKeyword == null) {
5835 body = _parseFunctionBody( 6044 body = _parseFunctionBody(
5836 false, ParserErrorCode.MISSING_FUNCTION_BODY, false); 6045 false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
5837 } else { 6046 } else {
5838 body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON)); 6047 body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
5839 } 6048 }
5840 // if (!isStatement && matches(TokenType.SEMICOLON)) { 6049 // if (!isStatement && matches(TokenType.SEMICOLON)) {
5841 // // TODO(brianwilkerson) Improve this error message. 6050 // // TODO(brianwilkerson) Improve this error message.
5842 // reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme ()); 6051 // reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme ());
5843 // advance(); 6052 // advance();
5844 // } 6053 // }
5845 return new FunctionDeclaration(commentAndMetadata.comment, 6054 return new FunctionDeclaration(
5846 commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, 6055 commentAndMetadata.comment,
6056 commentAndMetadata.metadata,
6057 externalKeyword,
6058 returnType,
6059 keyword,
6060 name,
5847 new FunctionExpression(typeParameters, parameters, body)); 6061 new FunctionExpression(typeParameters, parameters, body));
5848 } 6062 }
5849 6063
5850 /** 6064 /**
5851 * Parse a function declaration statement. Return the function declaration 6065 * Parse a function declaration statement. Return the function declaration
5852 * statement that was parsed. 6066 * statement that was parsed.
5853 * 6067 *
5854 * functionDeclarationStatement ::= 6068 * functionDeclarationStatement ::=
5855 * functionSignature functionBody 6069 * functionSignature functionBody
5856 */ 6070 */
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5905 returnType = parseReturnType(); 6119 returnType = parseReturnType();
5906 } 6120 }
5907 SimpleIdentifier name = parseSimpleIdentifier(); 6121 SimpleIdentifier name = parseSimpleIdentifier();
5908 TypeParameterList typeParameters = null; 6122 TypeParameterList typeParameters = null;
5909 if (_matches(TokenType.LT)) { 6123 if (_matches(TokenType.LT)) {
5910 typeParameters = parseTypeParameterList(); 6124 typeParameters = parseTypeParameterList();
5911 } 6125 }
5912 if (_matches(TokenType.SEMICOLON) || _matches(TokenType.EOF)) { 6126 if (_matches(TokenType.SEMICOLON) || _matches(TokenType.EOF)) {
5913 _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS); 6127 _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
5914 FormalParameterList parameters = new FormalParameterList( 6128 FormalParameterList parameters = new FormalParameterList(
5915 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, 6129 _createSyntheticToken(TokenType.OPEN_PAREN),
6130 null,
6131 null,
6132 null,
5916 _createSyntheticToken(TokenType.CLOSE_PAREN)); 6133 _createSyntheticToken(TokenType.CLOSE_PAREN));
5917 Token semicolon = _expect(TokenType.SEMICOLON); 6134 Token semicolon = _expect(TokenType.SEMICOLON);
5918 return new FunctionTypeAlias(commentAndMetadata.comment, 6135 return new FunctionTypeAlias(
5919 commentAndMetadata.metadata, keyword, returnType, name, 6136 commentAndMetadata.comment,
5920 typeParameters, parameters, semicolon); 6137 commentAndMetadata.metadata,
6138 keyword,
6139 returnType,
6140 name,
6141 typeParameters,
6142 parameters,
6143 semicolon);
5921 } else if (!_matches(TokenType.OPEN_PAREN)) { 6144 } else if (!_matches(TokenType.OPEN_PAREN)) {
5922 _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS); 6145 _reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
5923 // TODO(brianwilkerson) Recover from this error. At the very least we 6146 // TODO(brianwilkerson) Recover from this error. At the very least we
5924 // should skip to the start of the next valid compilation unit member, 6147 // should skip to the start of the next valid compilation unit member,
5925 // allowing for the possibility of finding the typedef parameters before 6148 // allowing for the possibility of finding the typedef parameters before
5926 // that point. 6149 // that point.
5927 return new FunctionTypeAlias(commentAndMetadata.comment, 6150 return new FunctionTypeAlias(
5928 commentAndMetadata.metadata, keyword, returnType, name, 6151 commentAndMetadata.comment,
5929 typeParameters, new FormalParameterList( 6152 commentAndMetadata.metadata,
5930 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, 6153 keyword,
5931 _createSyntheticToken(TokenType.CLOSE_PAREN)), 6154 returnType,
6155 name,
6156 typeParameters,
6157 new FormalParameterList(_createSyntheticToken(TokenType.OPEN_PAREN),
6158 null, null, null, _createSyntheticToken(TokenType.CLOSE_PAREN)),
5932 _createSyntheticToken(TokenType.SEMICOLON)); 6159 _createSyntheticToken(TokenType.SEMICOLON));
5933 } 6160 }
5934 FormalParameterList parameters = parseFormalParameterList(); 6161 FormalParameterList parameters = parseFormalParameterList();
5935 _validateFormalParameterList(parameters); 6162 _validateFormalParameterList(parameters);
5936 Token semicolon = _expect(TokenType.SEMICOLON); 6163 Token semicolon = _expect(TokenType.SEMICOLON);
5937 return new FunctionTypeAlias(commentAndMetadata.comment, 6164 return new FunctionTypeAlias(
5938 commentAndMetadata.metadata, keyword, returnType, name, typeParameters, 6165 commentAndMetadata.comment,
5939 parameters, semicolon); 6166 commentAndMetadata.metadata,
6167 keyword,
6168 returnType,
6169 name,
6170 typeParameters,
6171 parameters,
6172 semicolon);
5940 } 6173 }
5941 6174
5942 /** 6175 /**
5943 * Parse a getter. The [commentAndMetadata] is the documentation comment and 6176 * Parse a getter. The [commentAndMetadata] is the documentation comment and
5944 * metadata to be associated with the declaration. The externalKeyword] is the 6177 * metadata to be associated with the declaration. The externalKeyword] is the
5945 * 'external' token. The staticKeyword] is the static keyword, or `null` if 6178 * 'external' token. The staticKeyword] is the static keyword, or `null` if
5946 * the getter is not static. The [returnType] the return type that has already 6179 * the getter is not static. The [returnType] the return type that has already
5947 * been parsed, or `null` if there was no return type. Return the getter that 6180 * been parsed, or `null` if there was no return type. Return the getter that
5948 * was parsed. 6181 * was parsed.
5949 * 6182 *
5950 * getter ::= 6183 * getter ::=
5951 * getterSignature functionBody? 6184 * getterSignature functionBody?
5952 * 6185 *
5953 * getterSignature ::= 6186 * getterSignature ::=
5954 * 'external'? 'static'? returnType? 'get' identifier 6187 * 'external'? 'static'? returnType? 'get' identifier
5955 */ 6188 */
5956 MethodDeclaration _parseGetter(CommentAndMetadata commentAndMetadata, 6189 MethodDeclaration _parseGetter(CommentAndMetadata commentAndMetadata,
5957 Token externalKeyword, Token staticKeyword, TypeName returnType) { 6190 Token externalKeyword, Token staticKeyword, TypeName returnType) {
5958 Token propertyKeyword = _expectKeyword(Keyword.GET); 6191 Token propertyKeyword = _expectKeyword(Keyword.GET);
5959 SimpleIdentifier name = parseSimpleIdentifier(); 6192 SimpleIdentifier name = parseSimpleIdentifier();
5960 if (_matches(TokenType.OPEN_PAREN) && 6193 if (_matches(TokenType.OPEN_PAREN) &&
5961 _tokenMatches(_peek(), TokenType.CLOSE_PAREN)) { 6194 _tokenMatches(_peek(), TokenType.CLOSE_PAREN)) {
5962 _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS); 6195 _reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS);
5963 _advance(); 6196 _advance();
5964 _advance(); 6197 _advance();
5965 } 6198 }
5966 FunctionBody body = _parseFunctionBody( 6199 FunctionBody body = _parseFunctionBody(
5967 externalKeyword != null || staticKeyword == null, 6200 externalKeyword != null || staticKeyword == null,
5968 ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false); 6201 ParserErrorCode.STATIC_GETTER_WITHOUT_BODY,
6202 false);
5969 if (externalKeyword != null && body is! EmptyFunctionBody) { 6203 if (externalKeyword != null && body is! EmptyFunctionBody) {
5970 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY); 6204 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY);
5971 } 6205 }
5972 return new MethodDeclaration(commentAndMetadata.comment, 6206 return new MethodDeclaration(
5973 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, 6207 commentAndMetadata.comment,
5974 propertyKeyword, null, name, null, null, body); 6208 commentAndMetadata.metadata,
6209 externalKeyword,
6210 staticKeyword,
6211 returnType,
6212 propertyKeyword,
6213 null,
6214 name,
6215 null,
6216 null,
6217 body);
5975 } 6218 }
5976 6219
5977 /** 6220 /**
5978 * Parse a list of identifiers. Return the list of identifiers that were 6221 * Parse a list of identifiers. Return the list of identifiers that were
5979 * parsed. 6222 * parsed.
5980 * 6223 *
5981 * identifierList ::= 6224 * identifierList ::=
5982 * identifier (',' identifier)* 6225 * identifier (',' identifier)*
5983 */ 6226 */
5984 List<SimpleIdentifier> _parseIdentifierList() { 6227 List<SimpleIdentifier> _parseIdentifierList() {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
6046 ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken]); 6289 ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken]);
6047 _advance(); 6290 _advance();
6048 if (_matchesKeyword(Keyword.AS)) { 6291 if (_matchesKeyword(Keyword.AS)) {
6049 asToken = getAndAdvance(); 6292 asToken = getAndAdvance();
6050 prefix = parseSimpleIdentifier(); 6293 prefix = parseSimpleIdentifier();
6051 } 6294 }
6052 } 6295 }
6053 } 6296 }
6054 List<Combinator> combinators = _parseCombinators(); 6297 List<Combinator> combinators = _parseCombinators();
6055 Token semicolon = _expectSemicolon(); 6298 Token semicolon = _expectSemicolon();
6056 return new ImportDirective(commentAndMetadata.comment, 6299 return new ImportDirective(
6057 commentAndMetadata.metadata, importKeyword, libraryUri, deferredToken, 6300 commentAndMetadata.comment,
6058 asToken, prefix, combinators, semicolon); 6301 commentAndMetadata.metadata,
6302 importKeyword,
6303 libraryUri,
6304 deferredToken,
6305 asToken,
6306 prefix,
6307 combinators,
6308 semicolon);
6059 } 6309 }
6060 6310
6061 /** 6311 /**
6062 * Parse a list of initialized identifiers. The [commentAndMetadata] is the 6312 * Parse a list of initialized identifiers. The [commentAndMetadata] is the
6063 * documentation comment and metadata to be associated with the declaration. 6313 * documentation comment and metadata to be associated with the declaration.
6064 * The [staticKeyword] is the static keyword, or `null` if the getter is not 6314 * The [staticKeyword] is the static keyword, or `null` if the getter is not
6065 * static. The [keyword] is the token representing the 'final', 'const' or 6315 * static. The [keyword] is the token representing the 'final', 'const' or
6066 * 'var' keyword, or `null` if there is no keyword. The [type] is the type 6316 * 'var' keyword, or `null` if there is no keyword. The [type] is the type
6067 * that has already been parsed, or `null` if 'var' was provided. Return the 6317 * that has already been parsed, or `null` if 'var' was provided. Return the
6068 * getter that was parsed. 6318 * getter that was parsed.
6069 * 6319 *
6070 * ?? ::= 6320 * ?? ::=
6071 * 'static'? ('var' | type) initializedIdentifierList ';' 6321 * 'static'? ('var' | type) initializedIdentifierList ';'
6072 * | 'final' type? initializedIdentifierList ';' 6322 * | 'final' type? initializedIdentifierList ';'
6073 * 6323 *
6074 * initializedIdentifierList ::= 6324 * initializedIdentifierList ::=
6075 * initializedIdentifier (',' initializedIdentifier)* 6325 * initializedIdentifier (',' initializedIdentifier)*
6076 * 6326 *
6077 * initializedIdentifier ::= 6327 * initializedIdentifier ::=
6078 * identifier ('=' expression)? 6328 * identifier ('=' expression)?
6079 */ 6329 */
6080 FieldDeclaration _parseInitializedIdentifierList( 6330 FieldDeclaration _parseInitializedIdentifierList(
6081 CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword, 6331 CommentAndMetadata commentAndMetadata,
6332 Token staticKeyword,
6333 Token keyword,
6082 TypeName type) { 6334 TypeName type) {
6083 VariableDeclarationList fieldList = 6335 VariableDeclarationList fieldList =
6084 _parseVariableDeclarationListAfterType(null, keyword, type); 6336 _parseVariableDeclarationListAfterType(null, keyword, type);
6085 return new FieldDeclaration(commentAndMetadata.comment, 6337 return new FieldDeclaration(
6086 commentAndMetadata.metadata, staticKeyword, fieldList, 6338 commentAndMetadata.comment,
6339 commentAndMetadata.metadata,
6340 staticKeyword,
6341 fieldList,
6087 _expect(TokenType.SEMICOLON)); 6342 _expect(TokenType.SEMICOLON));
6088 } 6343 }
6089 6344
6090 /** 6345 /**
6091 * Parse an instance creation expression. The [keyword] is the 'new' or 6346 * Parse an instance creation expression. The [keyword] is the 'new' or
6092 * 'const' keyword that introduces the expression. Return the instance 6347 * 'const' keyword that introduces the expression. Return the instance
6093 * creation expression that was parsed. 6348 * creation expression that was parsed.
6094 * 6349 *
6095 * instanceCreationExpression ::= 6350 * instanceCreationExpression ::=
6096 * ('new' | 'const') type ('.' identifier)? argumentList 6351 * ('new' | 'const') type ('.' identifier)? argumentList
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
6154 * no type arguments. Return the list literal that was parsed. 6409 * no type arguments. Return the list literal that was parsed.
6155 * 6410 *
6156 * listLiteral ::= 6411 * listLiteral ::=
6157 * 'const'? typeArguments? '[' (expressionList ','?)? ']' 6412 * 'const'? typeArguments? '[' (expressionList ','?)? ']'
6158 */ 6413 */
6159 ListLiteral _parseListLiteral( 6414 ListLiteral _parseListLiteral(
6160 Token modifier, TypeArgumentList typeArguments) { 6415 Token modifier, TypeArgumentList typeArguments) {
6161 // may be empty list literal 6416 // may be empty list literal
6162 if (_matches(TokenType.INDEX)) { 6417 if (_matches(TokenType.INDEX)) {
6163 BeginToken leftBracket = _createToken( 6418 BeginToken leftBracket = _createToken(
6164 _currentToken, TokenType.OPEN_SQUARE_BRACKET, isBegin: true); 6419 _currentToken, TokenType.OPEN_SQUARE_BRACKET,
6420 isBegin: true);
6165 Token rightBracket = 6421 Token rightBracket =
6166 new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1); 6422 new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1);
6167 leftBracket.endToken = rightBracket; 6423 leftBracket.endToken = rightBracket;
6168 rightBracket.setNext(_currentToken.next); 6424 rightBracket.setNext(_currentToken.next);
6169 leftBracket.setNext(rightBracket); 6425 leftBracket.setNext(rightBracket);
6170 _currentToken.previous.setNext(leftBracket); 6426 _currentToken.previous.setNext(leftBracket);
6171 _currentToken = _currentToken.next; 6427 _currentToken = _currentToken.next;
6172 return new ListLiteral( 6428 return new ListLiteral(
6173 modifier, typeArguments, leftBracket, null, rightBracket); 6429 modifier, typeArguments, leftBracket, null, rightBracket);
6174 } 6430 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
6212 if (_matches(TokenType.LT)) { 6468 if (_matches(TokenType.LT)) {
6213 typeArguments = parseTypeArgumentList(); 6469 typeArguments = parseTypeArgumentList();
6214 } 6470 }
6215 if (_matches(TokenType.OPEN_CURLY_BRACKET)) { 6471 if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
6216 return _parseMapLiteral(modifier, typeArguments); 6472 return _parseMapLiteral(modifier, typeArguments);
6217 } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) || 6473 } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) ||
6218 _matches(TokenType.INDEX)) { 6474 _matches(TokenType.INDEX)) {
6219 return _parseListLiteral(modifier, typeArguments); 6475 return _parseListLiteral(modifier, typeArguments);
6220 } 6476 }
6221 _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL); 6477 _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL);
6222 return new ListLiteral(modifier, typeArguments, 6478 return new ListLiteral(
6223 _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET), null, 6479 modifier,
6480 typeArguments,
6481 _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET),
6482 null,
6224 _createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET)); 6483 _createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
6225 } 6484 }
6226 6485
6227 /** 6486 /**
6228 * Parse a logical and expression. Return the logical and expression that was 6487 * Parse a logical and expression. Return the logical and expression that was
6229 * parsed. 6488 * parsed.
6230 * 6489 *
6231 * logicalAndExpression ::= 6490 * logicalAndExpression ::=
6232 * equalityExpression ('&&' equalityExpression)* 6491 * equalityExpression ('&&' equalityExpression)*
6233 */ 6492 */
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
6283 * static keyword, or `null` if the getter is not static. The [returnType] is 6542 * static keyword, or `null` if the getter is not static. The [returnType] is
6284 * the return type of the method. The [name] is the name of the method. The 6543 * the return type of the method. The [name] is the name of the method. The
6285 * [parameters] is the parameters to the method. Return the method declaration 6544 * [parameters] is the parameters to the method. Return the method declaration
6286 * that was parsed. 6545 * that was parsed.
6287 * 6546 *
6288 * functionDeclaration ::= 6547 * functionDeclaration ::=
6289 * ('external' 'static'?)? functionSignature functionBody 6548 * ('external' 'static'?)? functionSignature functionBody
6290 * | 'external'? functionSignature ';' 6549 * | 'external'? functionSignature ';'
6291 */ 6550 */
6292 MethodDeclaration _parseMethodDeclarationAfterParameters( 6551 MethodDeclaration _parseMethodDeclarationAfterParameters(
6293 CommentAndMetadata commentAndMetadata, Token externalKeyword, 6552 CommentAndMetadata commentAndMetadata,
6294 Token staticKeyword, TypeName returnType, SimpleIdentifier name, 6553 Token externalKeyword,
6295 TypeParameterList typeParameters, FormalParameterList parameters) { 6554 Token staticKeyword,
6555 TypeName returnType,
6556 SimpleIdentifier name,
6557 TypeParameterList typeParameters,
6558 FormalParameterList parameters) {
6296 FunctionBody body = _parseFunctionBody( 6559 FunctionBody body = _parseFunctionBody(
6297 externalKeyword != null || staticKeyword == null, 6560 externalKeyword != null || staticKeyword == null,
6298 ParserErrorCode.MISSING_FUNCTION_BODY, false); 6561 ParserErrorCode.MISSING_FUNCTION_BODY,
6562 false);
6299 if (externalKeyword != null) { 6563 if (externalKeyword != null) {
6300 if (body is! EmptyFunctionBody) { 6564 if (body is! EmptyFunctionBody) {
6301 _reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body); 6565 _reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body);
6302 } 6566 }
6303 } else if (staticKeyword != null) { 6567 } else if (staticKeyword != null) {
6304 if (body is EmptyFunctionBody && _parseFunctionBodies) { 6568 if (body is EmptyFunctionBody && _parseFunctionBodies) {
6305 _reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body); 6569 _reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body);
6306 } 6570 }
6307 } 6571 }
6308 return new MethodDeclaration(commentAndMetadata.comment, 6572 return new MethodDeclaration(
6309 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, 6573 commentAndMetadata.comment,
6310 null, null, name, typeParameters, parameters, body); 6574 commentAndMetadata.metadata,
6575 externalKeyword,
6576 staticKeyword,
6577 returnType,
6578 null,
6579 null,
6580 name,
6581 typeParameters,
6582 parameters,
6583 body);
6311 } 6584 }
6312 6585
6313 /** 6586 /**
6314 * Parse a method declaration. The [commentAndMetadata] is the documentation 6587 * Parse a method declaration. The [commentAndMetadata] is the documentation
6315 * comment and metadata to be associated with the declaration. The 6588 * comment and metadata to be associated with the declaration. The
6316 * [externalKeyword] is the 'external' token. The [staticKeyword] is the 6589 * [externalKeyword] is the 'external' token. The [staticKeyword] is the
6317 * static keyword, or `null` if the getter is not static. The [returnType] is 6590 * static keyword, or `null` if the getter is not static. The [returnType] is
6318 * the return type of the method. Return the method declaration that was 6591 * the return type of the method. Return the method declaration that was
6319 * parsed. 6592 * parsed.
6320 * 6593 *
6321 * functionDeclaration ::= 6594 * functionDeclaration ::=
6322 * 'external'? 'static'? functionSignature functionBody 6595 * 'external'? 'static'? functionSignature functionBody
6323 * | 'external'? functionSignature ';' 6596 * | 'external'? functionSignature ';'
6324 */ 6597 */
6325 MethodDeclaration _parseMethodDeclarationAfterReturnType( 6598 MethodDeclaration _parseMethodDeclarationAfterReturnType(
6326 CommentAndMetadata commentAndMetadata, Token externalKeyword, 6599 CommentAndMetadata commentAndMetadata,
6327 Token staticKeyword, TypeName returnType) { 6600 Token externalKeyword,
6601 Token staticKeyword,
6602 TypeName returnType) {
6328 SimpleIdentifier methodName = parseSimpleIdentifier(); 6603 SimpleIdentifier methodName = parseSimpleIdentifier();
6329 TypeParameterList typeParameters = null; 6604 TypeParameterList typeParameters = null;
6330 if (parseGenericMethods && _matches(TokenType.LT)) { 6605 if (parseGenericMethods && _matches(TokenType.LT)) {
6331 typeParameters = parseTypeParameterList(); 6606 typeParameters = parseTypeParameterList();
6332 } 6607 }
6333 FormalParameterList parameters; 6608 FormalParameterList parameters;
6334 if (!_matches(TokenType.OPEN_PAREN) && 6609 if (!_matches(TokenType.OPEN_PAREN) &&
6335 (_matches(TokenType.OPEN_CURLY_BRACKET) || 6610 (_matches(TokenType.OPEN_CURLY_BRACKET) ||
6336 _matches(TokenType.FUNCTION))) { 6611 _matches(TokenType.FUNCTION))) {
6337 _reportErrorForToken( 6612 _reportErrorForToken(
6338 ParserErrorCode.MISSING_METHOD_PARAMETERS, _currentToken.previous); 6613 ParserErrorCode.MISSING_METHOD_PARAMETERS, _currentToken.previous);
6339 parameters = new FormalParameterList( 6614 parameters = new FormalParameterList(
6340 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, 6615 _createSyntheticToken(TokenType.OPEN_PAREN),
6616 null,
6617 null,
6618 null,
6341 _createSyntheticToken(TokenType.CLOSE_PAREN)); 6619 _createSyntheticToken(TokenType.CLOSE_PAREN));
6342 } else { 6620 } else {
6343 parameters = parseFormalParameterList(); 6621 parameters = parseFormalParameterList();
6344 } 6622 }
6345 _validateFormalParameterList(parameters); 6623 _validateFormalParameterList(parameters);
6346 return _parseMethodDeclarationAfterParameters(commentAndMetadata, 6624 return _parseMethodDeclarationAfterParameters(
6347 externalKeyword, staticKeyword, returnType, methodName, typeParameters, 6625 commentAndMetadata,
6626 externalKeyword,
6627 staticKeyword,
6628 returnType,
6629 methodName,
6630 typeParameters,
6348 parameters); 6631 parameters);
6349 } 6632 }
6350 6633
6351 /** 6634 /**
6352 * Parse the modifiers preceding a declaration. This method allows the 6635 * Parse the modifiers preceding a declaration. This method allows the
6353 * modifiers to appear in any order but does generate errors for duplicated 6636 * modifiers to appear in any order but does generate errors for duplicated
6354 * modifiers. Checks for other problems, such as having the modifiers appear 6637 * modifiers. Checks for other problems, such as having the modifiers appear
6355 * in the wrong order or specifying both 'const' and 'final', are reported in 6638 * in the wrong order or specifying both 'const' and 'final', are reported in
6356 * one of the methods whose name is prefixed with `validateModifiersFor`. 6639 * one of the methods whose name is prefixed with `validateModifiersFor`.
6357 * Return the modifiers that were parsed. 6640 * Return the modifiers that were parsed.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
6545 return _parseTryStatement(); 6828 return _parseTryStatement();
6546 } else if (keyword == Keyword.WHILE) { 6829 } else if (keyword == Keyword.WHILE) {
6547 return _parseWhileStatement(); 6830 return _parseWhileStatement();
6548 } else if (keyword == Keyword.VAR || keyword == Keyword.FINAL) { 6831 } else if (keyword == Keyword.VAR || keyword == Keyword.FINAL) {
6549 return _parseVariableDeclarationStatementAfterMetadata( 6832 return _parseVariableDeclarationStatementAfterMetadata(
6550 commentAndMetadata); 6833 commentAndMetadata);
6551 } else if (keyword == Keyword.VOID) { 6834 } else if (keyword == Keyword.VOID) {
6552 TypeName returnType = parseReturnType(); 6835 TypeName returnType = parseReturnType();
6553 if (_matchesIdentifier() && 6836 if (_matchesIdentifier() &&
6554 _peek().matchesAny([ 6837 _peek().matchesAny([
6555 TokenType.OPEN_PAREN, 6838 TokenType.OPEN_PAREN,
6556 TokenType.OPEN_CURLY_BRACKET, 6839 TokenType.OPEN_CURLY_BRACKET,
6557 TokenType.FUNCTION 6840 TokenType.FUNCTION
6558 ])) { 6841 ])) {
6559 return _parseFunctionDeclarationStatementAfterReturnType( 6842 return _parseFunctionDeclarationStatementAfterReturnType(
6560 commentAndMetadata, returnType); 6843 commentAndMetadata, returnType);
6561 } else { 6844 } else {
6562 // 6845 //
6563 // We have found an error of some kind. Try to recover. 6846 // We have found an error of some kind. Try to recover.
6564 // 6847 //
6565 if (_matchesIdentifier()) { 6848 if (_matchesIdentifier()) {
6566 if (_peek().matchesAny( 6849 if (_peek().matchesAny(
6567 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { 6850 [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
6568 // 6851 //
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
6692 _advance(); 6975 _advance();
6693 } 6976 }
6694 } 6977 }
6695 FormalParameterList parameters = parseFormalParameterList(); 6978 FormalParameterList parameters = parseFormalParameterList();
6696 _validateFormalParameterList(parameters); 6979 _validateFormalParameterList(parameters);
6697 FunctionBody body = 6980 FunctionBody body =
6698 _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false); 6981 _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
6699 if (externalKeyword != null && body is! EmptyFunctionBody) { 6982 if (externalKeyword != null && body is! EmptyFunctionBody) {
6700 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY); 6983 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY);
6701 } 6984 }
6702 return new MethodDeclaration(commentAndMetadata.comment, 6985 return new MethodDeclaration(
6703 commentAndMetadata.metadata, externalKeyword, null, returnType, null, 6986 commentAndMetadata.comment,
6704 operatorKeyword, name, null, parameters, body); 6987 commentAndMetadata.metadata,
6988 externalKeyword,
6989 null,
6990 returnType,
6991 null,
6992 operatorKeyword,
6993 name,
6994 null,
6995 parameters,
6996 body);
6705 } 6997 }
6706 6998
6707 /** 6999 /**
6708 * Parse a return type if one is given, otherwise return `null` without 7000 * Parse a return type if one is given, otherwise return `null` without
6709 * advancing. Return the return type that was parsed. 7001 * advancing. Return the return type that was parsed.
6710 */ 7002 */
6711 TypeName _parseOptionalReturnType() { 7003 TypeName _parseOptionalReturnType() {
6712 if (_matchesKeyword(Keyword.VOID)) { 7004 if (_matchesKeyword(Keyword.VOID)) {
6713 return parseReturnType(); 7005 return parseReturnType();
6714 } else if (_matchesIdentifier() && 7006 } else if (_matchesIdentifier() &&
(...skipping 24 matching lines...) Expand all
6739 * partOfDirective ::= 7031 * partOfDirective ::=
6740 * metadata 'part' 'of' identifier ';' 7032 * metadata 'part' 'of' identifier ';'
6741 */ 7033 */
6742 Directive _parsePartDirective(CommentAndMetadata commentAndMetadata) { 7034 Directive _parsePartDirective(CommentAndMetadata commentAndMetadata) {
6743 Token partKeyword = _expectKeyword(Keyword.PART); 7035 Token partKeyword = _expectKeyword(Keyword.PART);
6744 if (_matchesString(_OF)) { 7036 if (_matchesString(_OF)) {
6745 Token ofKeyword = getAndAdvance(); 7037 Token ofKeyword = getAndAdvance();
6746 LibraryIdentifier libraryName = _parseLibraryName( 7038 LibraryIdentifier libraryName = _parseLibraryName(
6747 ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword); 7039 ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
6748 Token semicolon = _expect(TokenType.SEMICOLON); 7040 Token semicolon = _expect(TokenType.SEMICOLON);
6749 return new PartOfDirective(commentAndMetadata.comment, 7041 return new PartOfDirective(
6750 commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName, 7042 commentAndMetadata.comment,
7043 commentAndMetadata.metadata,
7044 partKeyword,
7045 ofKeyword,
7046 libraryName,
6751 semicolon); 7047 semicolon);
6752 } 7048 }
6753 StringLiteral partUri = _parseUri(); 7049 StringLiteral partUri = _parseUri();
6754 Token semicolon = _expect(TokenType.SEMICOLON); 7050 Token semicolon = _expect(TokenType.SEMICOLON);
6755 return new PartDirective(commentAndMetadata.comment, 7051 return new PartDirective(commentAndMetadata.comment,
6756 commentAndMetadata.metadata, partKeyword, partUri, semicolon); 7052 commentAndMetadata.metadata, partKeyword, partUri, semicolon);
6757 } 7053 }
6758 7054
6759 /** 7055 /**
6760 * Parse a postfix expression. Return the postfix expression that was parsed. 7056 * Parse a postfix expression. Return the postfix expression that was parsed.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
6829 * | mapLiteral 7125 * | mapLiteral
6830 * | listLiteral 7126 * | listLiteral
6831 */ 7127 */
6832 Expression _parsePrimaryExpression() { 7128 Expression _parsePrimaryExpression() {
6833 if (_matchesKeyword(Keyword.THIS)) { 7129 if (_matchesKeyword(Keyword.THIS)) {
6834 return new ThisExpression(getAndAdvance()); 7130 return new ThisExpression(getAndAdvance());
6835 } else if (_matchesKeyword(Keyword.SUPER)) { 7131 } else if (_matchesKeyword(Keyword.SUPER)) {
6836 // TODO(paulberry): verify with Gilad that "super" must be followed by 7132 // TODO(paulberry): verify with Gilad that "super" must be followed by
6837 // unconditionalAssignableSelector in this case. 7133 // unconditionalAssignableSelector in this case.
6838 return _parseAssignableSelector( 7134 return _parseAssignableSelector(
6839 new SuperExpression(getAndAdvance()), false, allowConditional: false); 7135 new SuperExpression(getAndAdvance()), false,
7136 allowConditional: false);
6840 } else if (_matchesKeyword(Keyword.NULL)) { 7137 } else if (_matchesKeyword(Keyword.NULL)) {
6841 return new NullLiteral(getAndAdvance()); 7138 return new NullLiteral(getAndAdvance());
6842 } else if (_matchesKeyword(Keyword.FALSE)) { 7139 } else if (_matchesKeyword(Keyword.FALSE)) {
6843 return new BooleanLiteral(getAndAdvance(), false); 7140 return new BooleanLiteral(getAndAdvance(), false);
6844 } else if (_matchesKeyword(Keyword.TRUE)) { 7141 } else if (_matchesKeyword(Keyword.TRUE)) {
6845 return new BooleanLiteral(getAndAdvance(), true); 7142 return new BooleanLiteral(getAndAdvance(), true);
6846 } else if (_matches(TokenType.DOUBLE)) { 7143 } else if (_matches(TokenType.DOUBLE)) {
6847 Token token = getAndAdvance(); 7144 Token token = getAndAdvance();
6848 double value = 0.0; 7145 double value = 0.0;
6849 try { 7146 try {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
7032 * 'external'? 'static'? returnType? 'set' identifier formalParameterL ist 7329 * 'external'? 'static'? returnType? 'set' identifier formalParameterL ist
7033 */ 7330 */
7034 MethodDeclaration _parseSetter(CommentAndMetadata commentAndMetadata, 7331 MethodDeclaration _parseSetter(CommentAndMetadata commentAndMetadata,
7035 Token externalKeyword, Token staticKeyword, TypeName returnType) { 7332 Token externalKeyword, Token staticKeyword, TypeName returnType) {
7036 Token propertyKeyword = _expectKeyword(Keyword.SET); 7333 Token propertyKeyword = _expectKeyword(Keyword.SET);
7037 SimpleIdentifier name = parseSimpleIdentifier(); 7334 SimpleIdentifier name = parseSimpleIdentifier();
7038 FormalParameterList parameters = parseFormalParameterList(); 7335 FormalParameterList parameters = parseFormalParameterList();
7039 _validateFormalParameterList(parameters); 7336 _validateFormalParameterList(parameters);
7040 FunctionBody body = _parseFunctionBody( 7337 FunctionBody body = _parseFunctionBody(
7041 externalKeyword != null || staticKeyword == null, 7338 externalKeyword != null || staticKeyword == null,
7042 ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false); 7339 ParserErrorCode.STATIC_SETTER_WITHOUT_BODY,
7340 false);
7043 if (externalKeyword != null && body is! EmptyFunctionBody) { 7341 if (externalKeyword != null && body is! EmptyFunctionBody) {
7044 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY); 7342 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY);
7045 } 7343 }
7046 return new MethodDeclaration(commentAndMetadata.comment, 7344 return new MethodDeclaration(
7047 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, 7345 commentAndMetadata.comment,
7048 propertyKeyword, null, name, null, parameters, body); 7346 commentAndMetadata.metadata,
7347 externalKeyword,
7348 staticKeyword,
7349 returnType,
7350 propertyKeyword,
7351 null,
7352 name,
7353 null,
7354 parameters,
7355 body);
7049 } 7356 }
7050 7357
7051 /** 7358 /**
7052 * Parse a shift expression. Return the shift expression that was parsed. 7359 * Parse a shift expression. Return the shift expression that was parsed.
7053 * 7360 *
7054 * shiftExpression ::= 7361 * shiftExpression ::=
7055 * additiveExpression (shiftOperator additiveExpression)* 7362 * additiveExpression (shiftOperator additiveExpression)*
7056 * | 'super' (shiftOperator additiveExpression)+ 7363 * | 'super' (shiftOperator additiveExpression)+
7057 */ 7364 */
7058 Expression _parseShiftExpression() { 7365 Expression _parseShiftExpression() {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
7188 while (!_matches(TokenType.EOF) && 7495 while (!_matches(TokenType.EOF) &&
7189 !_matches(TokenType.CLOSE_CURLY_BRACKET)) { 7496 !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
7190 List<Label> labels = new List<Label>(); 7497 List<Label> labels = new List<Label>();
7191 while ( 7498 while (
7192 _matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) { 7499 _matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
7193 SimpleIdentifier identifier = parseSimpleIdentifier(); 7500 SimpleIdentifier identifier = parseSimpleIdentifier();
7194 String label = identifier.token.lexeme; 7501 String label = identifier.token.lexeme;
7195 if (definedLabels.contains(label)) { 7502 if (definedLabels.contains(label)) {
7196 _reportErrorForToken( 7503 _reportErrorForToken(
7197 ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, 7504 ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
7198 identifier.token, [label]); 7505 identifier.token,
7506 [label]);
7199 } else { 7507 } else {
7200 definedLabels.add(label); 7508 definedLabels.add(label);
7201 } 7509 }
7202 Token colon = _expect(TokenType.COLON); 7510 Token colon = _expect(TokenType.COLON);
7203 labels.add(new Label(identifier, colon)); 7511 labels.add(new Label(identifier, colon));
7204 } 7512 }
7205 if (_matchesKeyword(Keyword.CASE)) { 7513 if (_matchesKeyword(Keyword.CASE)) {
7206 Token caseKeyword = getAndAdvance(); 7514 Token caseKeyword = getAndAdvance();
7207 Expression caseExpression = parseExpression2(); 7515 Expression caseExpression = parseExpression2();
7208 Token colon = _expect(TokenType.COLON); 7516 Token colon = _expect(TokenType.COLON);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
7346 catchKeyword = getAndAdvance(); 7654 catchKeyword = getAndAdvance();
7347 leftParenthesis = _expect(TokenType.OPEN_PAREN); 7655 leftParenthesis = _expect(TokenType.OPEN_PAREN);
7348 exceptionParameter = parseSimpleIdentifier(); 7656 exceptionParameter = parseSimpleIdentifier();
7349 if (_matches(TokenType.COMMA)) { 7657 if (_matches(TokenType.COMMA)) {
7350 comma = getAndAdvance(); 7658 comma = getAndAdvance();
7351 stackTraceParameter = parseSimpleIdentifier(); 7659 stackTraceParameter = parseSimpleIdentifier();
7352 } 7660 }
7353 rightParenthesis = _expect(TokenType.CLOSE_PAREN); 7661 rightParenthesis = _expect(TokenType.CLOSE_PAREN);
7354 } 7662 }
7355 Block catchBody = parseBlock(); 7663 Block catchBody = parseBlock();
7356 catchClauses.add(new CatchClause(onKeyword, exceptionType, catchKeyword, 7664 catchClauses.add(new CatchClause(
7357 leftParenthesis, exceptionParameter, comma, stackTraceParameter, 7665 onKeyword,
7358 rightParenthesis, catchBody)); 7666 exceptionType,
7667 catchKeyword,
7668 leftParenthesis,
7669 exceptionParameter,
7670 comma,
7671 stackTraceParameter,
7672 rightParenthesis,
7673 catchBody));
7359 } 7674 }
7360 Token finallyKeyword = null; 7675 Token finallyKeyword = null;
7361 if (_matchesKeyword(Keyword.FINALLY)) { 7676 if (_matchesKeyword(Keyword.FINALLY)) {
7362 finallyKeyword = getAndAdvance(); 7677 finallyKeyword = getAndAdvance();
7363 finallyClause = parseBlock(); 7678 finallyClause = parseBlock();
7364 } else { 7679 } else {
7365 if (catchClauses.isEmpty) { 7680 if (catchClauses.isEmpty) {
7366 _reportErrorForCurrentToken(ParserErrorCode.MISSING_CATCH_OR_FINALLY); 7681 _reportErrorForCurrentToken(ParserErrorCode.MISSING_CATCH_OR_FINALLY);
7367 } 7682 }
7368 } 7683 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
7461 // we cannot do the same for "++super" because "+super" is also not 7776 // we cannot do the same for "++super" because "+super" is also not
7462 // valid. 7777 // valid.
7463 // 7778 //
7464 if (operator.type == TokenType.MINUS_MINUS) { 7779 if (operator.type == TokenType.MINUS_MINUS) {
7465 Token firstOperator = _createToken(operator, TokenType.MINUS); 7780 Token firstOperator = _createToken(operator, TokenType.MINUS);
7466 Token secondOperator = 7781 Token secondOperator =
7467 new Token(TokenType.MINUS, operator.offset + 1); 7782 new Token(TokenType.MINUS, operator.offset + 1);
7468 secondOperator.setNext(_currentToken); 7783 secondOperator.setNext(_currentToken);
7469 firstOperator.setNext(secondOperator); 7784 firstOperator.setNext(secondOperator);
7470 operator.previous.setNext(firstOperator); 7785 operator.previous.setNext(firstOperator);
7471 return new PrefixExpression(firstOperator, new PrefixExpression( 7786 return new PrefixExpression(
7472 secondOperator, new SuperExpression(getAndAdvance()))); 7787 firstOperator,
7788 new PrefixExpression(
7789 secondOperator, new SuperExpression(getAndAdvance())));
7473 } else { 7790 } else {
7474 // Invalid operator before 'super' 7791 // Invalid operator before 'super'
7475 _reportErrorForCurrentToken( 7792 _reportErrorForCurrentToken(
7476 ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]); 7793 ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
7477 return new PrefixExpression( 7794 return new PrefixExpression(
7478 operator, new SuperExpression(getAndAdvance())); 7795 operator, new SuperExpression(getAndAdvance()));
7479 } 7796 }
7480 } 7797 }
7481 return new PrefixExpression(operator, _parseAssignableExpression(false)); 7798 return new PrefixExpression(operator, _parseAssignableExpression(false));
7482 } else if (_matches(TokenType.PLUS)) { 7799 } else if (_matches(TokenType.PLUS)) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
7601 } 7918 }
7602 List<VariableDeclaration> variables = new List<VariableDeclaration>(); 7919 List<VariableDeclaration> variables = new List<VariableDeclaration>();
7603 variables.add(_parseVariableDeclaration()); 7920 variables.add(_parseVariableDeclaration());
7604 while (_matches(TokenType.COMMA)) { 7921 while (_matches(TokenType.COMMA)) {
7605 _advance(); 7922 _advance();
7606 variables.add(_parseVariableDeclaration()); 7923 variables.add(_parseVariableDeclaration());
7607 } 7924 }
7608 return new VariableDeclarationList( 7925 return new VariableDeclarationList(
7609 commentAndMetadata != null ? commentAndMetadata.comment : null, 7926 commentAndMetadata != null ? commentAndMetadata.comment : null,
7610 commentAndMetadata != null ? commentAndMetadata.metadata : null, 7927 commentAndMetadata != null ? commentAndMetadata.metadata : null,
7611 keyword, type, variables); 7928 keyword,
7929 type,
7930 variables);
7612 } 7931 }
7613 7932
7614 /** 7933 /**
7615 * Parse a variable declaration statement. The [commentAndMetadata] is the 7934 * Parse a variable declaration statement. The [commentAndMetadata] is the
7616 * metadata to be associated with the variable declaration statement, or 7935 * metadata to be associated with the variable declaration statement, or
7617 * `null` if there is no attempt at parsing the comment and metadata. Return 7936 * `null` if there is no attempt at parsing the comment and metadata. Return
7618 * the variable declaration statement that was parsed. 7937 * the variable declaration statement that was parsed.
7619 * 7938 *
7620 * variableDeclarationStatement ::= 7939 * variableDeclarationStatement ::=
7621 * variableDeclarationList ';' 7940 * variableDeclarationList ';'
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
7860 } 8179 }
7861 Token next = startToken.next; 8180 Token next = startToken.next;
7862 if (_tokenMatches(next, TokenType.CLOSE_PAREN)) { 8181 if (_tokenMatches(next, TokenType.CLOSE_PAREN)) {
7863 return next.next; 8182 return next.next;
7864 } 8183 }
7865 // 8184 //
7866 // Look to see whether the token after the open parenthesis is something 8185 // Look to see whether the token after the open parenthesis is something
7867 // that should only occur at the beginning of a parameter list. 8186 // that should only occur at the beginning of a parameter list.
7868 // 8187 //
7869 if (next.matchesAny([ 8188 if (next.matchesAny([
7870 TokenType.AT, 8189 TokenType.AT,
7871 TokenType.OPEN_SQUARE_BRACKET, 8190 TokenType.OPEN_SQUARE_BRACKET,
7872 TokenType.OPEN_CURLY_BRACKET 8191 TokenType.OPEN_CURLY_BRACKET
7873 ]) || 8192 ]) ||
7874 _tokenMatchesKeyword(next, Keyword.VOID) || 8193 _tokenMatchesKeyword(next, Keyword.VOID) ||
7875 (_tokenMatchesIdentifier(next) && 8194 (_tokenMatchesIdentifier(next) &&
7876 (next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) { 8195 (next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
7877 return _skipPastMatchingToken(startToken); 8196 return _skipPastMatchingToken(startToken);
7878 } 8197 }
7879 // 8198 //
7880 // Look to see whether the first parameter is a function typed parameter 8199 // Look to see whether the first parameter is a function typed parameter
7881 // without a return type. 8200 // without a return type.
7882 // 8201 //
7883 if (_tokenMatchesIdentifier(next) && 8202 if (_tokenMatchesIdentifier(next) &&
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
8343 int fourthDigit = lexeme.codeUnitAt(currentIndex + 3); 8662 int fourthDigit = lexeme.codeUnitAt(currentIndex + 3);
8344 if (!_isHexDigit(firstDigit) || 8663 if (!_isHexDigit(firstDigit) ||
8345 !_isHexDigit(secondDigit) || 8664 !_isHexDigit(secondDigit) ||
8346 !_isHexDigit(thirdDigit) || 8665 !_isHexDigit(thirdDigit) ||
8347 !_isHexDigit(fourthDigit)) { 8666 !_isHexDigit(fourthDigit)) {
8348 // Illegal escape sequence: invalid hex digits 8667 // Illegal escape sequence: invalid hex digits
8349 _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE); 8668 _reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE);
8350 } else { 8669 } else {
8351 _appendScalarValue( 8670 _appendScalarValue(
8352 buffer, 8671 buffer,
8353 lexeme 8672 lexeme.substring(index, currentIndex + 1),
8354 .substring(
8355 index,
8356 currentIndex + 1),
8357 (((((Character.digit(firstDigit, 16) << 4) + 8673 (((((Character.digit(firstDigit, 16) << 4) +
8358 Character.digit(secondDigit, 16)) << 8674 Character.digit(secondDigit, 16)) <<
8359 4) + 8675 4) +
8360 Character.digit(thirdDigit, 16)) << 8676 Character.digit(thirdDigit, 16)) <<
8361 4) + 8677 4) +
8362 Character 8678 Character.digit(fourthDigit, 16),
8363 .digit(fourthDigit, 16),
8364 index, 8679 index,
8365 currentIndex + 8680 currentIndex + 3);
8366 3);
8367 } 8681 }
8368 return currentIndex + 4; 8682 return currentIndex + 4;
8369 } 8683 }
8370 } else { 8684 } else {
8371 buffer.writeCharCode(currentChar); 8685 buffer.writeCharCode(currentChar);
8372 } 8686 }
8373 return currentIndex + 1; 8687 return currentIndex + 1;
8374 } 8688 }
8375 8689
8376 /** 8690 /**
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
8698 } 9012 }
8699 if (modifiers.finalKeyword != null) { 9013 if (modifiers.finalKeyword != null) {
8700 _reportErrorForToken( 9014 _reportErrorForToken(
8701 ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword); 9015 ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword);
8702 } 9016 }
8703 if (modifiers.varKeyword != null) { 9017 if (modifiers.varKeyword != null) {
8704 _reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword); 9018 _reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword);
8705 } 9019 }
8706 } 9020 }
8707 } 9021 }
9022
8708 /** 9023 /**
8709 * A synthetic keyword token. 9024 * A synthetic keyword token.
8710 */ 9025 */
8711 class Parser_SyntheticKeywordToken extends KeywordToken { 9026 class Parser_SyntheticKeywordToken extends KeywordToken {
8712 /** 9027 /**
8713 * Initialize a newly created token to represent the given [keyword] at the 9028 * Initialize a newly created token to represent the given [keyword] at the
8714 * given [offset]. 9029 * given [offset].
8715 */ 9030 */
8716 Parser_SyntheticKeywordToken(Keyword keyword, int offset) 9031 Parser_SyntheticKeywordToken(Keyword keyword, int offset)
8717 : super(keyword, offset); 9032 : super(keyword, offset);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
8926 'EXTERNAL_SETTER_WITH_BODY', "External setters cannot have a body"); 9241 'EXTERNAL_SETTER_WITH_BODY', "External setters cannot have a body");
8927 9242
8928 static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode( 9243 static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode(
8929 'EXTERNAL_TYPEDEF', "Type aliases cannot be declared to be 'external'"); 9244 'EXTERNAL_TYPEDEF', "Type aliases cannot be declared to be 'external'");
8930 9245
8931 static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION = 9246 static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION =
8932 const ParserErrorCode('FACTORY_TOP_LEVEL_DECLARATION', 9247 const ParserErrorCode('FACTORY_TOP_LEVEL_DECLARATION',
8933 "Top-level declarations cannot be declared to be 'factory'"); 9248 "Top-level declarations cannot be declared to be 'factory'");
8934 9249
8935 static const ParserErrorCode FACTORY_WITH_INITIALIZERS = 9250 static const ParserErrorCode FACTORY_WITH_INITIALIZERS =
8936 const ParserErrorCode('FACTORY_WITH_INITIALIZERS', 9251 const ParserErrorCode(
9252 'FACTORY_WITH_INITIALIZERS',
8937 "A 'factory' constructor cannot have initializers", 9253 "A 'factory' constructor cannot have initializers",
8938 "Either remove the 'factory' keyword to make this a generative " 9254 "Either remove the 'factory' keyword to make this a generative "
8939 "constructor or remove the initializers."); 9255 "constructor or remove the initializers.");
8940 9256
8941 static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode( 9257 static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode(
8942 'FACTORY_WITHOUT_BODY', 9258 'FACTORY_WITHOUT_BODY',
8943 "A non-redirecting 'factory' constructor must have a body"); 9259 "A non-redirecting 'factory' constructor must have a body");
8944 9260
8945 static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR = 9261 static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
8946 const ParserErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR', 9262 const ParserErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
9195 9511
9196 static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME = 9512 static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME =
9197 const ParserErrorCode('NON_IDENTIFIER_LIBRARY_NAME', 9513 const ParserErrorCode('NON_IDENTIFIER_LIBRARY_NAME',
9198 "The name of a library must be an identifier"); 9514 "The name of a library must be an identifier");
9199 9515
9200 static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART = 9516 static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART =
9201 const ParserErrorCode('NON_PART_OF_DIRECTIVE_IN_PART', 9517 const ParserErrorCode('NON_PART_OF_DIRECTIVE_IN_PART',
9202 "The part-of directive must be the only directive in a part"); 9518 "The part-of directive must be the only directive in a part");
9203 9519
9204 static const ParserErrorCode NON_STRING_LITERAL_AS_URI = 9520 static const ParserErrorCode NON_STRING_LITERAL_AS_URI =
9205 const ParserErrorCode('NON_STRING_LITERAL_AS_URI', 9521 const ParserErrorCode(
9522 'NON_STRING_LITERAL_AS_URI',
9206 "The URI must be a string literal", 9523 "The URI must be a string literal",
9207 "Enclose the URI in either single or double quotes."); 9524 "Enclose the URI in either single or double quotes.");
9208 9525
9209 static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR = 9526 static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR =
9210 const ParserErrorCode('NON_USER_DEFINABLE_OPERATOR', 9527 const ParserErrorCode('NON_USER_DEFINABLE_OPERATOR',
9211 "The operator '{0}' is not user definable"); 9528 "The operator '{0}' is not user definable");
9212 9529
9213 static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS = 9530 static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
9214 const ParserErrorCode('NORMAL_BEFORE_OPTIONAL_PARAMETERS', 9531 const ParserErrorCode('NORMAL_BEFORE_OPTIONAL_PARAMETERS',
9215 "Normal parameters must occur before optional parameters"); 9532 "Normal parameters must occur before optional parameters");
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
9358 9675
9359 @override 9676 @override
9360 bool visitAdjacentStrings(AdjacentStrings node) { 9677 bool visitAdjacentStrings(AdjacentStrings node) {
9361 AdjacentStrings toNode = this._toNode as AdjacentStrings; 9678 AdjacentStrings toNode = this._toNode as AdjacentStrings;
9362 return _isEqualNodeLists(node.strings, toNode.strings); 9679 return _isEqualNodeLists(node.strings, toNode.strings);
9363 } 9680 }
9364 9681
9365 @override 9682 @override
9366 bool visitAnnotation(Annotation node) { 9683 bool visitAnnotation(Annotation node) {
9367 Annotation toNode = this._toNode as Annotation; 9684 Annotation toNode = this._toNode as Annotation;
9368 if (_and(_isEqualTokens(node.atSign, toNode.atSign), 9685 if (_and(
9686 _isEqualTokens(node.atSign, toNode.atSign),
9369 _isEqualNodes(node.name, toNode.name), 9687 _isEqualNodes(node.name, toNode.name),
9370 _isEqualTokens(node.period, toNode.period), 9688 _isEqualTokens(node.period, toNode.period),
9371 _isEqualNodes(node.constructorName, toNode.constructorName), 9689 _isEqualNodes(node.constructorName, toNode.constructorName),
9372 _isEqualNodes(node.arguments, toNode.arguments))) { 9690 _isEqualNodes(node.arguments, toNode.arguments))) {
9373 toNode.element = node.element; 9691 toNode.element = node.element;
9374 return true; 9692 return true;
9375 } 9693 }
9376 return false; 9694 return false;
9377 } 9695 }
9378 9696
9379 @override 9697 @override
9380 bool visitArgumentList(ArgumentList node) { 9698 bool visitArgumentList(ArgumentList node) {
9381 ArgumentList toNode = this._toNode as ArgumentList; 9699 ArgumentList toNode = this._toNode as ArgumentList;
9382 return _and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 9700 return _and(
9701 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9383 _isEqualNodeLists(node.arguments, toNode.arguments), 9702 _isEqualNodeLists(node.arguments, toNode.arguments),
9384 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)); 9703 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
9385 } 9704 }
9386 9705
9387 @override 9706 @override
9388 bool visitAsExpression(AsExpression node) { 9707 bool visitAsExpression(AsExpression node) {
9389 AsExpression toNode = this._toNode as AsExpression; 9708 AsExpression toNode = this._toNode as AsExpression;
9390 if (_and(_isEqualNodes(node.expression, toNode.expression), 9709 if (_and(
9710 _isEqualNodes(node.expression, toNode.expression),
9391 _isEqualTokens(node.asOperator, toNode.asOperator), 9711 _isEqualTokens(node.asOperator, toNode.asOperator),
9392 _isEqualNodes(node.type, toNode.type))) { 9712 _isEqualNodes(node.type, toNode.type))) {
9393 toNode.propagatedType = node.propagatedType; 9713 toNode.propagatedType = node.propagatedType;
9394 toNode.staticType = node.staticType; 9714 toNode.staticType = node.staticType;
9395 return true; 9715 return true;
9396 } 9716 }
9397 return false; 9717 return false;
9398 } 9718 }
9399 9719
9400 @override 9720 @override
9401 bool visitAssertStatement(AssertStatement node) { 9721 bool visitAssertStatement(AssertStatement node) {
9402 AssertStatement toNode = this._toNode as AssertStatement; 9722 AssertStatement toNode = this._toNode as AssertStatement;
9403 return _and(_isEqualTokens(node.assertKeyword, toNode.assertKeyword), 9723 return _and(
9724 _isEqualTokens(node.assertKeyword, toNode.assertKeyword),
9404 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 9725 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9405 _isEqualNodes(node.condition, toNode.condition), 9726 _isEqualNodes(node.condition, toNode.condition),
9406 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 9727 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9407 _isEqualTokens(node.semicolon, toNode.semicolon)); 9728 _isEqualTokens(node.semicolon, toNode.semicolon));
9408 } 9729 }
9409 9730
9410 @override 9731 @override
9411 bool visitAssignmentExpression(AssignmentExpression node) { 9732 bool visitAssignmentExpression(AssignmentExpression node) {
9412 AssignmentExpression toNode = this._toNode as AssignmentExpression; 9733 AssignmentExpression toNode = this._toNode as AssignmentExpression;
9413 if (_and(_isEqualNodes(node.leftHandSide, toNode.leftHandSide), 9734 if (_and(
9735 _isEqualNodes(node.leftHandSide, toNode.leftHandSide),
9414 _isEqualTokens(node.operator, toNode.operator), 9736 _isEqualTokens(node.operator, toNode.operator),
9415 _isEqualNodes(node.rightHandSide, toNode.rightHandSide))) { 9737 _isEqualNodes(node.rightHandSide, toNode.rightHandSide))) {
9416 toNode.propagatedElement = node.propagatedElement; 9738 toNode.propagatedElement = node.propagatedElement;
9417 toNode.propagatedType = node.propagatedType; 9739 toNode.propagatedType = node.propagatedType;
9418 toNode.staticElement = node.staticElement; 9740 toNode.staticElement = node.staticElement;
9419 toNode.staticType = node.staticType; 9741 toNode.staticType = node.staticType;
9420 return true; 9742 return true;
9421 } 9743 }
9422 return false; 9744 return false;
9423 } 9745 }
9424 9746
9425 @override 9747 @override
9426 bool visitAwaitExpression(AwaitExpression node) { 9748 bool visitAwaitExpression(AwaitExpression node) {
9427 AwaitExpression toNode = this._toNode as AwaitExpression; 9749 AwaitExpression toNode = this._toNode as AwaitExpression;
9428 if (_and(_isEqualTokens(node.awaitKeyword, toNode.awaitKeyword), 9750 if (_and(_isEqualTokens(node.awaitKeyword, toNode.awaitKeyword),
9429 _isEqualNodes(node.expression, toNode.expression))) { 9751 _isEqualNodes(node.expression, toNode.expression))) {
9430 toNode.propagatedType = node.propagatedType; 9752 toNode.propagatedType = node.propagatedType;
9431 toNode.staticType = node.staticType; 9753 toNode.staticType = node.staticType;
9432 return true; 9754 return true;
9433 } 9755 }
9434 return false; 9756 return false;
9435 } 9757 }
9436 9758
9437 @override 9759 @override
9438 bool visitBinaryExpression(BinaryExpression node) { 9760 bool visitBinaryExpression(BinaryExpression node) {
9439 BinaryExpression toNode = this._toNode as BinaryExpression; 9761 BinaryExpression toNode = this._toNode as BinaryExpression;
9440 if (_and(_isEqualNodes(node.leftOperand, toNode.leftOperand), 9762 if (_and(
9763 _isEqualNodes(node.leftOperand, toNode.leftOperand),
9441 _isEqualTokens(node.operator, toNode.operator), 9764 _isEqualTokens(node.operator, toNode.operator),
9442 _isEqualNodes(node.rightOperand, toNode.rightOperand))) { 9765 _isEqualNodes(node.rightOperand, toNode.rightOperand))) {
9443 toNode.propagatedElement = node.propagatedElement; 9766 toNode.propagatedElement = node.propagatedElement;
9444 toNode.propagatedType = node.propagatedType; 9767 toNode.propagatedType = node.propagatedType;
9445 toNode.staticElement = node.staticElement; 9768 toNode.staticElement = node.staticElement;
9446 toNode.staticType = node.staticType; 9769 toNode.staticType = node.staticType;
9447 return true; 9770 return true;
9448 } 9771 }
9449 return false; 9772 return false;
9450 } 9773 }
9451 9774
9452 @override 9775 @override
9453 bool visitBlock(Block node) { 9776 bool visitBlock(Block node) {
9454 Block toNode = this._toNode as Block; 9777 Block toNode = this._toNode as Block;
9455 return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket), 9778 return _and(
9779 _isEqualTokens(node.leftBracket, toNode.leftBracket),
9456 _isEqualNodeLists(node.statements, toNode.statements), 9780 _isEqualNodeLists(node.statements, toNode.statements),
9457 _isEqualTokens(node.rightBracket, toNode.rightBracket)); 9781 _isEqualTokens(node.rightBracket, toNode.rightBracket));
9458 } 9782 }
9459 9783
9460 @override 9784 @override
9461 bool visitBlockFunctionBody(BlockFunctionBody node) { 9785 bool visitBlockFunctionBody(BlockFunctionBody node) {
9462 BlockFunctionBody toNode = this._toNode as BlockFunctionBody; 9786 BlockFunctionBody toNode = this._toNode as BlockFunctionBody;
9463 return _isEqualNodes(node.block, toNode.block); 9787 return _isEqualNodes(node.block, toNode.block);
9464 } 9788 }
9465 9789
9466 @override 9790 @override
9467 bool visitBooleanLiteral(BooleanLiteral node) { 9791 bool visitBooleanLiteral(BooleanLiteral node) {
9468 BooleanLiteral toNode = this._toNode as BooleanLiteral; 9792 BooleanLiteral toNode = this._toNode as BooleanLiteral;
9469 if (_and(_isEqualTokens(node.literal, toNode.literal), 9793 if (_and(_isEqualTokens(node.literal, toNode.literal),
9470 node.value == toNode.value)) { 9794 node.value == toNode.value)) {
9471 toNode.propagatedType = node.propagatedType; 9795 toNode.propagatedType = node.propagatedType;
9472 toNode.staticType = node.staticType; 9796 toNode.staticType = node.staticType;
9473 return true; 9797 return true;
9474 } 9798 }
9475 return false; 9799 return false;
9476 } 9800 }
9477 9801
9478 @override 9802 @override
9479 bool visitBreakStatement(BreakStatement node) { 9803 bool visitBreakStatement(BreakStatement node) {
9480 BreakStatement toNode = this._toNode as BreakStatement; 9804 BreakStatement toNode = this._toNode as BreakStatement;
9481 if (_and(_isEqualTokens(node.breakKeyword, toNode.breakKeyword), 9805 if (_and(
9806 _isEqualTokens(node.breakKeyword, toNode.breakKeyword),
9482 _isEqualNodes(node.label, toNode.label), 9807 _isEqualNodes(node.label, toNode.label),
9483 _isEqualTokens(node.semicolon, toNode.semicolon))) { 9808 _isEqualTokens(node.semicolon, toNode.semicolon))) {
9484 // TODO(paulberry): map node.target to toNode.target. 9809 // TODO(paulberry): map node.target to toNode.target.
9485 return true; 9810 return true;
9486 } 9811 }
9487 return false; 9812 return false;
9488 } 9813 }
9489 9814
9490 @override 9815 @override
9491 bool visitCascadeExpression(CascadeExpression node) { 9816 bool visitCascadeExpression(CascadeExpression node) {
9492 CascadeExpression toNode = this._toNode as CascadeExpression; 9817 CascadeExpression toNode = this._toNode as CascadeExpression;
9493 if (_and(_isEqualNodes(node.target, toNode.target), 9818 if (_and(_isEqualNodes(node.target, toNode.target),
9494 _isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) { 9819 _isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) {
9495 toNode.propagatedType = node.propagatedType; 9820 toNode.propagatedType = node.propagatedType;
9496 toNode.staticType = node.staticType; 9821 toNode.staticType = node.staticType;
9497 return true; 9822 return true;
9498 } 9823 }
9499 return false; 9824 return false;
9500 } 9825 }
9501 9826
9502 @override 9827 @override
9503 bool visitCatchClause(CatchClause node) { 9828 bool visitCatchClause(CatchClause node) {
9504 CatchClause toNode = this._toNode as CatchClause; 9829 CatchClause toNode = this._toNode as CatchClause;
9505 return _and(_isEqualTokens(node.onKeyword, toNode.onKeyword), 9830 return _and(
9831 _isEqualTokens(node.onKeyword, toNode.onKeyword),
9506 _isEqualNodes(node.exceptionType, toNode.exceptionType), 9832 _isEqualNodes(node.exceptionType, toNode.exceptionType),
9507 _isEqualTokens(node.catchKeyword, toNode.catchKeyword), 9833 _isEqualTokens(node.catchKeyword, toNode.catchKeyword),
9508 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 9834 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9509 _isEqualNodes(node.exceptionParameter, toNode.exceptionParameter), 9835 _isEqualNodes(node.exceptionParameter, toNode.exceptionParameter),
9510 _isEqualTokens(node.comma, toNode.comma), 9836 _isEqualTokens(node.comma, toNode.comma),
9511 _isEqualNodes(node.stackTraceParameter, toNode.stackTraceParameter), 9837 _isEqualNodes(node.stackTraceParameter, toNode.stackTraceParameter),
9512 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 9838 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9513 _isEqualNodes(node.body, toNode.body)); 9839 _isEqualNodes(node.body, toNode.body));
9514 } 9840 }
9515 9841
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
9557 @override 9883 @override
9558 bool visitCommentReference(CommentReference node) { 9884 bool visitCommentReference(CommentReference node) {
9559 CommentReference toNode = this._toNode as CommentReference; 9885 CommentReference toNode = this._toNode as CommentReference;
9560 return _and(_isEqualTokens(node.newKeyword, toNode.newKeyword), 9886 return _and(_isEqualTokens(node.newKeyword, toNode.newKeyword),
9561 _isEqualNodes(node.identifier, toNode.identifier)); 9887 _isEqualNodes(node.identifier, toNode.identifier));
9562 } 9888 }
9563 9889
9564 @override 9890 @override
9565 bool visitCompilationUnit(CompilationUnit node) { 9891 bool visitCompilationUnit(CompilationUnit node) {
9566 CompilationUnit toNode = this._toNode as CompilationUnit; 9892 CompilationUnit toNode = this._toNode as CompilationUnit;
9567 if (_and(_isEqualTokens(node.beginToken, toNode.beginToken), 9893 if (_and(
9894 _isEqualTokens(node.beginToken, toNode.beginToken),
9568 _isEqualNodes(node.scriptTag, toNode.scriptTag), 9895 _isEqualNodes(node.scriptTag, toNode.scriptTag),
9569 _isEqualNodeLists(node.directives, toNode.directives), 9896 _isEqualNodeLists(node.directives, toNode.directives),
9570 _isEqualNodeLists(node.declarations, toNode.declarations), 9897 _isEqualNodeLists(node.declarations, toNode.declarations),
9571 _isEqualTokens(node.endToken, toNode.endToken))) { 9898 _isEqualTokens(node.endToken, toNode.endToken))) {
9572 toNode.element = node.element; 9899 toNode.element = node.element;
9573 return true; 9900 return true;
9574 } 9901 }
9575 return false; 9902 return false;
9576 } 9903 }
9577 9904
9578 @override 9905 @override
9579 bool visitConditionalExpression(ConditionalExpression node) { 9906 bool visitConditionalExpression(ConditionalExpression node) {
9580 ConditionalExpression toNode = this._toNode as ConditionalExpression; 9907 ConditionalExpression toNode = this._toNode as ConditionalExpression;
9581 if (_and(_isEqualNodes(node.condition, toNode.condition), 9908 if (_and(
9909 _isEqualNodes(node.condition, toNode.condition),
9582 _isEqualTokens(node.question, toNode.question), 9910 _isEqualTokens(node.question, toNode.question),
9583 _isEqualNodes(node.thenExpression, toNode.thenExpression), 9911 _isEqualNodes(node.thenExpression, toNode.thenExpression),
9584 _isEqualTokens(node.colon, toNode.colon), 9912 _isEqualTokens(node.colon, toNode.colon),
9585 _isEqualNodes(node.elseExpression, toNode.elseExpression))) { 9913 _isEqualNodes(node.elseExpression, toNode.elseExpression))) {
9586 toNode.propagatedType = node.propagatedType; 9914 toNode.propagatedType = node.propagatedType;
9587 toNode.staticType = node.staticType; 9915 toNode.staticType = node.staticType;
9588 return true; 9916 return true;
9589 } 9917 }
9590 return false; 9918 return false;
9591 } 9919 }
(...skipping 18 matching lines...) Expand all
9610 toNode.element = node.element; 9938 toNode.element = node.element;
9611 return true; 9939 return true;
9612 } 9940 }
9613 return false; 9941 return false;
9614 } 9942 }
9615 9943
9616 @override 9944 @override
9617 bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) { 9945 bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
9618 ConstructorFieldInitializer toNode = 9946 ConstructorFieldInitializer toNode =
9619 this._toNode as ConstructorFieldInitializer; 9947 this._toNode as ConstructorFieldInitializer;
9620 return _and(_isEqualTokens(node.thisKeyword, toNode.thisKeyword), 9948 return _and(
9949 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
9621 _isEqualTokens(node.period, toNode.period), 9950 _isEqualTokens(node.period, toNode.period),
9622 _isEqualNodes(node.fieldName, toNode.fieldName), 9951 _isEqualNodes(node.fieldName, toNode.fieldName),
9623 _isEqualTokens(node.equals, toNode.equals), 9952 _isEqualTokens(node.equals, toNode.equals),
9624 _isEqualNodes(node.expression, toNode.expression)); 9953 _isEqualNodes(node.expression, toNode.expression));
9625 } 9954 }
9626 9955
9627 @override 9956 @override
9628 bool visitConstructorName(ConstructorName node) { 9957 bool visitConstructorName(ConstructorName node) {
9629 ConstructorName toNode = this._toNode as ConstructorName; 9958 ConstructorName toNode = this._toNode as ConstructorName;
9630 if (_and(_isEqualNodes(node.type, toNode.type), 9959 if (_and(
9960 _isEqualNodes(node.type, toNode.type),
9631 _isEqualTokens(node.period, toNode.period), 9961 _isEqualTokens(node.period, toNode.period),
9632 _isEqualNodes(node.name, toNode.name))) { 9962 _isEqualNodes(node.name, toNode.name))) {
9633 toNode.staticElement = node.staticElement; 9963 toNode.staticElement = node.staticElement;
9634 return true; 9964 return true;
9635 } 9965 }
9636 return false; 9966 return false;
9637 } 9967 }
9638 9968
9639 @override 9969 @override
9640 bool visitContinueStatement(ContinueStatement node) { 9970 bool visitContinueStatement(ContinueStatement node) {
9641 ContinueStatement toNode = this._toNode as ContinueStatement; 9971 ContinueStatement toNode = this._toNode as ContinueStatement;
9642 if (_and(_isEqualTokens(node.continueKeyword, toNode.continueKeyword), 9972 if (_and(
9973 _isEqualTokens(node.continueKeyword, toNode.continueKeyword),
9643 _isEqualNodes(node.label, toNode.label), 9974 _isEqualNodes(node.label, toNode.label),
9644 _isEqualTokens(node.semicolon, toNode.semicolon))) { 9975 _isEqualTokens(node.semicolon, toNode.semicolon))) {
9645 // TODO(paulberry): map node.target to toNode.target. 9976 // TODO(paulberry): map node.target to toNode.target.
9646 return true; 9977 return true;
9647 } 9978 }
9648 return false; 9979 return false;
9649 } 9980 }
9650 9981
9651 @override 9982 @override
9652 bool visitDeclaredIdentifier(DeclaredIdentifier node) { 9983 bool visitDeclaredIdentifier(DeclaredIdentifier node) {
9653 DeclaredIdentifier toNode = this._toNode as DeclaredIdentifier; 9984 DeclaredIdentifier toNode = this._toNode as DeclaredIdentifier;
9654 return _and( 9985 return _and(
9655 _isEqualNodes(node.documentationComment, toNode.documentationComment), 9986 _isEqualNodes(node.documentationComment, toNode.documentationComment),
9656 _isEqualNodeLists(node.metadata, toNode.metadata), 9987 _isEqualNodeLists(node.metadata, toNode.metadata),
9657 _isEqualTokens(node.keyword, toNode.keyword), 9988 _isEqualTokens(node.keyword, toNode.keyword),
9658 _isEqualNodes(node.type, toNode.type), 9989 _isEqualNodes(node.type, toNode.type),
9659 _isEqualNodes(node.identifier, toNode.identifier)); 9990 _isEqualNodes(node.identifier, toNode.identifier));
9660 } 9991 }
9661 9992
9662 @override 9993 @override
9663 bool visitDefaultFormalParameter(DefaultFormalParameter node) { 9994 bool visitDefaultFormalParameter(DefaultFormalParameter node) {
9664 DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter; 9995 DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
9665 return _and(_isEqualNodes(node.parameter, toNode.parameter), 9996 return _and(
9997 _isEqualNodes(node.parameter, toNode.parameter),
9666 node.kind == toNode.kind, 9998 node.kind == toNode.kind,
9667 _isEqualTokens(node.separator, toNode.separator), 9999 _isEqualTokens(node.separator, toNode.separator),
9668 _isEqualNodes(node.defaultValue, toNode.defaultValue)); 10000 _isEqualNodes(node.defaultValue, toNode.defaultValue));
9669 } 10001 }
9670 10002
9671 @override 10003 @override
9672 bool visitDoStatement(DoStatement node) { 10004 bool visitDoStatement(DoStatement node) {
9673 DoStatement toNode = this._toNode as DoStatement; 10005 DoStatement toNode = this._toNode as DoStatement;
9674 return _and(_isEqualTokens(node.doKeyword, toNode.doKeyword), 10006 return _and(
10007 _isEqualTokens(node.doKeyword, toNode.doKeyword),
9675 _isEqualNodes(node.body, toNode.body), 10008 _isEqualNodes(node.body, toNode.body),
9676 _isEqualTokens(node.whileKeyword, toNode.whileKeyword), 10009 _isEqualTokens(node.whileKeyword, toNode.whileKeyword),
9677 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10010 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9678 _isEqualNodes(node.condition, toNode.condition), 10011 _isEqualNodes(node.condition, toNode.condition),
9679 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10012 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9680 _isEqualTokens(node.semicolon, toNode.semicolon)); 10013 _isEqualTokens(node.semicolon, toNode.semicolon));
9681 } 10014 }
9682 10015
9683 @override 10016 @override
9684 bool visitDoubleLiteral(DoubleLiteral node) { 10017 bool visitDoubleLiteral(DoubleLiteral node) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
9785 _isEqualTokens(node.keyword, toNode.keyword), 10118 _isEqualTokens(node.keyword, toNode.keyword),
9786 _isEqualNodes(node.type, toNode.type), 10119 _isEqualNodes(node.type, toNode.type),
9787 _isEqualTokens(node.thisKeyword, toNode.thisKeyword), 10120 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
9788 _isEqualTokens(node.period, toNode.period), 10121 _isEqualTokens(node.period, toNode.period),
9789 _isEqualNodes(node.identifier, toNode.identifier)); 10122 _isEqualNodes(node.identifier, toNode.identifier));
9790 } 10123 }
9791 10124
9792 @override 10125 @override
9793 bool visitForEachStatement(ForEachStatement node) { 10126 bool visitForEachStatement(ForEachStatement node) {
9794 ForEachStatement toNode = this._toNode as ForEachStatement; 10127 ForEachStatement toNode = this._toNode as ForEachStatement;
9795 return _and(_isEqualTokens(node.forKeyword, toNode.forKeyword), 10128 return _and(
10129 _isEqualTokens(node.forKeyword, toNode.forKeyword),
9796 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10130 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9797 _isEqualNodes(node.loopVariable, toNode.loopVariable), 10131 _isEqualNodes(node.loopVariable, toNode.loopVariable),
9798 _isEqualTokens(node.inKeyword, toNode.inKeyword), 10132 _isEqualTokens(node.inKeyword, toNode.inKeyword),
9799 _isEqualNodes(node.iterable, toNode.iterable), 10133 _isEqualNodes(node.iterable, toNode.iterable),
9800 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10134 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9801 _isEqualNodes(node.body, toNode.body)); 10135 _isEqualNodes(node.body, toNode.body));
9802 } 10136 }
9803 10137
9804 @override 10138 @override
9805 bool visitFormalParameterList(FormalParameterList node) { 10139 bool visitFormalParameterList(FormalParameterList node) {
9806 FormalParameterList toNode = this._toNode as FormalParameterList; 10140 FormalParameterList toNode = this._toNode as FormalParameterList;
9807 return _and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10141 return _and(
10142 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9808 _isEqualNodeLists(node.parameters, toNode.parameters), 10143 _isEqualNodeLists(node.parameters, toNode.parameters),
9809 _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter), 10144 _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter),
9810 _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter), 10145 _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter),
9811 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis)); 10146 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
9812 } 10147 }
9813 10148
9814 @override 10149 @override
9815 bool visitForStatement(ForStatement node) { 10150 bool visitForStatement(ForStatement node) {
9816 ForStatement toNode = this._toNode as ForStatement; 10151 ForStatement toNode = this._toNode as ForStatement;
9817 return _and(_isEqualTokens(node.forKeyword, toNode.forKeyword), 10152 return _and(
10153 _isEqualTokens(node.forKeyword, toNode.forKeyword),
9818 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10154 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9819 _isEqualNodes(node.variables, toNode.variables), 10155 _isEqualNodes(node.variables, toNode.variables),
9820 _isEqualNodes(node.initialization, toNode.initialization), 10156 _isEqualNodes(node.initialization, toNode.initialization),
9821 _isEqualTokens(node.leftSeparator, toNode.leftSeparator), 10157 _isEqualTokens(node.leftSeparator, toNode.leftSeparator),
9822 _isEqualNodes(node.condition, toNode.condition), 10158 _isEqualNodes(node.condition, toNode.condition),
9823 _isEqualTokens(node.rightSeparator, toNode.rightSeparator), 10159 _isEqualTokens(node.rightSeparator, toNode.rightSeparator),
9824 _isEqualNodeLists(node.updaters, toNode.updaters), 10160 _isEqualNodeLists(node.updaters, toNode.updaters),
9825 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10161 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9826 _isEqualNodes(node.body, toNode.body)); 10162 _isEqualNodes(node.body, toNode.body));
9827 } 10163 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
9903 @override 10239 @override
9904 bool visitHideCombinator(HideCombinator node) { 10240 bool visitHideCombinator(HideCombinator node) {
9905 HideCombinator toNode = this._toNode as HideCombinator; 10241 HideCombinator toNode = this._toNode as HideCombinator;
9906 return _and(_isEqualTokens(node.keyword, toNode.keyword), 10242 return _and(_isEqualTokens(node.keyword, toNode.keyword),
9907 _isEqualNodeLists(node.hiddenNames, toNode.hiddenNames)); 10243 _isEqualNodeLists(node.hiddenNames, toNode.hiddenNames));
9908 } 10244 }
9909 10245
9910 @override 10246 @override
9911 bool visitIfStatement(IfStatement node) { 10247 bool visitIfStatement(IfStatement node) {
9912 IfStatement toNode = this._toNode as IfStatement; 10248 IfStatement toNode = this._toNode as IfStatement;
9913 return _and(_isEqualTokens(node.ifKeyword, toNode.ifKeyword), 10249 return _and(
10250 _isEqualTokens(node.ifKeyword, toNode.ifKeyword),
9914 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10251 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9915 _isEqualNodes(node.condition, toNode.condition), 10252 _isEqualNodes(node.condition, toNode.condition),
9916 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10253 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
9917 _isEqualNodes(node.thenStatement, toNode.thenStatement), 10254 _isEqualNodes(node.thenStatement, toNode.thenStatement),
9918 _isEqualTokens(node.elseKeyword, toNode.elseKeyword), 10255 _isEqualTokens(node.elseKeyword, toNode.elseKeyword),
9919 _isEqualNodes(node.elseStatement, toNode.elseStatement)); 10256 _isEqualNodes(node.elseStatement, toNode.elseStatement));
9920 } 10257 }
9921 10258
9922 @override 10259 @override
9923 bool visitImplementsClause(ImplementsClause node) { 10260 bool visitImplementsClause(ImplementsClause node) {
(...skipping 17 matching lines...) Expand all
9941 _isEqualTokens(node.semicolon, toNode.semicolon))) { 10278 _isEqualTokens(node.semicolon, toNode.semicolon))) {
9942 toNode.element = node.element; 10279 toNode.element = node.element;
9943 return true; 10280 return true;
9944 } 10281 }
9945 return false; 10282 return false;
9946 } 10283 }
9947 10284
9948 @override 10285 @override
9949 bool visitIndexExpression(IndexExpression node) { 10286 bool visitIndexExpression(IndexExpression node) {
9950 IndexExpression toNode = this._toNode as IndexExpression; 10287 IndexExpression toNode = this._toNode as IndexExpression;
9951 if (_and(_isEqualNodes(node.target, toNode.target), 10288 if (_and(
10289 _isEqualNodes(node.target, toNode.target),
9952 _isEqualTokens(node.leftBracket, toNode.leftBracket), 10290 _isEqualTokens(node.leftBracket, toNode.leftBracket),
9953 _isEqualNodes(node.index, toNode.index), 10291 _isEqualNodes(node.index, toNode.index),
9954 _isEqualTokens(node.rightBracket, toNode.rightBracket))) { 10292 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
9955 toNode.auxiliaryElements = node.auxiliaryElements; 10293 toNode.auxiliaryElements = node.auxiliaryElements;
9956 toNode.propagatedElement = node.propagatedElement; 10294 toNode.propagatedElement = node.propagatedElement;
9957 toNode.propagatedType = node.propagatedType; 10295 toNode.propagatedType = node.propagatedType;
9958 toNode.staticElement = node.staticElement; 10296 toNode.staticElement = node.staticElement;
9959 toNode.staticType = node.staticType; 10297 toNode.staticType = node.staticType;
9960 return true; 10298 return true;
9961 } 10299 }
9962 return false; 10300 return false;
9963 } 10301 }
9964 10302
9965 @override 10303 @override
9966 bool visitInstanceCreationExpression(InstanceCreationExpression node) { 10304 bool visitInstanceCreationExpression(InstanceCreationExpression node) {
9967 InstanceCreationExpression toNode = 10305 InstanceCreationExpression toNode =
9968 this._toNode as InstanceCreationExpression; 10306 this._toNode as InstanceCreationExpression;
9969 if (_and(_isEqualTokens(node.keyword, toNode.keyword), 10307 if (_and(
10308 _isEqualTokens(node.keyword, toNode.keyword),
9970 _isEqualNodes(node.constructorName, toNode.constructorName), 10309 _isEqualNodes(node.constructorName, toNode.constructorName),
9971 _isEqualNodes(node.argumentList, toNode.argumentList))) { 10310 _isEqualNodes(node.argumentList, toNode.argumentList))) {
9972 toNode.propagatedType = node.propagatedType; 10311 toNode.propagatedType = node.propagatedType;
9973 toNode.staticElement = node.staticElement; 10312 toNode.staticElement = node.staticElement;
9974 toNode.staticType = node.staticType; 10313 toNode.staticType = node.staticType;
9975 return true; 10314 return true;
9976 } 10315 }
9977 return false; 10316 return false;
9978 } 10317 }
9979 10318
9980 @override 10319 @override
9981 bool visitIntegerLiteral(IntegerLiteral node) { 10320 bool visitIntegerLiteral(IntegerLiteral node) {
9982 IntegerLiteral toNode = this._toNode as IntegerLiteral; 10321 IntegerLiteral toNode = this._toNode as IntegerLiteral;
9983 if (_and(_isEqualTokens(node.literal, toNode.literal), 10322 if (_and(_isEqualTokens(node.literal, toNode.literal),
9984 node.value == toNode.value)) { 10323 node.value == toNode.value)) {
9985 toNode.propagatedType = node.propagatedType; 10324 toNode.propagatedType = node.propagatedType;
9986 toNode.staticType = node.staticType; 10325 toNode.staticType = node.staticType;
9987 return true; 10326 return true;
9988 } 10327 }
9989 return false; 10328 return false;
9990 } 10329 }
9991 10330
9992 @override 10331 @override
9993 bool visitInterpolationExpression(InterpolationExpression node) { 10332 bool visitInterpolationExpression(InterpolationExpression node) {
9994 InterpolationExpression toNode = this._toNode as InterpolationExpression; 10333 InterpolationExpression toNode = this._toNode as InterpolationExpression;
9995 return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket), 10334 return _and(
10335 _isEqualTokens(node.leftBracket, toNode.leftBracket),
9996 _isEqualNodes(node.expression, toNode.expression), 10336 _isEqualNodes(node.expression, toNode.expression),
9997 _isEqualTokens(node.rightBracket, toNode.rightBracket)); 10337 _isEqualTokens(node.rightBracket, toNode.rightBracket));
9998 } 10338 }
9999 10339
10000 @override 10340 @override
10001 bool visitInterpolationString(InterpolationString node) { 10341 bool visitInterpolationString(InterpolationString node) {
10002 InterpolationString toNode = this._toNode as InterpolationString; 10342 InterpolationString toNode = this._toNode as InterpolationString;
10003 return _and(_isEqualTokens(node.contents, toNode.contents), 10343 return _and(_isEqualTokens(node.contents, toNode.contents),
10004 node.value == toNode.value); 10344 node.value == toNode.value);
10005 } 10345 }
10006 10346
10007 @override 10347 @override
10008 bool visitIsExpression(IsExpression node) { 10348 bool visitIsExpression(IsExpression node) {
10009 IsExpression toNode = this._toNode as IsExpression; 10349 IsExpression toNode = this._toNode as IsExpression;
10010 if (_and(_isEqualNodes(node.expression, toNode.expression), 10350 if (_and(
10351 _isEqualNodes(node.expression, toNode.expression),
10011 _isEqualTokens(node.isOperator, toNode.isOperator), 10352 _isEqualTokens(node.isOperator, toNode.isOperator),
10012 _isEqualTokens(node.notOperator, toNode.notOperator), 10353 _isEqualTokens(node.notOperator, toNode.notOperator),
10013 _isEqualNodes(node.type, toNode.type))) { 10354 _isEqualNodes(node.type, toNode.type))) {
10014 toNode.propagatedType = node.propagatedType; 10355 toNode.propagatedType = node.propagatedType;
10015 toNode.staticType = node.staticType; 10356 toNode.staticType = node.staticType;
10016 return true; 10357 return true;
10017 } 10358 }
10018 return false; 10359 return false;
10019 } 10360 }
10020 10361
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
10054 toNode.propagatedType = node.propagatedType; 10395 toNode.propagatedType = node.propagatedType;
10055 toNode.staticType = node.staticType; 10396 toNode.staticType = node.staticType;
10056 return true; 10397 return true;
10057 } 10398 }
10058 return false; 10399 return false;
10059 } 10400 }
10060 10401
10061 @override 10402 @override
10062 bool visitListLiteral(ListLiteral node) { 10403 bool visitListLiteral(ListLiteral node) {
10063 ListLiteral toNode = this._toNode as ListLiteral; 10404 ListLiteral toNode = this._toNode as ListLiteral;
10064 if (_and(_isEqualTokens(node.constKeyword, toNode.constKeyword), 10405 if (_and(
10406 _isEqualTokens(node.constKeyword, toNode.constKeyword),
10065 _isEqualNodes(node.typeArguments, toNode.typeArguments), 10407 _isEqualNodes(node.typeArguments, toNode.typeArguments),
10066 _isEqualTokens(node.leftBracket, toNode.leftBracket), 10408 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10067 _isEqualNodeLists(node.elements, toNode.elements), 10409 _isEqualNodeLists(node.elements, toNode.elements),
10068 _isEqualTokens(node.rightBracket, toNode.rightBracket))) { 10410 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
10069 toNode.propagatedType = node.propagatedType; 10411 toNode.propagatedType = node.propagatedType;
10070 toNode.staticType = node.staticType; 10412 toNode.staticType = node.staticType;
10071 return true; 10413 return true;
10072 } 10414 }
10073 return false; 10415 return false;
10074 } 10416 }
10075 10417
10076 @override 10418 @override
10077 bool visitMapLiteral(MapLiteral node) { 10419 bool visitMapLiteral(MapLiteral node) {
10078 MapLiteral toNode = this._toNode as MapLiteral; 10420 MapLiteral toNode = this._toNode as MapLiteral;
10079 if (_and(_isEqualTokens(node.constKeyword, toNode.constKeyword), 10421 if (_and(
10422 _isEqualTokens(node.constKeyword, toNode.constKeyword),
10080 _isEqualNodes(node.typeArguments, toNode.typeArguments), 10423 _isEqualNodes(node.typeArguments, toNode.typeArguments),
10081 _isEqualTokens(node.leftBracket, toNode.leftBracket), 10424 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10082 _isEqualNodeLists(node.entries, toNode.entries), 10425 _isEqualNodeLists(node.entries, toNode.entries),
10083 _isEqualTokens(node.rightBracket, toNode.rightBracket))) { 10426 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
10084 toNode.propagatedType = node.propagatedType; 10427 toNode.propagatedType = node.propagatedType;
10085 toNode.staticType = node.staticType; 10428 toNode.staticType = node.staticType;
10086 return true; 10429 return true;
10087 } 10430 }
10088 return false; 10431 return false;
10089 } 10432 }
10090 10433
10091 @override 10434 @override
10092 bool visitMapLiteralEntry(MapLiteralEntry node) { 10435 bool visitMapLiteralEntry(MapLiteralEntry node) {
10093 MapLiteralEntry toNode = this._toNode as MapLiteralEntry; 10436 MapLiteralEntry toNode = this._toNode as MapLiteralEntry;
10094 return _and(_isEqualNodes(node.key, toNode.key), 10437 return _and(
10438 _isEqualNodes(node.key, toNode.key),
10095 _isEqualTokens(node.separator, toNode.separator), 10439 _isEqualTokens(node.separator, toNode.separator),
10096 _isEqualNodes(node.value, toNode.value)); 10440 _isEqualNodes(node.value, toNode.value));
10097 } 10441 }
10098 10442
10099 @override 10443 @override
10100 bool visitMethodDeclaration(MethodDeclaration node) { 10444 bool visitMethodDeclaration(MethodDeclaration node) {
10101 MethodDeclaration toNode = this._toNode as MethodDeclaration; 10445 MethodDeclaration toNode = this._toNode as MethodDeclaration;
10102 return _and( 10446 return _and(
10103 _isEqualNodes(node.documentationComment, toNode.documentationComment), 10447 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10104 _isEqualNodeLists(node.metadata, toNode.metadata), 10448 _isEqualNodeLists(node.metadata, toNode.metadata),
10105 _isEqualTokens(node.externalKeyword, toNode.externalKeyword), 10449 _isEqualTokens(node.externalKeyword, toNode.externalKeyword),
10106 _isEqualTokens(node.modifierKeyword, toNode.modifierKeyword), 10450 _isEqualTokens(node.modifierKeyword, toNode.modifierKeyword),
10107 _isEqualNodes(node.returnType, toNode.returnType), 10451 _isEqualNodes(node.returnType, toNode.returnType),
10108 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword), 10452 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword),
10109 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword), 10453 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword),
10110 _isEqualNodes(node.name, toNode.name), 10454 _isEqualNodes(node.name, toNode.name),
10111 _isEqualNodes(node.parameters, toNode.parameters), 10455 _isEqualNodes(node.parameters, toNode.parameters),
10112 _isEqualNodes(node.body, toNode.body)); 10456 _isEqualNodes(node.body, toNode.body));
10113 } 10457 }
10114 10458
10115 @override 10459 @override
10116 bool visitMethodInvocation(MethodInvocation node) { 10460 bool visitMethodInvocation(MethodInvocation node) {
10117 MethodInvocation toNode = this._toNode as MethodInvocation; 10461 MethodInvocation toNode = this._toNode as MethodInvocation;
10118 if (_and(_isEqualNodes(node.target, toNode.target), 10462 if (_and(
10463 _isEqualNodes(node.target, toNode.target),
10119 _isEqualTokens(node.operator, toNode.operator), 10464 _isEqualTokens(node.operator, toNode.operator),
10120 _isEqualNodes(node.methodName, toNode.methodName), 10465 _isEqualNodes(node.methodName, toNode.methodName),
10121 _isEqualNodes(node.argumentList, toNode.argumentList))) { 10466 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10122 toNode.propagatedType = node.propagatedType; 10467 toNode.propagatedType = node.propagatedType;
10123 toNode.staticType = node.staticType; 10468 toNode.staticType = node.staticType;
10124 return true; 10469 return true;
10125 } 10470 }
10126 return false; 10471 return false;
10127 } 10472 }
10128 10473
(...skipping 12 matching lines...) Expand all
10141 @override 10486 @override
10142 bool visitNativeClause(NativeClause node) { 10487 bool visitNativeClause(NativeClause node) {
10143 NativeClause toNode = this._toNode as NativeClause; 10488 NativeClause toNode = this._toNode as NativeClause;
10144 return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword), 10489 return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
10145 _isEqualNodes(node.name, toNode.name)); 10490 _isEqualNodes(node.name, toNode.name));
10146 } 10491 }
10147 10492
10148 @override 10493 @override
10149 bool visitNativeFunctionBody(NativeFunctionBody node) { 10494 bool visitNativeFunctionBody(NativeFunctionBody node) {
10150 NativeFunctionBody toNode = this._toNode as NativeFunctionBody; 10495 NativeFunctionBody toNode = this._toNode as NativeFunctionBody;
10151 return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword), 10496 return _and(
10497 _isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
10152 _isEqualNodes(node.stringLiteral, toNode.stringLiteral), 10498 _isEqualNodes(node.stringLiteral, toNode.stringLiteral),
10153 _isEqualTokens(node.semicolon, toNode.semicolon)); 10499 _isEqualTokens(node.semicolon, toNode.semicolon));
10154 } 10500 }
10155 10501
10156 @override 10502 @override
10157 bool visitNullLiteral(NullLiteral node) { 10503 bool visitNullLiteral(NullLiteral node) {
10158 NullLiteral toNode = this._toNode as NullLiteral; 10504 NullLiteral toNode = this._toNode as NullLiteral;
10159 if (_isEqualTokens(node.literal, toNode.literal)) { 10505 if (_isEqualTokens(node.literal, toNode.literal)) {
10160 toNode.propagatedType = node.propagatedType; 10506 toNode.propagatedType = node.propagatedType;
10161 toNode.staticType = node.staticType; 10507 toNode.staticType = node.staticType;
10162 return true; 10508 return true;
10163 } 10509 }
10164 return false; 10510 return false;
10165 } 10511 }
10166 10512
10167 @override 10513 @override
10168 bool visitParenthesizedExpression(ParenthesizedExpression node) { 10514 bool visitParenthesizedExpression(ParenthesizedExpression node) {
10169 ParenthesizedExpression toNode = this._toNode as ParenthesizedExpression; 10515 ParenthesizedExpression toNode = this._toNode as ParenthesizedExpression;
10170 if (_and(_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10516 if (_and(
10517 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10171 _isEqualNodes(node.expression, toNode.expression), 10518 _isEqualNodes(node.expression, toNode.expression),
10172 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) { 10519 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) {
10173 toNode.propagatedType = node.propagatedType; 10520 toNode.propagatedType = node.propagatedType;
10174 toNode.staticType = node.staticType; 10521 toNode.staticType = node.staticType;
10175 return true; 10522 return true;
10176 } 10523 }
10177 return false; 10524 return false;
10178 } 10525 }
10179 10526
10180 @override 10527 @override
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
10218 toNode.staticElement = node.staticElement; 10565 toNode.staticElement = node.staticElement;
10219 toNode.staticType = node.staticType; 10566 toNode.staticType = node.staticType;
10220 return true; 10567 return true;
10221 } 10568 }
10222 return false; 10569 return false;
10223 } 10570 }
10224 10571
10225 @override 10572 @override
10226 bool visitPrefixedIdentifier(PrefixedIdentifier node) { 10573 bool visitPrefixedIdentifier(PrefixedIdentifier node) {
10227 PrefixedIdentifier toNode = this._toNode as PrefixedIdentifier; 10574 PrefixedIdentifier toNode = this._toNode as PrefixedIdentifier;
10228 if (_and(_isEqualNodes(node.prefix, toNode.prefix), 10575 if (_and(
10576 _isEqualNodes(node.prefix, toNode.prefix),
10229 _isEqualTokens(node.period, toNode.period), 10577 _isEqualTokens(node.period, toNode.period),
10230 _isEqualNodes(node.identifier, toNode.identifier))) { 10578 _isEqualNodes(node.identifier, toNode.identifier))) {
10231 toNode.propagatedType = node.propagatedType; 10579 toNode.propagatedType = node.propagatedType;
10232 toNode.staticType = node.staticType; 10580 toNode.staticType = node.staticType;
10233 return true; 10581 return true;
10234 } 10582 }
10235 return false; 10583 return false;
10236 } 10584 }
10237 10585
10238 @override 10586 @override
10239 bool visitPrefixExpression(PrefixExpression node) { 10587 bool visitPrefixExpression(PrefixExpression node) {
10240 PrefixExpression toNode = this._toNode as PrefixExpression; 10588 PrefixExpression toNode = this._toNode as PrefixExpression;
10241 if (_and(_isEqualTokens(node.operator, toNode.operator), 10589 if (_and(_isEqualTokens(node.operator, toNode.operator),
10242 _isEqualNodes(node.operand, toNode.operand))) { 10590 _isEqualNodes(node.operand, toNode.operand))) {
10243 toNode.propagatedElement = node.propagatedElement; 10591 toNode.propagatedElement = node.propagatedElement;
10244 toNode.propagatedType = node.propagatedType; 10592 toNode.propagatedType = node.propagatedType;
10245 toNode.staticElement = node.staticElement; 10593 toNode.staticElement = node.staticElement;
10246 toNode.staticType = node.staticType; 10594 toNode.staticType = node.staticType;
10247 return true; 10595 return true;
10248 } 10596 }
10249 return false; 10597 return false;
10250 } 10598 }
10251 10599
10252 @override 10600 @override
10253 bool visitPropertyAccess(PropertyAccess node) { 10601 bool visitPropertyAccess(PropertyAccess node) {
10254 PropertyAccess toNode = this._toNode as PropertyAccess; 10602 PropertyAccess toNode = this._toNode as PropertyAccess;
10255 if (_and(_isEqualNodes(node.target, toNode.target), 10603 if (_and(
10604 _isEqualNodes(node.target, toNode.target),
10256 _isEqualTokens(node.operator, toNode.operator), 10605 _isEqualTokens(node.operator, toNode.operator),
10257 _isEqualNodes(node.propertyName, toNode.propertyName))) { 10606 _isEqualNodes(node.propertyName, toNode.propertyName))) {
10258 toNode.propagatedType = node.propagatedType; 10607 toNode.propagatedType = node.propagatedType;
10259 toNode.staticType = node.staticType; 10608 toNode.staticType = node.staticType;
10260 return true; 10609 return true;
10261 } 10610 }
10262 return false; 10611 return false;
10263 } 10612 }
10264 10613
10265 @override 10614 @override
10266 bool visitRedirectingConstructorInvocation( 10615 bool visitRedirectingConstructorInvocation(
10267 RedirectingConstructorInvocation node) { 10616 RedirectingConstructorInvocation node) {
10268 RedirectingConstructorInvocation toNode = 10617 RedirectingConstructorInvocation toNode =
10269 this._toNode as RedirectingConstructorInvocation; 10618 this._toNode as RedirectingConstructorInvocation;
10270 if (_and(_isEqualTokens(node.thisKeyword, toNode.thisKeyword), 10619 if (_and(
10620 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
10271 _isEqualTokens(node.period, toNode.period), 10621 _isEqualTokens(node.period, toNode.period),
10272 _isEqualNodes(node.constructorName, toNode.constructorName), 10622 _isEqualNodes(node.constructorName, toNode.constructorName),
10273 _isEqualNodes(node.argumentList, toNode.argumentList))) { 10623 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10274 toNode.staticElement = node.staticElement; 10624 toNode.staticElement = node.staticElement;
10275 return true; 10625 return true;
10276 } 10626 }
10277 return false; 10627 return false;
10278 } 10628 }
10279 10629
10280 @override 10630 @override
10281 bool visitRethrowExpression(RethrowExpression node) { 10631 bool visitRethrowExpression(RethrowExpression node) {
10282 RethrowExpression toNode = this._toNode as RethrowExpression; 10632 RethrowExpression toNode = this._toNode as RethrowExpression;
10283 if (_isEqualTokens(node.rethrowKeyword, toNode.rethrowKeyword)) { 10633 if (_isEqualTokens(node.rethrowKeyword, toNode.rethrowKeyword)) {
10284 toNode.propagatedType = node.propagatedType; 10634 toNode.propagatedType = node.propagatedType;
10285 toNode.staticType = node.staticType; 10635 toNode.staticType = node.staticType;
10286 return true; 10636 return true;
10287 } 10637 }
10288 return false; 10638 return false;
10289 } 10639 }
10290 10640
10291 @override 10641 @override
10292 bool visitReturnStatement(ReturnStatement node) { 10642 bool visitReturnStatement(ReturnStatement node) {
10293 ReturnStatement toNode = this._toNode as ReturnStatement; 10643 ReturnStatement toNode = this._toNode as ReturnStatement;
10294 return _and(_isEqualTokens(node.returnKeyword, toNode.returnKeyword), 10644 return _and(
10645 _isEqualTokens(node.returnKeyword, toNode.returnKeyword),
10295 _isEqualNodes(node.expression, toNode.expression), 10646 _isEqualNodes(node.expression, toNode.expression),
10296 _isEqualTokens(node.semicolon, toNode.semicolon)); 10647 _isEqualTokens(node.semicolon, toNode.semicolon));
10297 } 10648 }
10298 10649
10299 @override 10650 @override
10300 bool visitScriptTag(ScriptTag node) { 10651 bool visitScriptTag(ScriptTag node) {
10301 ScriptTag toNode = this._toNode as ScriptTag; 10652 ScriptTag toNode = this._toNode as ScriptTag;
10302 return _isEqualTokens(node.scriptTag, toNode.scriptTag); 10653 return _isEqualTokens(node.scriptTag, toNode.scriptTag);
10303 } 10654 }
10304 10655
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
10354 toNode.staticType = node.staticType; 10705 toNode.staticType = node.staticType;
10355 return true; 10706 return true;
10356 } 10707 }
10357 return false; 10708 return false;
10358 } 10709 }
10359 10710
10360 @override 10711 @override
10361 bool visitSuperConstructorInvocation(SuperConstructorInvocation node) { 10712 bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
10362 SuperConstructorInvocation toNode = 10713 SuperConstructorInvocation toNode =
10363 this._toNode as SuperConstructorInvocation; 10714 this._toNode as SuperConstructorInvocation;
10364 if (_and(_isEqualTokens(node.superKeyword, toNode.superKeyword), 10715 if (_and(
10716 _isEqualTokens(node.superKeyword, toNode.superKeyword),
10365 _isEqualTokens(node.period, toNode.period), 10717 _isEqualTokens(node.period, toNode.period),
10366 _isEqualNodes(node.constructorName, toNode.constructorName), 10718 _isEqualNodes(node.constructorName, toNode.constructorName),
10367 _isEqualNodes(node.argumentList, toNode.argumentList))) { 10719 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10368 toNode.staticElement = node.staticElement; 10720 toNode.staticElement = node.staticElement;
10369 return true; 10721 return true;
10370 } 10722 }
10371 return false; 10723 return false;
10372 } 10724 }
10373 10725
10374 @override 10726 @override
10375 bool visitSuperExpression(SuperExpression node) { 10727 bool visitSuperExpression(SuperExpression node) {
10376 SuperExpression toNode = this._toNode as SuperExpression; 10728 SuperExpression toNode = this._toNode as SuperExpression;
10377 if (_isEqualTokens(node.superKeyword, toNode.superKeyword)) { 10729 if (_isEqualTokens(node.superKeyword, toNode.superKeyword)) {
10378 toNode.propagatedType = node.propagatedType; 10730 toNode.propagatedType = node.propagatedType;
10379 toNode.staticType = node.staticType; 10731 toNode.staticType = node.staticType;
10380 return true; 10732 return true;
10381 } 10733 }
10382 return false; 10734 return false;
10383 } 10735 }
10384 10736
10385 @override 10737 @override
10386 bool visitSwitchCase(SwitchCase node) { 10738 bool visitSwitchCase(SwitchCase node) {
10387 SwitchCase toNode = this._toNode as SwitchCase; 10739 SwitchCase toNode = this._toNode as SwitchCase;
10388 return _and(_isEqualNodeLists(node.labels, toNode.labels), 10740 return _and(
10741 _isEqualNodeLists(node.labels, toNode.labels),
10389 _isEqualTokens(node.keyword, toNode.keyword), 10742 _isEqualTokens(node.keyword, toNode.keyword),
10390 _isEqualNodes(node.expression, toNode.expression), 10743 _isEqualNodes(node.expression, toNode.expression),
10391 _isEqualTokens(node.colon, toNode.colon), 10744 _isEqualTokens(node.colon, toNode.colon),
10392 _isEqualNodeLists(node.statements, toNode.statements)); 10745 _isEqualNodeLists(node.statements, toNode.statements));
10393 } 10746 }
10394 10747
10395 @override 10748 @override
10396 bool visitSwitchDefault(SwitchDefault node) { 10749 bool visitSwitchDefault(SwitchDefault node) {
10397 SwitchDefault toNode = this._toNode as SwitchDefault; 10750 SwitchDefault toNode = this._toNode as SwitchDefault;
10398 return _and(_isEqualNodeLists(node.labels, toNode.labels), 10751 return _and(
10752 _isEqualNodeLists(node.labels, toNode.labels),
10399 _isEqualTokens(node.keyword, toNode.keyword), 10753 _isEqualTokens(node.keyword, toNode.keyword),
10400 _isEqualTokens(node.colon, toNode.colon), 10754 _isEqualTokens(node.colon, toNode.colon),
10401 _isEqualNodeLists(node.statements, toNode.statements)); 10755 _isEqualNodeLists(node.statements, toNode.statements));
10402 } 10756 }
10403 10757
10404 @override 10758 @override
10405 bool visitSwitchStatement(SwitchStatement node) { 10759 bool visitSwitchStatement(SwitchStatement node) {
10406 SwitchStatement toNode = this._toNode as SwitchStatement; 10760 SwitchStatement toNode = this._toNode as SwitchStatement;
10407 return _and(_isEqualTokens(node.switchKeyword, toNode.switchKeyword), 10761 return _and(
10762 _isEqualTokens(node.switchKeyword, toNode.switchKeyword),
10408 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10763 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10409 _isEqualNodes(node.expression, toNode.expression), 10764 _isEqualNodes(node.expression, toNode.expression),
10410 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10765 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10411 _isEqualTokens(node.leftBracket, toNode.leftBracket), 10766 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10412 _isEqualNodeLists(node.members, toNode.members), 10767 _isEqualNodeLists(node.members, toNode.members),
10413 _isEqualTokens(node.rightBracket, toNode.rightBracket)); 10768 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10414 } 10769 }
10415 10770
10416 @override 10771 @override
10417 bool visitSymbolLiteral(SymbolLiteral node) { 10772 bool visitSymbolLiteral(SymbolLiteral node) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
10455 return _and( 10810 return _and(
10456 _isEqualNodes(node.documentationComment, toNode.documentationComment), 10811 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10457 _isEqualNodeLists(node.metadata, toNode.metadata), 10812 _isEqualNodeLists(node.metadata, toNode.metadata),
10458 _isEqualNodes(node.variables, toNode.variables), 10813 _isEqualNodes(node.variables, toNode.variables),
10459 _isEqualTokens(node.semicolon, toNode.semicolon)); 10814 _isEqualTokens(node.semicolon, toNode.semicolon));
10460 } 10815 }
10461 10816
10462 @override 10817 @override
10463 bool visitTryStatement(TryStatement node) { 10818 bool visitTryStatement(TryStatement node) {
10464 TryStatement toNode = this._toNode as TryStatement; 10819 TryStatement toNode = this._toNode as TryStatement;
10465 return _and(_isEqualTokens(node.tryKeyword, toNode.tryKeyword), 10820 return _and(
10821 _isEqualTokens(node.tryKeyword, toNode.tryKeyword),
10466 _isEqualNodes(node.body, toNode.body), 10822 _isEqualNodes(node.body, toNode.body),
10467 _isEqualNodeLists(node.catchClauses, toNode.catchClauses), 10823 _isEqualNodeLists(node.catchClauses, toNode.catchClauses),
10468 _isEqualTokens(node.finallyKeyword, toNode.finallyKeyword), 10824 _isEqualTokens(node.finallyKeyword, toNode.finallyKeyword),
10469 _isEqualNodes(node.finallyBlock, toNode.finallyBlock)); 10825 _isEqualNodes(node.finallyBlock, toNode.finallyBlock));
10470 } 10826 }
10471 10827
10472 @override 10828 @override
10473 bool visitTypeArgumentList(TypeArgumentList node) { 10829 bool visitTypeArgumentList(TypeArgumentList node) {
10474 TypeArgumentList toNode = this._toNode as TypeArgumentList; 10830 TypeArgumentList toNode = this._toNode as TypeArgumentList;
10475 return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket), 10831 return _and(
10832 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10476 _isEqualNodeLists(node.arguments, toNode.arguments), 10833 _isEqualNodeLists(node.arguments, toNode.arguments),
10477 _isEqualTokens(node.rightBracket, toNode.rightBracket)); 10834 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10478 } 10835 }
10479 10836
10480 @override 10837 @override
10481 bool visitTypeName(TypeName node) { 10838 bool visitTypeName(TypeName node) {
10482 TypeName toNode = this._toNode as TypeName; 10839 TypeName toNode = this._toNode as TypeName;
10483 if (_and(_isEqualNodes(node.name, toNode.name), 10840 if (_and(_isEqualNodes(node.name, toNode.name),
10484 _isEqualNodes(node.typeArguments, toNode.typeArguments))) { 10841 _isEqualNodes(node.typeArguments, toNode.typeArguments))) {
10485 toNode.type = node.type; 10842 toNode.type = node.type;
10486 return true; 10843 return true;
10487 } 10844 }
10488 return false; 10845 return false;
10489 } 10846 }
10490 10847
10491 @override 10848 @override
10492 bool visitTypeParameter(TypeParameter node) { 10849 bool visitTypeParameter(TypeParameter node) {
10493 TypeParameter toNode = this._toNode as TypeParameter; 10850 TypeParameter toNode = this._toNode as TypeParameter;
10494 return _and( 10851 return _and(
10495 _isEqualNodes(node.documentationComment, toNode.documentationComment), 10852 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10496 _isEqualNodeLists(node.metadata, toNode.metadata), 10853 _isEqualNodeLists(node.metadata, toNode.metadata),
10497 _isEqualNodes(node.name, toNode.name), 10854 _isEqualNodes(node.name, toNode.name),
10498 _isEqualTokens(node.extendsKeyword, toNode.extendsKeyword), 10855 _isEqualTokens(node.extendsKeyword, toNode.extendsKeyword),
10499 _isEqualNodes(node.bound, toNode.bound)); 10856 _isEqualNodes(node.bound, toNode.bound));
10500 } 10857 }
10501 10858
10502 @override 10859 @override
10503 bool visitTypeParameterList(TypeParameterList node) { 10860 bool visitTypeParameterList(TypeParameterList node) {
10504 TypeParameterList toNode = this._toNode as TypeParameterList; 10861 TypeParameterList toNode = this._toNode as TypeParameterList;
10505 return _and(_isEqualTokens(node.leftBracket, toNode.leftBracket), 10862 return _and(
10863 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10506 _isEqualNodeLists(node.typeParameters, toNode.typeParameters), 10864 _isEqualNodeLists(node.typeParameters, toNode.typeParameters),
10507 _isEqualTokens(node.rightBracket, toNode.rightBracket)); 10865 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10508 } 10866 }
10509 10867
10510 @override 10868 @override
10511 bool visitVariableDeclaration(VariableDeclaration node) { 10869 bool visitVariableDeclaration(VariableDeclaration node) {
10512 VariableDeclaration toNode = this._toNode as VariableDeclaration; 10870 VariableDeclaration toNode = this._toNode as VariableDeclaration;
10513 return _and( 10871 return _and(
10514 _isEqualNodes(node.documentationComment, toNode.documentationComment), 10872 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10515 _isEqualNodeLists(node.metadata, toNode.metadata), 10873 _isEqualNodeLists(node.metadata, toNode.metadata),
(...skipping 17 matching lines...) Expand all
10533 bool visitVariableDeclarationStatement(VariableDeclarationStatement node) { 10891 bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
10534 VariableDeclarationStatement toNode = 10892 VariableDeclarationStatement toNode =
10535 this._toNode as VariableDeclarationStatement; 10893 this._toNode as VariableDeclarationStatement;
10536 return _and(_isEqualNodes(node.variables, toNode.variables), 10894 return _and(_isEqualNodes(node.variables, toNode.variables),
10537 _isEqualTokens(node.semicolon, toNode.semicolon)); 10895 _isEqualTokens(node.semicolon, toNode.semicolon));
10538 } 10896 }
10539 10897
10540 @override 10898 @override
10541 bool visitWhileStatement(WhileStatement node) { 10899 bool visitWhileStatement(WhileStatement node) {
10542 WhileStatement toNode = this._toNode as WhileStatement; 10900 WhileStatement toNode = this._toNode as WhileStatement;
10543 return _and(_isEqualTokens(node.whileKeyword, toNode.whileKeyword), 10901 return _and(
10902 _isEqualTokens(node.whileKeyword, toNode.whileKeyword),
10544 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis), 10903 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10545 _isEqualNodes(node.condition, toNode.condition), 10904 _isEqualNodes(node.condition, toNode.condition),
10546 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis), 10905 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10547 _isEqualNodes(node.body, toNode.body)); 10906 _isEqualNodes(node.body, toNode.body));
10548 } 10907 }
10549 10908
10550 @override 10909 @override
10551 bool visitWithClause(WithClause node) { 10910 bool visitWithClause(WithClause node) {
10552 WithClause toNode = this._toNode as WithClause; 10911 WithClause toNode = this._toNode as WithClause;
10553 return _and(_isEqualTokens(node.withKeyword, toNode.withKeyword), 10912 return _and(_isEqualTokens(node.withKeyword, toNode.withKeyword),
10554 _isEqualNodeLists(node.mixinTypes, toNode.mixinTypes)); 10913 _isEqualNodeLists(node.mixinTypes, toNode.mixinTypes));
10555 } 10914 }
10556 10915
10557 @override 10916 @override
10558 bool visitYieldStatement(YieldStatement node) { 10917 bool visitYieldStatement(YieldStatement node) {
10559 YieldStatement toNode = this._toNode as YieldStatement; 10918 YieldStatement toNode = this._toNode as YieldStatement;
10560 return _and(_isEqualTokens(node.yieldKeyword, toNode.yieldKeyword), 10919 return _and(
10920 _isEqualTokens(node.yieldKeyword, toNode.yieldKeyword),
10561 _isEqualNodes(node.expression, toNode.expression), 10921 _isEqualNodes(node.expression, toNode.expression),
10562 _isEqualTokens(node.semicolon, toNode.semicolon)); 10922 _isEqualTokens(node.semicolon, toNode.semicolon));
10563 } 10923 }
10564 10924
10565 /** 10925 /**
10566 * Return `true` if all of the parameters are `true`. 10926 * Return `true` if all of the parameters are `true`.
10567 */ 10927 */
10568 bool _and(bool b1, bool b2, [bool b3 = true, bool b4 = true, bool b5 = true, 10928 bool _and(bool b1, bool b2,
10569 bool b6 = true, bool b7 = true, bool b8 = true, bool b9 = true, 10929 [bool b3 = true,
10570 bool b10 = true, bool b11 = true, bool b12 = true, bool b13 = true]) { 10930 bool b4 = true,
10931 bool b5 = true,
10932 bool b6 = true,
10933 bool b7 = true,
10934 bool b8 = true,
10935 bool b9 = true,
10936 bool b10 = true,
10937 bool b11 = true,
10938 bool b12 = true,
10939 bool b13 = true]) {
10571 // TODO(brianwilkerson) Inline this method. 10940 // TODO(brianwilkerson) Inline this method.
10572 return b1 && 10941 return b1 &&
10573 b2 && 10942 b2 &&
10574 b3 && 10943 b3 &&
10575 b4 && 10944 b4 &&
10576 b5 && 10945 b5 &&
10577 b6 && 10946 b6 &&
10578 b7 && 10947 b7 &&
10579 b8 && 10948 b8 &&
10580 b9 && 10949 b9 &&
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
10670 } 11039 }
10671 11040
10672 /** 11041 /**
10673 * Copy resolution data from the [fromNode] to the [toNode]. 11042 * Copy resolution data from the [fromNode] to the [toNode].
10674 */ 11043 */
10675 static void copyResolutionData(AstNode fromNode, AstNode toNode) { 11044 static void copyResolutionData(AstNode fromNode, AstNode toNode) {
10676 ResolutionCopier copier = new ResolutionCopier(); 11045 ResolutionCopier copier = new ResolutionCopier();
10677 copier._isEqualNodes(fromNode, toNode); 11046 copier._isEqualNodes(fromNode, toNode);
10678 } 11047 }
10679 } 11048 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698