Index: pkg/analyzer/lib/src/fasta/ast_builder.dart |
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart |
index 81c1b4760650063539ef55f0ab447c30707faf99..85e6241043014e0c61a35ca2336a9dd7ea812de3 100644 |
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart |
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart |
@@ -11,7 +11,7 @@ import 'package:analyzer/dart/ast/token.dart' as analyzer show Token; |
import 'package:analyzer/dart/ast/token.dart' show Token, TokenType; |
import 'package:analyzer/dart/element/element.dart' show Element; |
import 'package:front_end/src/fasta/parser/parser.dart' |
- show FormalParameterType, Parser; |
+ show FormalParameterType, MemberKind, Parser; |
import 'package:front_end/src/fasta/scanner/string_scanner.dart'; |
import 'package:front_end/src/fasta/scanner/token.dart' |
show BeginGroupToken, CommentToken; |
@@ -851,8 +851,8 @@ class AstBuilder extends ScopeListener { |
} |
} |
- void endFormalParameter(Token covariantKeyword, Token thisKeyword, |
- Token nameToken, FormalParameterType kind) { |
+ void endFormalParameter(Token thisKeyword, Token nameToken, |
+ FormalParameterType kind, MemberKind memberKind) { |
debugEvent("FormalParameter"); |
_ParameterDefaultValue defaultValue = pop(); |
@@ -868,6 +868,7 @@ class AstBuilder extends ScopeListener { |
TypeAnnotation type = pop(); |
_Modifiers modifiers = pop(); |
Token keyword = modifiers?.finalConstOrVarKeyword; |
+ Token covariantKeyword = modifiers?.covariantKeyword; |
pop(); // TODO(paulberry): Metadata. |
Comment comment = pop(); |
if (thisKeyword == null) { |
@@ -908,7 +909,7 @@ class AstBuilder extends ScopeListener { |
@override |
void endFunctionTypedFormalParameter( |
- Token covariantKeyword, Token thisKeyword, FormalParameterType kind) { |
+ Token thisKeyword, FormalParameterType kind) { |
debugEvent("FunctionTypedFormalParameter"); |
FormalParameterList formalParameters = pop(); |
@@ -916,13 +917,8 @@ class AstBuilder extends ScopeListener { |
SimpleIdentifier name = pop(); |
TypeAnnotation returnType = pop(); |
- { |
- _Modifiers modifiers = pop(); |
- if (modifiers != null) { |
- // TODO(scheglov): Report error. |
- internalError('Unexpected modifier. Report an error.'); |
- } |
- } |
+ _Modifiers modifiers = pop(); |
+ Token covariantKeyword = modifiers?.covariantKeyword; |
pop(); // TODO(paulberry): Metadata. |
Comment comment = pop(); |
@@ -956,7 +952,8 @@ class AstBuilder extends ScopeListener { |
push(node); |
} |
- void endFormalParameters(int count, Token beginToken, Token endToken) { |
+ void endFormalParameters( |
+ int count, Token beginToken, Token endToken, MemberKind kind) { |
debugEvent("FormalParameters"); |
List rawParameters = popList(count) ?? const <Object>[]; |
List<FormalParameter> parameters = <FormalParameter>[]; |
@@ -1834,14 +1831,14 @@ class AstBuilder extends ScopeListener { |
} |
@override |
- void endFields( |
- int count, Token covariantKeyword, Token beginToken, Token endToken) { |
+ void endFields(int count, Token beginToken, Token endToken) { |
debugEvent("Fields"); |
List<VariableDeclaration> variables = popList(count); |
TypeAnnotation type = pop(); |
_Modifiers modifiers = pop(); |
var variableList = ast.variableDeclarationList(null, null, |
toAnalyzerToken(modifiers?.finalConstOrVarKeyword), type, variables); |
+ Token covariantKeyword = modifiers?.covariantKeyword; |
List<Annotation> metadata = pop(); |
Comment comment = pop(); |
push(ast.fieldDeclaration2( |
@@ -2069,6 +2066,7 @@ class _Modifiers { |
Token externalKeyword; |
Token finalConstOrVarKeyword; |
Token staticKeyword; |
+ Token covariantKeyword; |
_Modifiers(List<Token> modifierTokens) { |
// No need to check the order and uniqueness of the modifiers, or that |
@@ -2088,6 +2086,8 @@ class _Modifiers { |
staticKeyword = token; |
} else if (identical('var', s)) { |
finalConstOrVarKeyword = token; |
+ } else if (identical('covariant', s)) { |
+ covariantKeyword = token; |
} else { |
internalError('Unhandled modifier: $s'); |
} |