| OLD | NEW |
| 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 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
| 7 | 7 |
| 8 library engine.parser; | 8 library engine.parser; |
| 9 | 9 |
| 10 import 'dart:collection'; |
| 10 import "dart:math" as math; | 11 import "dart:math" as math; |
| 11 import 'dart:collection'; | |
| 12 | 12 |
| 13 import 'ast.dart'; | 13 import 'ast.dart'; |
| 14 import 'engine.dart' show AnalysisEngine, AnalysisOptionsImpl; | 14 import 'engine.dart' show AnalysisEngine, AnalysisOptionsImpl; |
| 15 import 'error.dart'; | 15 import 'error.dart'; |
| 16 import 'java_core.dart'; | 16 import 'java_core.dart'; |
| 17 import 'java_engine.dart'; | 17 import 'java_engine.dart'; |
| 18 import 'scanner.dart'; | 18 import 'scanner.dart'; |
| 19 import 'source.dart'; | 19 import 'source.dart'; |
| 20 import 'utilities_collection.dart' show TokenMap; | 20 import 'utilities_collection.dart' show TokenMap; |
| 21 import 'utilities_dart.dart'; | 21 import 'utilities_dart.dart'; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 'parseLibraryName_2': new MethodTrampoline( | 256 'parseLibraryName_2': new MethodTrampoline( |
| 257 2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)), | 257 2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)), |
| 258 'parseListLiteral_2': new MethodTrampoline( | 258 'parseListLiteral_2': new MethodTrampoline( |
| 259 2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)), | 259 2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)), |
| 260 'parseListOrMapLiteral_1': new MethodTrampoline( | 260 'parseListOrMapLiteral_1': new MethodTrampoline( |
| 261 1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)), | 261 1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)), |
| 262 'parseLogicalAndExpression_0': new MethodTrampoline( | 262 'parseLogicalAndExpression_0': new MethodTrampoline( |
| 263 0, (Parser target) => target._parseLogicalAndExpression()), | 263 0, (Parser target) => target._parseLogicalAndExpression()), |
| 264 'parseMapLiteral_2': new MethodTrampoline( | 264 'parseMapLiteral_2': new MethodTrampoline( |
| 265 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)), | 265 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)), |
| 266 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6, | 266 'parseMethodDeclarationAfterParameters_7': new MethodTrampoline(7, |
| 267 (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target | 267 (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6) => target |
| 268 ._parseMethodDeclarationAfterParameters( | 268 ._parseMethodDeclarationAfterParameters( |
| 269 arg0, arg1, arg2, arg3, arg4, arg5)), | 269 arg0, arg1, arg2, arg3, arg4, arg5, arg6)), |
| 270 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, | 270 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, |
| 271 (Parser target, arg0, arg1, arg2, arg3) => target | 271 (Parser target, arg0, arg1, arg2, arg3) => target |
| 272 ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)), | 272 ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)), |
| 273 'parseModifiers_0': | 273 'parseModifiers_0': |
| 274 new MethodTrampoline(0, (Parser target) => target._parseModifiers()), | 274 new MethodTrampoline(0, (Parser target) => target._parseModifiers()), |
| 275 'parseMultiplicativeExpression_0': new MethodTrampoline( | 275 'parseMultiplicativeExpression_0': new MethodTrampoline( |
| 276 0, (Parser target) => target._parseMultiplicativeExpression()), | 276 0, (Parser target) => target._parseMultiplicativeExpression()), |
| 277 'parseNativeClause_0': | 277 'parseNativeClause_0': |
| 278 new MethodTrampoline(0, (Parser target) => target._parseNativeClause()), | 278 new MethodTrampoline(0, (Parser target) => target._parseNativeClause()), |
| 279 'parseNewExpression_0': | 279 'parseNewExpression_0': |
| (...skipping 1793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2073 */ | 2073 */ |
| 2074 bool _inSwitch = false; | 2074 bool _inSwitch = false; |
| 2075 | 2075 |
| 2076 /** | 2076 /** |
| 2077 * A flag indicating whether the parser is currently in a constructor field | 2077 * A flag indicating whether the parser is currently in a constructor field |
| 2078 * initializer, with no intervening parens, braces, or brackets. | 2078 * initializer, with no intervening parens, braces, or brackets. |
| 2079 */ | 2079 */ |
| 2080 bool _inInitializer = false; | 2080 bool _inInitializer = false; |
| 2081 | 2081 |
| 2082 /** | 2082 /** |
| 2083 * A flag indicating whether the parser is to parse generic method syntax. |
| 2084 */ |
| 2085 bool parseGenericMethods = false; |
| 2086 |
| 2087 /** |
| 2083 * Initialize a newly created parser to parse the content of the given | 2088 * Initialize a newly created parser to parse the content of the given |
| 2084 * [_source] and to report any errors that are found to the given | 2089 * [_source] and to report any errors that are found to the given |
| 2085 * [_errorListener]. | 2090 * [_errorListener]. |
| 2086 */ | 2091 */ |
| 2087 Parser(this._source, this._errorListener); | 2092 Parser(this._source, this._errorListener); |
| 2088 | 2093 |
| 2089 void set currentToken(Token currentToken) { | 2094 void set currentToken(Token currentToken) { |
| 2090 this._currentToken = currentToken; | 2095 this._currentToken = currentToken; |
| 2091 } | 2096 } |
| 2092 | 2097 |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2433 if (commentAndMetadata.comment != null || | 2438 if (commentAndMetadata.comment != null || |
| 2434 !commentAndMetadata.metadata.isEmpty) { | 2439 !commentAndMetadata.metadata.isEmpty) { |
| 2435 // | 2440 // |
| 2436 // We appear to have found an incomplete declaration at the end of the | 2441 // We appear to have found an incomplete declaration at the end of the |
| 2437 // class. At this point it consists of a metadata, which we don't want | 2442 // class. At this point it consists of a metadata, which we don't want |
| 2438 // to loose, so we'll treat it as a method declaration with a missing | 2443 // to loose, so we'll treat it as a method declaration with a missing |
| 2439 // name, parameters and empty body. | 2444 // name, parameters and empty body. |
| 2440 // | 2445 // |
| 2441 return new MethodDeclaration(commentAndMetadata.comment, | 2446 return new MethodDeclaration(commentAndMetadata.comment, |
| 2442 commentAndMetadata.metadata, null, null, null, null, null, | 2447 commentAndMetadata.metadata, null, null, null, null, null, |
| 2443 _createSyntheticIdentifier(), new FormalParameterList( | 2448 _createSyntheticIdentifier(), null, new FormalParameterList( |
| 2444 null, new List<FormalParameter>(), null, null, null), | 2449 null, new List<FormalParameter>(), null, null, null), |
| 2445 new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON))); | 2450 new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON))); |
| 2446 } | 2451 } |
| 2447 return null; | 2452 return null; |
| 2448 } else if (_tokenMatches(_peek(), TokenType.PERIOD) && | 2453 } else if (_tokenMatches(_peek(), TokenType.PERIOD) && |
| 2449 _tokenMatchesIdentifier(_peekAt(2)) && | 2454 _tokenMatchesIdentifier(_peekAt(2)) && |
| 2450 _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) { | 2455 _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) { |
| 2451 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, | 2456 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, |
| 2452 _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, | 2457 _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, |
| 2453 parseSimpleIdentifier(), getAndAdvance(), parseSimpleIdentifier(), | 2458 parseSimpleIdentifier(), getAndAdvance(), parseSimpleIdentifier(), |
| 2454 parseFormalParameterList()); | 2459 parseFormalParameterList()); |
| 2455 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { | 2460 } else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) { |
| 2456 SimpleIdentifier methodName = parseSimpleIdentifier(); | 2461 SimpleIdentifier methodName = parseSimpleIdentifier(); |
| 2457 FormalParameterList parameters = parseFormalParameterList(); | 2462 FormalParameterList parameters = parseFormalParameterList(); |
| 2458 if (_matches(TokenType.COLON) || | 2463 if (_matches(TokenType.COLON) || |
| 2459 modifiers.factoryKeyword != null || | 2464 modifiers.factoryKeyword != null || |
| 2460 methodName.name == className) { | 2465 methodName.name == className) { |
| 2461 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, | 2466 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, |
| 2462 _validateModifiersForConstructor(modifiers), | 2467 _validateModifiersForConstructor(modifiers), |
| 2463 modifiers.factoryKeyword, methodName, null, null, parameters); | 2468 modifiers.factoryKeyword, methodName, null, null, parameters); |
| 2464 } | 2469 } |
| 2465 _validateModifiersForGetterOrSetterOrMethod(modifiers); | 2470 _validateModifiersForGetterOrSetterOrMethod(modifiers); |
| 2466 _validateFormalParameterList(parameters); | 2471 _validateFormalParameterList(parameters); |
| 2467 return _parseMethodDeclarationAfterParameters(commentAndMetadata, | 2472 return _parseMethodDeclarationAfterParameters(commentAndMetadata, |
| 2468 modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, | 2473 modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, |
| 2469 parameters); | 2474 null, parameters); |
| 2470 } else if (_peek() | 2475 } else if (_peek() |
| 2471 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { | 2476 .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) { |
| 2472 if (modifiers.constKeyword == null && | 2477 if (modifiers.constKeyword == null && |
| 2473 modifiers.finalKeyword == null && | 2478 modifiers.finalKeyword == null && |
| 2474 modifiers.varKeyword == null) { | 2479 modifiers.varKeyword == null) { |
| 2475 _reportErrorForCurrentToken( | 2480 _reportErrorForCurrentToken( |
| 2476 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE); | 2481 ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE); |
| 2477 } | 2482 } |
| 2478 return _parseInitializedIdentifierList(commentAndMetadata, | 2483 return _parseInitializedIdentifierList(commentAndMetadata, |
| 2479 modifiers.staticKeyword, _validateModifiersForField(modifiers), null); | 2484 modifiers.staticKeyword, _validateModifiersForField(modifiers), null); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2539 if (methodName.name == className) { | 2544 if (methodName.name == className) { |
| 2540 _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type); | 2545 _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type); |
| 2541 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, | 2546 return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, |
| 2542 _validateModifiersForConstructor(modifiers), | 2547 _validateModifiersForConstructor(modifiers), |
| 2543 modifiers.factoryKeyword, methodName, null, null, parameters); | 2548 modifiers.factoryKeyword, methodName, null, null, parameters); |
| 2544 } | 2549 } |
| 2545 _validateModifiersForGetterOrSetterOrMethod(modifiers); | 2550 _validateModifiersForGetterOrSetterOrMethod(modifiers); |
| 2546 _validateFormalParameterList(parameters); | 2551 _validateFormalParameterList(parameters); |
| 2547 return _parseMethodDeclarationAfterParameters(commentAndMetadata, | 2552 return _parseMethodDeclarationAfterParameters(commentAndMetadata, |
| 2548 modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, | 2553 modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, |
| 2549 parameters); | 2554 null, parameters); |
| 2550 } else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) { | 2555 } else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) { |
| 2551 // We have found "TypeName identifier {", and are guessing that this is a | 2556 // We have found "TypeName identifier {", and are guessing that this is a |
| 2552 // getter without the keyword 'get'. | 2557 // getter without the keyword 'get'. |
| 2553 _validateModifiersForGetterOrSetterOrMethod(modifiers); | 2558 _validateModifiersForGetterOrSetterOrMethod(modifiers); |
| 2554 _reportErrorForCurrentToken(ParserErrorCode.MISSING_GET); | 2559 _reportErrorForCurrentToken(ParserErrorCode.MISSING_GET); |
| 2555 _currentToken = _injectToken( | 2560 _currentToken = _injectToken( |
| 2556 new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset)); | 2561 new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset)); |
| 2557 return _parseGetter(commentAndMetadata, modifiers.externalKeyword, | 2562 return _parseGetter(commentAndMetadata, modifiers.externalKeyword, |
| 2558 modifiers.staticKeyword, type); | 2563 modifiers.staticKeyword, type); |
| 2559 } | 2564 } |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3036 * parsed. | 3041 * parsed. |
| 3037 * | 3042 * |
| 3038 * functionExpression ::= | 3043 * functionExpression ::= |
| 3039 * formalParameterList functionExpressionBody | 3044 * formalParameterList functionExpressionBody |
| 3040 */ | 3045 */ |
| 3041 FunctionExpression parseFunctionExpression() { | 3046 FunctionExpression parseFunctionExpression() { |
| 3042 FormalParameterList parameters = parseFormalParameterList(); | 3047 FormalParameterList parameters = parseFormalParameterList(); |
| 3043 _validateFormalParameterList(parameters); | 3048 _validateFormalParameterList(parameters); |
| 3044 FunctionBody body = | 3049 FunctionBody body = |
| 3045 _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true); | 3050 _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true); |
| 3046 return new FunctionExpression(parameters, body); | 3051 return new FunctionExpression(null, parameters, body); |
| 3047 } | 3052 } |
| 3048 | 3053 |
| 3049 /** | 3054 /** |
| 3050 * Parse an if-null expression. Return the if-null expression that was | 3055 * Parse an if-null expression. Return the if-null expression that was |
| 3051 * parsed. | 3056 * parsed. |
| 3052 * | 3057 * |
| 3053 * ifNullExpression ::= logicalOrExpression ('??' logicalOrExpression)* | 3058 * ifNullExpression ::= logicalOrExpression ('??' logicalOrExpression)* |
| 3054 */ | 3059 */ |
| 3055 Expression parseIfNullExpression() { | 3060 Expression parseIfNullExpression() { |
| 3056 Expression expression = parseLogicalOrExpression(); | 3061 Expression expression = parseLogicalOrExpression(); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3166 } | 3171 } |
| 3167 SimpleIdentifier identifier = parseSimpleIdentifier(); | 3172 SimpleIdentifier identifier = parseSimpleIdentifier(); |
| 3168 if (_matches(TokenType.OPEN_PAREN)) { | 3173 if (_matches(TokenType.OPEN_PAREN)) { |
| 3169 FormalParameterList parameters = parseFormalParameterList(); | 3174 FormalParameterList parameters = parseFormalParameterList(); |
| 3170 if (thisKeyword == null) { | 3175 if (thisKeyword == null) { |
| 3171 if (holder.keyword != null) { | 3176 if (holder.keyword != null) { |
| 3172 _reportErrorForToken( | 3177 _reportErrorForToken( |
| 3173 ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword); | 3178 ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword); |
| 3174 } | 3179 } |
| 3175 return new FunctionTypedFormalParameter(commentAndMetadata.comment, | 3180 return new FunctionTypedFormalParameter(commentAndMetadata.comment, |
| 3176 commentAndMetadata.metadata, holder.type, identifier, parameters); | 3181 commentAndMetadata.metadata, holder.type, identifier, null, |
| 3182 parameters); |
| 3177 } else { | 3183 } else { |
| 3178 return new FieldFormalParameter(commentAndMetadata.comment, | 3184 return new FieldFormalParameter(commentAndMetadata.comment, |
| 3179 commentAndMetadata.metadata, holder.keyword, holder.type, | 3185 commentAndMetadata.metadata, holder.keyword, holder.type, |
| 3180 thisKeyword, period, identifier, parameters); | 3186 thisKeyword, period, identifier, null, parameters); |
| 3181 } | 3187 } |
| 3182 } | 3188 } |
| 3183 TypeName type = holder.type; | 3189 TypeName type = holder.type; |
| 3184 if (type != null) { | 3190 if (type != null) { |
| 3185 if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) { | 3191 if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) { |
| 3186 _reportErrorForToken( | 3192 _reportErrorForToken( |
| 3187 ParserErrorCode.VOID_PARAMETER, type.name.beginToken); | 3193 ParserErrorCode.VOID_PARAMETER, type.name.beginToken); |
| 3188 } else if (holder.keyword != null && | 3194 } else if (holder.keyword != null && |
| 3189 _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) { | 3195 _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) { |
| 3190 _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword); | 3196 _reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword); |
| 3191 } | 3197 } |
| 3192 } | 3198 } |
| 3193 if (thisKeyword != null) { | 3199 if (thisKeyword != null) { |
| 3194 return new FieldFormalParameter(commentAndMetadata.comment, | 3200 return new FieldFormalParameter(commentAndMetadata.comment, |
| 3195 commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, | 3201 commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, |
| 3196 period, identifier, null); | 3202 period, identifier, null, null); |
| 3197 } | 3203 } |
| 3198 return new SimpleFormalParameter(commentAndMetadata.comment, | 3204 return new SimpleFormalParameter(commentAndMetadata.comment, |
| 3199 commentAndMetadata.metadata, holder.keyword, holder.type, identifier); | 3205 commentAndMetadata.metadata, holder.keyword, holder.type, identifier); |
| 3200 } | 3206 } |
| 3201 | 3207 |
| 3202 /** | 3208 /** |
| 3203 * Parse a prefixed identifier. Return the prefixed identifier that was | 3209 * Parse a prefixed identifier. Return the prefixed identifier that was |
| 3204 * parsed. | 3210 * parsed. |
| 3205 * | 3211 * |
| 3206 * prefixedIdentifier ::= | 3212 * prefixedIdentifier ::= |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3475 } | 3481 } |
| 3476 | 3482 |
| 3477 /** | 3483 /** |
| 3478 * Convert the given [method] declaration into the nearest valid top-level | 3484 * Convert the given [method] declaration into the nearest valid top-level |
| 3479 * function declaration (that is, the function declaration that most closely | 3485 * function declaration (that is, the function declaration that most closely |
| 3480 * captures the components of the given method declaration). | 3486 * captures the components of the given method declaration). |
| 3481 */ | 3487 */ |
| 3482 FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) => | 3488 FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) => |
| 3483 new FunctionDeclaration(method.documentationComment, method.metadata, | 3489 new FunctionDeclaration(method.documentationComment, method.metadata, |
| 3484 method.externalKeyword, method.returnType, method.propertyKeyword, | 3490 method.externalKeyword, method.returnType, method.propertyKeyword, |
| 3485 method.name, new FunctionExpression(method.parameters, method.body)); | 3491 method.name, new FunctionExpression( |
| 3492 method.typeParameters, method.parameters, method.body)); |
| 3486 | 3493 |
| 3487 /** | 3494 /** |
| 3488 * Return `true` if the current token could be the start of a compilation unit | 3495 * Return `true` if the current token could be the start of a compilation unit |
| 3489 * member. This method is used for recovery purposes to decide when to stop | 3496 * member. This method is used for recovery purposes to decide when to stop |
| 3490 * skipping tokens after finding an error while parsing a compilation unit | 3497 * skipping tokens after finding an error while parsing a compilation unit |
| 3491 * member. | 3498 * member. |
| 3492 */ | 3499 */ |
| 3493 bool _couldBeStartOfCompilationUnitMember() { | 3500 bool _couldBeStartOfCompilationUnitMember() { |
| 3494 if ((_matchesKeyword(Keyword.IMPORT) || | 3501 if ((_matchesKeyword(Keyword.IMPORT) || |
| 3495 _matchesKeyword(Keyword.EXPORT) || | 3502 _matchesKeyword(Keyword.EXPORT) || |
| (...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4174 // ambiguity by determining whether the primary consists of anything other | 4181 // ambiguity by determining whether the primary consists of anything other |
| 4175 // than an identifier and/or is followed by an assignableSelector. | 4182 // than an identifier and/or is followed by an assignableSelector. |
| 4176 // | 4183 // |
| 4177 Expression expression = _parsePrimaryExpression(); | 4184 Expression expression = _parsePrimaryExpression(); |
| 4178 bool isOptional = primaryAllowed || expression is SimpleIdentifier; | 4185 bool isOptional = primaryAllowed || expression is SimpleIdentifier; |
| 4179 while (true) { | 4186 while (true) { |
| 4180 while (_matches(TokenType.OPEN_PAREN)) { | 4187 while (_matches(TokenType.OPEN_PAREN)) { |
| 4181 ArgumentList argumentList = parseArgumentList(); | 4188 ArgumentList argumentList = parseArgumentList(); |
| 4182 if (expression is SimpleIdentifier) { | 4189 if (expression is SimpleIdentifier) { |
| 4183 expression = new MethodInvocation( | 4190 expression = new MethodInvocation( |
| 4184 null, null, expression as SimpleIdentifier, argumentList); | 4191 null, null, expression as SimpleIdentifier, null, argumentList); |
| 4185 } else if (expression is PrefixedIdentifier) { | 4192 } else if (expression is PrefixedIdentifier) { |
| 4186 PrefixedIdentifier identifier = expression as PrefixedIdentifier; | 4193 PrefixedIdentifier identifier = expression as PrefixedIdentifier; |
| 4187 expression = new MethodInvocation(identifier.prefix, | 4194 expression = new MethodInvocation(identifier.prefix, |
| 4188 identifier.period, identifier.identifier, argumentList); | 4195 identifier.period, identifier.identifier, null, argumentList); |
| 4189 } else if (expression is PropertyAccess) { | 4196 } else if (expression is PropertyAccess) { |
| 4190 PropertyAccess access = expression as PropertyAccess; | 4197 PropertyAccess access = expression as PropertyAccess; |
| 4191 expression = new MethodInvocation(access.target, access.operator, | 4198 expression = new MethodInvocation(access.target, access.operator, |
| 4192 access.propertyName, argumentList); | 4199 access.propertyName, null, argumentList); |
| 4193 } else { | 4200 } else { |
| 4194 expression = | 4201 expression = |
| 4195 new FunctionExpressionInvocation(expression, argumentList); | 4202 new FunctionExpressionInvocation(expression, null, argumentList); |
| 4196 } | 4203 } |
| 4197 if (!primaryAllowed) { | 4204 if (!primaryAllowed) { |
| 4198 isOptional = false; | 4205 isOptional = false; |
| 4199 } | 4206 } |
| 4200 } | 4207 } |
| 4201 Expression selectorExpression = _parseAssignableSelector( | 4208 Expression selectorExpression = _parseAssignableSelector( |
| 4202 expression, isOptional || (expression is PrefixedIdentifier)); | 4209 expression, isOptional || (expression is PrefixedIdentifier)); |
| 4203 if (identical(selectorExpression, expression)) { | 4210 if (identical(selectorExpression, expression)) { |
| 4204 if (!isOptional && (expression is PrefixedIdentifier)) { | 4211 if (!isOptional && (expression is PrefixedIdentifier)) { |
| 4205 PrefixedIdentifier identifier = expression as PrefixedIdentifier; | 4212 PrefixedIdentifier identifier = expression as PrefixedIdentifier; |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4376 _reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, | 4383 _reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, |
| 4377 [_currentToken.lexeme]); | 4384 [_currentToken.lexeme]); |
| 4378 functionName = _createSyntheticIdentifier(); | 4385 functionName = _createSyntheticIdentifier(); |
| 4379 } | 4386 } |
| 4380 assert((expression == null && functionName != null) || | 4387 assert((expression == null && functionName != null) || |
| 4381 (expression != null && functionName == null)); | 4388 (expression != null && functionName == null)); |
| 4382 if (_currentToken.type == TokenType.OPEN_PAREN) { | 4389 if (_currentToken.type == TokenType.OPEN_PAREN) { |
| 4383 while (_currentToken.type == TokenType.OPEN_PAREN) { | 4390 while (_currentToken.type == TokenType.OPEN_PAREN) { |
| 4384 if (functionName != null) { | 4391 if (functionName != null) { |
| 4385 expression = new MethodInvocation( | 4392 expression = new MethodInvocation( |
| 4386 expression, period, functionName, parseArgumentList()); | 4393 expression, period, functionName, null, parseArgumentList()); |
| 4387 period = null; | 4394 period = null; |
| 4388 functionName = null; | 4395 functionName = null; |
| 4389 } else if (expression == null) { | 4396 } else if (expression == null) { |
| 4390 // It should not be possible to get here. | 4397 // It should not be possible to get here. |
| 4391 expression = new MethodInvocation(expression, period, | 4398 expression = new MethodInvocation(expression, period, |
| 4392 _createSyntheticIdentifier(), parseArgumentList()); | 4399 _createSyntheticIdentifier(), null, parseArgumentList()); |
| 4393 } else { | 4400 } else { |
| 4394 expression = | 4401 expression = new FunctionExpressionInvocation( |
| 4395 new FunctionExpressionInvocation(expression, parseArgumentList()); | 4402 expression, null, parseArgumentList()); |
| 4396 } | 4403 } |
| 4397 } | 4404 } |
| 4398 } else if (functionName != null) { | 4405 } else if (functionName != null) { |
| 4399 expression = new PropertyAccess(expression, period, functionName); | 4406 expression = new PropertyAccess(expression, period, functionName); |
| 4400 period = null; | 4407 period = null; |
| 4401 } | 4408 } |
| 4402 assert(expression != null); | 4409 assert(expression != null); |
| 4403 bool progress = true; | 4410 bool progress = true; |
| 4404 while (progress) { | 4411 while (progress) { |
| 4405 progress = false; | 4412 progress = false; |
| 4406 Expression selector = _parseAssignableSelector(expression, true); | 4413 Expression selector = _parseAssignableSelector(expression, true); |
| 4407 if (!identical(selector, expression)) { | 4414 if (!identical(selector, expression)) { |
| 4408 expression = selector; | 4415 expression = selector; |
| 4409 progress = true; | 4416 progress = true; |
| 4410 while (_currentToken.type == TokenType.OPEN_PAREN) { | 4417 while (_currentToken.type == TokenType.OPEN_PAREN) { |
| 4411 if (expression is PropertyAccess) { | 4418 if (expression is PropertyAccess) { |
| 4412 PropertyAccess propertyAccess = expression as PropertyAccess; | 4419 PropertyAccess propertyAccess = expression as PropertyAccess; |
| 4413 expression = new MethodInvocation(propertyAccess.target, | 4420 expression = new MethodInvocation(propertyAccess.target, |
| 4414 propertyAccess.operator, propertyAccess.propertyName, | 4421 propertyAccess.operator, propertyAccess.propertyName, null, |
| 4415 parseArgumentList()); | 4422 parseArgumentList()); |
| 4416 } else { | 4423 } else { |
| 4417 expression = new FunctionExpressionInvocation( | 4424 expression = new FunctionExpressionInvocation( |
| 4418 expression, parseArgumentList()); | 4425 expression, null, parseArgumentList()); |
| 4419 } | 4426 } |
| 4420 } | 4427 } |
| 4421 } | 4428 } |
| 4422 } | 4429 } |
| 4423 if (_currentToken.type.isAssignmentOperator) { | 4430 if (_currentToken.type.isAssignmentOperator) { |
| 4424 Token operator = getAndAdvance(); | 4431 Token operator = getAndAdvance(); |
| 4425 _ensureAssignable(expression); | 4432 _ensureAssignable(expression); |
| 4426 expression = new AssignmentExpression( | 4433 expression = new AssignmentExpression( |
| 4427 expression, operator, parseExpressionWithoutCascade()); | 4434 expression, operator, parseExpressionWithoutCascade()); |
| 4428 } | 4435 } |
| (...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5774 } else { | 5781 } else { |
| 5775 body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON)); | 5782 body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON)); |
| 5776 } | 5783 } |
| 5777 // if (!isStatement && matches(TokenType.SEMICOLON)) { | 5784 // if (!isStatement && matches(TokenType.SEMICOLON)) { |
| 5778 // // TODO(brianwilkerson) Improve this error message. | 5785 // // TODO(brianwilkerson) Improve this error message. |
| 5779 // reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme
()); | 5786 // reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme
()); |
| 5780 // advance(); | 5787 // advance(); |
| 5781 // } | 5788 // } |
| 5782 return new FunctionDeclaration(commentAndMetadata.comment, | 5789 return new FunctionDeclaration(commentAndMetadata.comment, |
| 5783 commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, | 5790 commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, |
| 5784 new FunctionExpression(parameters, body)); | 5791 new FunctionExpression(null, parameters, body)); |
| 5785 } | 5792 } |
| 5786 | 5793 |
| 5787 /** | 5794 /** |
| 5788 * Parse a function declaration statement. Return the function declaration | 5795 * Parse a function declaration statement. Return the function declaration |
| 5789 * statement that was parsed. | 5796 * statement that was parsed. |
| 5790 * | 5797 * |
| 5791 * functionDeclarationStatement ::= | 5798 * functionDeclarationStatement ::= |
| 5792 * functionSignature functionBody | 5799 * functionSignature functionBody |
| 5793 */ | 5800 */ |
| 5794 Statement _parseFunctionDeclarationStatement() { | 5801 Statement _parseFunctionDeclarationStatement() { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5901 _advance(); | 5908 _advance(); |
| 5902 } | 5909 } |
| 5903 FunctionBody body = _parseFunctionBody( | 5910 FunctionBody body = _parseFunctionBody( |
| 5904 externalKeyword != null || staticKeyword == null, | 5911 externalKeyword != null || staticKeyword == null, |
| 5905 ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false); | 5912 ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false); |
| 5906 if (externalKeyword != null && body is! EmptyFunctionBody) { | 5913 if (externalKeyword != null && body is! EmptyFunctionBody) { |
| 5907 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY); | 5914 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY); |
| 5908 } | 5915 } |
| 5909 return new MethodDeclaration(commentAndMetadata.comment, | 5916 return new MethodDeclaration(commentAndMetadata.comment, |
| 5910 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, | 5917 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, |
| 5911 propertyKeyword, null, name, null, body); | 5918 propertyKeyword, null, name, null, null, body); |
| 5912 } | 5919 } |
| 5913 | 5920 |
| 5914 /** | 5921 /** |
| 5915 * Parse a list of identifiers. Return the list of identifiers that were | 5922 * Parse a list of identifiers. Return the list of identifiers that were |
| 5916 * parsed. | 5923 * parsed. |
| 5917 * | 5924 * |
| 5918 * identifierList ::= | 5925 * identifierList ::= |
| 5919 * identifier (',' identifier)* | 5926 * identifier (',' identifier)* |
| 5920 */ | 5927 */ |
| 5921 List<SimpleIdentifier> _parseIdentifierList() { | 5928 List<SimpleIdentifier> _parseIdentifierList() { |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6222 * [parameters] is the parameters to the method. Return the method declaration | 6229 * [parameters] is the parameters to the method. Return the method declaration |
| 6223 * that was parsed. | 6230 * that was parsed. |
| 6224 * | 6231 * |
| 6225 * functionDeclaration ::= | 6232 * functionDeclaration ::= |
| 6226 * ('external' 'static'?)? functionSignature functionBody | 6233 * ('external' 'static'?)? functionSignature functionBody |
| 6227 * | 'external'? functionSignature ';' | 6234 * | 'external'? functionSignature ';' |
| 6228 */ | 6235 */ |
| 6229 MethodDeclaration _parseMethodDeclarationAfterParameters( | 6236 MethodDeclaration _parseMethodDeclarationAfterParameters( |
| 6230 CommentAndMetadata commentAndMetadata, Token externalKeyword, | 6237 CommentAndMetadata commentAndMetadata, Token externalKeyword, |
| 6231 Token staticKeyword, TypeName returnType, SimpleIdentifier name, | 6238 Token staticKeyword, TypeName returnType, SimpleIdentifier name, |
| 6232 FormalParameterList parameters) { | 6239 TypeParameterList typeParameters, FormalParameterList parameters) { |
| 6233 FunctionBody body = _parseFunctionBody( | 6240 FunctionBody body = _parseFunctionBody( |
| 6234 externalKeyword != null || staticKeyword == null, | 6241 externalKeyword != null || staticKeyword == null, |
| 6235 ParserErrorCode.MISSING_FUNCTION_BODY, false); | 6242 ParserErrorCode.MISSING_FUNCTION_BODY, false); |
| 6236 if (externalKeyword != null) { | 6243 if (externalKeyword != null) { |
| 6237 if (body is! EmptyFunctionBody) { | 6244 if (body is! EmptyFunctionBody) { |
| 6238 _reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body); | 6245 _reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body); |
| 6239 } | 6246 } |
| 6240 } else if (staticKeyword != null) { | 6247 } else if (staticKeyword != null) { |
| 6241 if (body is EmptyFunctionBody && _parseFunctionBodies) { | 6248 if (body is EmptyFunctionBody && _parseFunctionBodies) { |
| 6242 _reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body); | 6249 _reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body); |
| 6243 } | 6250 } |
| 6244 } | 6251 } |
| 6245 return new MethodDeclaration(commentAndMetadata.comment, | 6252 return new MethodDeclaration(commentAndMetadata.comment, |
| 6246 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, | 6253 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, |
| 6247 null, null, name, parameters, body); | 6254 null, null, name, typeParameters, parameters, body); |
| 6248 } | 6255 } |
| 6249 | 6256 |
| 6250 /** | 6257 /** |
| 6251 * Parse a method declaration. The [commentAndMetadata] is the documentation | 6258 * Parse a method declaration. The [commentAndMetadata] is the documentation |
| 6252 * comment and metadata to be associated with the declaration. The | 6259 * comment and metadata to be associated with the declaration. The |
| 6253 * [externalKeyword] is the 'external' token. The [staticKeyword] is the | 6260 * [externalKeyword] is the 'external' token. The [staticKeyword] is the |
| 6254 * static keyword, or `null` if the getter is not static. The [returnType] is | 6261 * static keyword, or `null` if the getter is not static. The [returnType] is |
| 6255 * the return type of the method. Return the method declaration that was | 6262 * the return type of the method. Return the method declaration that was |
| 6256 * parsed. | 6263 * parsed. |
| 6257 * | 6264 * |
| (...skipping 12 matching lines...) Expand all Loading... |
| 6270 _reportErrorForToken( | 6277 _reportErrorForToken( |
| 6271 ParserErrorCode.MISSING_METHOD_PARAMETERS, _currentToken.previous); | 6278 ParserErrorCode.MISSING_METHOD_PARAMETERS, _currentToken.previous); |
| 6272 parameters = new FormalParameterList( | 6279 parameters = new FormalParameterList( |
| 6273 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, | 6280 _createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, |
| 6274 _createSyntheticToken(TokenType.CLOSE_PAREN)); | 6281 _createSyntheticToken(TokenType.CLOSE_PAREN)); |
| 6275 } else { | 6282 } else { |
| 6276 parameters = parseFormalParameterList(); | 6283 parameters = parseFormalParameterList(); |
| 6277 } | 6284 } |
| 6278 _validateFormalParameterList(parameters); | 6285 _validateFormalParameterList(parameters); |
| 6279 return _parseMethodDeclarationAfterParameters(commentAndMetadata, | 6286 return _parseMethodDeclarationAfterParameters(commentAndMetadata, |
| 6280 externalKeyword, staticKeyword, returnType, methodName, parameters); | 6287 externalKeyword, staticKeyword, returnType, methodName, null, |
| 6288 parameters); |
| 6281 } | 6289 } |
| 6282 | 6290 |
| 6283 /** | 6291 /** |
| 6284 * Parse the modifiers preceding a declaration. This method allows the | 6292 * Parse the modifiers preceding a declaration. This method allows the |
| 6285 * modifiers to appear in any order but does generate errors for duplicated | 6293 * modifiers to appear in any order but does generate errors for duplicated |
| 6286 * modifiers. Checks for other problems, such as having the modifiers appear | 6294 * modifiers. Checks for other problems, such as having the modifiers appear |
| 6287 * in the wrong order or specifying both 'const' and 'final', are reported in | 6295 * in the wrong order or specifying both 'const' and 'final', are reported in |
| 6288 * one of the methods whose name is prefixed with `validateModifiersFor`. | 6296 * one of the methods whose name is prefixed with `validateModifiersFor`. |
| 6289 * Return the modifiers that were parsed. | 6297 * Return the modifiers that were parsed. |
| 6290 * | 6298 * |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6626 } | 6634 } |
| 6627 FormalParameterList parameters = parseFormalParameterList(); | 6635 FormalParameterList parameters = parseFormalParameterList(); |
| 6628 _validateFormalParameterList(parameters); | 6636 _validateFormalParameterList(parameters); |
| 6629 FunctionBody body = | 6637 FunctionBody body = |
| 6630 _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false); | 6638 _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false); |
| 6631 if (externalKeyword != null && body is! EmptyFunctionBody) { | 6639 if (externalKeyword != null && body is! EmptyFunctionBody) { |
| 6632 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY); | 6640 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY); |
| 6633 } | 6641 } |
| 6634 return new MethodDeclaration(commentAndMetadata.comment, | 6642 return new MethodDeclaration(commentAndMetadata.comment, |
| 6635 commentAndMetadata.metadata, externalKeyword, null, returnType, null, | 6643 commentAndMetadata.metadata, externalKeyword, null, returnType, null, |
| 6636 operatorKeyword, name, parameters, body); | 6644 operatorKeyword, name, null, parameters, body); |
| 6637 } | 6645 } |
| 6638 | 6646 |
| 6639 /** | 6647 /** |
| 6640 * Parse a return type if one is given, otherwise return `null` without | 6648 * Parse a return type if one is given, otherwise return `null` without |
| 6641 * advancing. Return the return type that was parsed. | 6649 * advancing. Return the return type that was parsed. |
| 6642 */ | 6650 */ |
| 6643 TypeName _parseOptionalReturnType() { | 6651 TypeName _parseOptionalReturnType() { |
| 6644 if (_matchesKeyword(Keyword.VOID)) { | 6652 if (_matchesKeyword(Keyword.VOID)) { |
| 6645 return parseReturnType(); | 6653 return parseReturnType(); |
| 6646 } else if (_matchesIdentifier() && | 6654 } else if (_matchesIdentifier() && |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6704 if (_matches(TokenType.OPEN_SQUARE_BRACKET) || | 6712 if (_matches(TokenType.OPEN_SQUARE_BRACKET) || |
| 6705 _matches(TokenType.PERIOD) || | 6713 _matches(TokenType.PERIOD) || |
| 6706 _matches(TokenType.QUESTION_PERIOD) || | 6714 _matches(TokenType.QUESTION_PERIOD) || |
| 6707 _matches(TokenType.OPEN_PAREN)) { | 6715 _matches(TokenType.OPEN_PAREN)) { |
| 6708 do { | 6716 do { |
| 6709 if (_matches(TokenType.OPEN_PAREN)) { | 6717 if (_matches(TokenType.OPEN_PAREN)) { |
| 6710 ArgumentList argumentList = parseArgumentList(); | 6718 ArgumentList argumentList = parseArgumentList(); |
| 6711 if (operand is PropertyAccess) { | 6719 if (operand is PropertyAccess) { |
| 6712 PropertyAccess access = operand as PropertyAccess; | 6720 PropertyAccess access = operand as PropertyAccess; |
| 6713 operand = new MethodInvocation(access.target, access.operator, | 6721 operand = new MethodInvocation(access.target, access.operator, |
| 6714 access.propertyName, argumentList); | 6722 access.propertyName, null, argumentList); |
| 6715 } else { | 6723 } else { |
| 6716 operand = new FunctionExpressionInvocation(operand, argumentList); | 6724 operand = |
| 6725 new FunctionExpressionInvocation(operand, null, argumentList); |
| 6717 } | 6726 } |
| 6718 } else { | 6727 } else { |
| 6719 operand = _parseAssignableSelector(operand, true); | 6728 operand = _parseAssignableSelector(operand, true); |
| 6720 } | 6729 } |
| 6721 } while (_matches(TokenType.OPEN_SQUARE_BRACKET) || | 6730 } while (_matches(TokenType.OPEN_SQUARE_BRACKET) || |
| 6722 _matches(TokenType.PERIOD) || | 6731 _matches(TokenType.PERIOD) || |
| 6723 _matches(TokenType.QUESTION_PERIOD) || | 6732 _matches(TokenType.QUESTION_PERIOD) || |
| 6724 _matches(TokenType.OPEN_PAREN)); | 6733 _matches(TokenType.OPEN_PAREN)); |
| 6725 return operand; | 6734 return operand; |
| 6726 } | 6735 } |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6964 FormalParameterList parameters = parseFormalParameterList(); | 6973 FormalParameterList parameters = parseFormalParameterList(); |
| 6965 _validateFormalParameterList(parameters); | 6974 _validateFormalParameterList(parameters); |
| 6966 FunctionBody body = _parseFunctionBody( | 6975 FunctionBody body = _parseFunctionBody( |
| 6967 externalKeyword != null || staticKeyword == null, | 6976 externalKeyword != null || staticKeyword == null, |
| 6968 ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false); | 6977 ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false); |
| 6969 if (externalKeyword != null && body is! EmptyFunctionBody) { | 6978 if (externalKeyword != null && body is! EmptyFunctionBody) { |
| 6970 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY); | 6979 _reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY); |
| 6971 } | 6980 } |
| 6972 return new MethodDeclaration(commentAndMetadata.comment, | 6981 return new MethodDeclaration(commentAndMetadata.comment, |
| 6973 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, | 6982 commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, |
| 6974 propertyKeyword, null, name, parameters, body); | 6983 propertyKeyword, null, name, null, parameters, body); |
| 6975 } | 6984 } |
| 6976 | 6985 |
| 6977 /** | 6986 /** |
| 6978 * Parse a shift expression. Return the shift expression that was parsed. | 6987 * Parse a shift expression. Return the shift expression that was parsed. |
| 6979 * | 6988 * |
| 6980 * shiftExpression ::= | 6989 * shiftExpression ::= |
| 6981 * additiveExpression (shiftOperator additiveExpression)* | 6990 * additiveExpression (shiftOperator additiveExpression)* |
| 6982 * | 'super' (shiftOperator additiveExpression)+ | 6991 * | 'super' (shiftOperator additiveExpression)+ |
| 6983 */ | 6992 */ |
| 6984 Expression _parseShiftExpression() { | 6993 Expression _parseShiftExpression() { |
| (...skipping 3602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10587 } | 10596 } |
| 10588 | 10597 |
| 10589 /** | 10598 /** |
| 10590 * Copy resolution data from the [fromNode] to the [toNode]. | 10599 * Copy resolution data from the [fromNode] to the [toNode]. |
| 10591 */ | 10600 */ |
| 10592 static void copyResolutionData(AstNode fromNode, AstNode toNode) { | 10601 static void copyResolutionData(AstNode fromNode, AstNode toNode) { |
| 10593 ResolutionCopier copier = new ResolutionCopier(); | 10602 ResolutionCopier copier = new ResolutionCopier(); |
| 10594 copier._isEqualNodes(fromNode, toNode); | 10603 copier._isEqualNodes(fromNode, toNode); |
| 10595 } | 10604 } |
| 10596 } | 10605 } |
| OLD | NEW |