| Index: pkg/analyzer/lib/src/generated/parser.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
|
| index 29974682eaaa61b81bd3fb6ff3e4a24a9d367556..af4bd8dc24b17c85303aeab4a40b757838e208a4 100644
|
| --- a/pkg/analyzer/lib/src/generated/parser.dart
|
| +++ b/pkg/analyzer/lib/src/generated/parser.dart
|
| @@ -7,8 +7,8 @@
|
|
|
| library engine.parser;
|
|
|
| -import "dart:math" as math;
|
| import 'dart:collection';
|
| +import "dart:math" as math;
|
|
|
| import 'ast.dart';
|
| import 'engine.dart' show AnalysisEngine, AnalysisOptionsImpl;
|
| @@ -263,10 +263,10 @@ Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{
|
| 0, (Parser target) => target._parseLogicalAndExpression()),
|
| 'parseMapLiteral_2': new MethodTrampoline(
|
| 2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
|
| - 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6,
|
| - (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target
|
| + 'parseMethodDeclarationAfterParameters_7': new MethodTrampoline(7,
|
| + (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6) => target
|
| ._parseMethodDeclarationAfterParameters(
|
| - arg0, arg1, arg2, arg3, arg4, arg5)),
|
| + arg0, arg1, arg2, arg3, arg4, arg5, arg6)),
|
| 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4,
|
| (Parser target, arg0, arg1, arg2, arg3) => target
|
| ._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
|
| @@ -2080,6 +2080,11 @@ class Parser {
|
| bool _inInitializer = false;
|
|
|
| /**
|
| + * A flag indicating whether the parser is to parse generic method syntax.
|
| + */
|
| + bool parseGenericMethods = false;
|
| +
|
| + /**
|
| * Initialize a newly created parser to parse the content of the given
|
| * [_source] and to report any errors that are found to the given
|
| * [_errorListener].
|
| @@ -2440,7 +2445,7 @@ class Parser {
|
| //
|
| return new MethodDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, null, null, null, null, null,
|
| - _createSyntheticIdentifier(), new FormalParameterList(
|
| + _createSyntheticIdentifier(), null, new FormalParameterList(
|
| null, new List<FormalParameter>(), null, null, null),
|
| new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
|
| }
|
| @@ -2466,7 +2471,7 @@ class Parser {
|
| _validateFormalParameterList(parameters);
|
| return _parseMethodDeclarationAfterParameters(commentAndMetadata,
|
| modifiers.externalKeyword, modifiers.staticKeyword, null, methodName,
|
| - parameters);
|
| + null, parameters);
|
| } else if (_peek()
|
| .matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
|
| if (modifiers.constKeyword == null &&
|
| @@ -2546,7 +2551,7 @@ class Parser {
|
| _validateFormalParameterList(parameters);
|
| return _parseMethodDeclarationAfterParameters(commentAndMetadata,
|
| modifiers.externalKeyword, modifiers.staticKeyword, type, methodName,
|
| - parameters);
|
| + null, parameters);
|
| } else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) {
|
| // We have found "TypeName identifier {", and are guessing that this is a
|
| // getter without the keyword 'get'.
|
| @@ -3043,7 +3048,7 @@ class Parser {
|
| _validateFormalParameterList(parameters);
|
| FunctionBody body =
|
| _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
|
| - return new FunctionExpression(parameters, body);
|
| + return new FunctionExpression(null, parameters, body);
|
| }
|
|
|
| /**
|
| @@ -3173,11 +3178,12 @@ class Parser {
|
| ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword);
|
| }
|
| return new FunctionTypedFormalParameter(commentAndMetadata.comment,
|
| - commentAndMetadata.metadata, holder.type, identifier, parameters);
|
| + commentAndMetadata.metadata, holder.type, identifier, null,
|
| + parameters);
|
| } else {
|
| return new FieldFormalParameter(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, holder.keyword, holder.type,
|
| - thisKeyword, period, identifier, parameters);
|
| + thisKeyword, period, identifier, null, parameters);
|
| }
|
| }
|
| TypeName type = holder.type;
|
| @@ -3193,7 +3199,7 @@ class Parser {
|
| if (thisKeyword != null) {
|
| return new FieldFormalParameter(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword,
|
| - period, identifier, null);
|
| + period, identifier, null, null);
|
| }
|
| return new SimpleFormalParameter(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
|
| @@ -3482,7 +3488,8 @@ class Parser {
|
| FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) =>
|
| new FunctionDeclaration(method.documentationComment, method.metadata,
|
| method.externalKeyword, method.returnType, method.propertyKeyword,
|
| - method.name, new FunctionExpression(method.parameters, method.body));
|
| + method.name, new FunctionExpression(
|
| + method.typeParameters, method.parameters, method.body));
|
|
|
| /**
|
| * Return `true` if the current token could be the start of a compilation unit
|
| @@ -4181,18 +4188,18 @@ class Parser {
|
| ArgumentList argumentList = parseArgumentList();
|
| if (expression is SimpleIdentifier) {
|
| expression = new MethodInvocation(
|
| - null, null, expression as SimpleIdentifier, argumentList);
|
| + null, null, expression as SimpleIdentifier, null, argumentList);
|
| } else if (expression is PrefixedIdentifier) {
|
| PrefixedIdentifier identifier = expression as PrefixedIdentifier;
|
| expression = new MethodInvocation(identifier.prefix,
|
| - identifier.period, identifier.identifier, argumentList);
|
| + identifier.period, identifier.identifier, null, argumentList);
|
| } else if (expression is PropertyAccess) {
|
| PropertyAccess access = expression as PropertyAccess;
|
| expression = new MethodInvocation(access.target, access.operator,
|
| - access.propertyName, argumentList);
|
| + access.propertyName, null, argumentList);
|
| } else {
|
| expression =
|
| - new FunctionExpressionInvocation(expression, argumentList);
|
| + new FunctionExpressionInvocation(expression, null, argumentList);
|
| }
|
| if (!primaryAllowed) {
|
| isOptional = false;
|
| @@ -4383,16 +4390,16 @@ class Parser {
|
| while (_currentToken.type == TokenType.OPEN_PAREN) {
|
| if (functionName != null) {
|
| expression = new MethodInvocation(
|
| - expression, period, functionName, parseArgumentList());
|
| + expression, period, functionName, null, parseArgumentList());
|
| period = null;
|
| functionName = null;
|
| } else if (expression == null) {
|
| // It should not be possible to get here.
|
| expression = new MethodInvocation(expression, period,
|
| - _createSyntheticIdentifier(), parseArgumentList());
|
| + _createSyntheticIdentifier(), null, parseArgumentList());
|
| } else {
|
| - expression =
|
| - new FunctionExpressionInvocation(expression, parseArgumentList());
|
| + expression = new FunctionExpressionInvocation(
|
| + expression, null, parseArgumentList());
|
| }
|
| }
|
| } else if (functionName != null) {
|
| @@ -4411,11 +4418,11 @@ class Parser {
|
| if (expression is PropertyAccess) {
|
| PropertyAccess propertyAccess = expression as PropertyAccess;
|
| expression = new MethodInvocation(propertyAccess.target,
|
| - propertyAccess.operator, propertyAccess.propertyName,
|
| + propertyAccess.operator, propertyAccess.propertyName, null,
|
| parseArgumentList());
|
| } else {
|
| expression = new FunctionExpressionInvocation(
|
| - expression, parseArgumentList());
|
| + expression, null, parseArgumentList());
|
| }
|
| }
|
| }
|
| @@ -5781,7 +5788,7 @@ class Parser {
|
| // }
|
| return new FunctionDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, externalKeyword, returnType, keyword, name,
|
| - new FunctionExpression(parameters, body));
|
| + new FunctionExpression(null, parameters, body));
|
| }
|
|
|
| /**
|
| @@ -5908,7 +5915,7 @@ class Parser {
|
| }
|
| return new MethodDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
|
| - propertyKeyword, null, name, null, body);
|
| + propertyKeyword, null, name, null, null, body);
|
| }
|
|
|
| /**
|
| @@ -6229,7 +6236,7 @@ class Parser {
|
| MethodDeclaration _parseMethodDeclarationAfterParameters(
|
| CommentAndMetadata commentAndMetadata, Token externalKeyword,
|
| Token staticKeyword, TypeName returnType, SimpleIdentifier name,
|
| - FormalParameterList parameters) {
|
| + TypeParameterList typeParameters, FormalParameterList parameters) {
|
| FunctionBody body = _parseFunctionBody(
|
| externalKeyword != null || staticKeyword == null,
|
| ParserErrorCode.MISSING_FUNCTION_BODY, false);
|
| @@ -6244,7 +6251,7 @@ class Parser {
|
| }
|
| return new MethodDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
|
| - null, null, name, parameters, body);
|
| + null, null, name, typeParameters, parameters, body);
|
| }
|
|
|
| /**
|
| @@ -6277,7 +6284,8 @@ class Parser {
|
| }
|
| _validateFormalParameterList(parameters);
|
| return _parseMethodDeclarationAfterParameters(commentAndMetadata,
|
| - externalKeyword, staticKeyword, returnType, methodName, parameters);
|
| + externalKeyword, staticKeyword, returnType, methodName, null,
|
| + parameters);
|
| }
|
|
|
| /**
|
| @@ -6633,7 +6641,7 @@ class Parser {
|
| }
|
| return new MethodDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, externalKeyword, null, returnType, null,
|
| - operatorKeyword, name, parameters, body);
|
| + operatorKeyword, name, null, parameters, body);
|
| }
|
|
|
| /**
|
| @@ -6711,9 +6719,10 @@ class Parser {
|
| if (operand is PropertyAccess) {
|
| PropertyAccess access = operand as PropertyAccess;
|
| operand = new MethodInvocation(access.target, access.operator,
|
| - access.propertyName, argumentList);
|
| + access.propertyName, null, argumentList);
|
| } else {
|
| - operand = new FunctionExpressionInvocation(operand, argumentList);
|
| + operand =
|
| + new FunctionExpressionInvocation(operand, null, argumentList);
|
| }
|
| } else {
|
| operand = _parseAssignableSelector(operand, true);
|
| @@ -6971,7 +6980,7 @@ class Parser {
|
| }
|
| return new MethodDeclaration(commentAndMetadata.comment,
|
| commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType,
|
| - propertyKeyword, null, name, parameters, body);
|
| + propertyKeyword, null, name, null, parameters, body);
|
| }
|
|
|
| /**
|
|
|