| Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| index 58d2262e839b305f88b16bac29a7114257b64192..385e61a36c7641e9ea19cff6a18ac30bd3de3801 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| @@ -7,7 +7,7 @@ library fasta.body_builder;
|
| import '../fasta_codes.dart'
|
| show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody;
|
|
|
| -import '../parser/parser.dart' show FormalParameterType, optional;
|
| +import '../parser/parser.dart' show FormalParameterType, MemberKind, optional;
|
|
|
| import '../parser/identifier_context.dart' show IdentifierContext;
|
|
|
| @@ -337,8 +337,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| @override
|
| - void endFields(
|
| - int count, Token covariantKeyword, Token beginToken, Token endToken) {
|
| + void endFields(int count, Token beginToken, Token endToken) {
|
| debugEvent("Fields");
|
| doFields(count);
|
| pop(); // Metadata.
|
| @@ -1479,6 +1478,14 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| @override
|
| + void handleFunctionType(Token functionToken, Token endToken) {
|
| + FormalParameters formals = pop();
|
| + ignore(Unhandled.TypeVariables);
|
| + DartType returnType = pop();
|
| + push(formals.toFunctionType(returnType));
|
| + }
|
| +
|
| + @override
|
| void handleVoidKeyword(Token token) {
|
| debugEvent("VoidKeyword");
|
| push(const VoidType());
|
| @@ -1530,11 +1537,9 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| @override
|
| - void endFormalParameter(Token covariantKeyword, Token thisKeyword,
|
| - Token nameToken, FormalParameterType kind) {
|
| + void endFormalParameter(Token thisKeyword, Token nameToken,
|
| + FormalParameterType kind, MemberKind memberKind) {
|
| debugEvent("FormalParameter");
|
| - // TODO(ahe): Need beginToken here.
|
| - int charOffset = thisKeyword?.charOffset;
|
| if (thisKeyword != null) {
|
| if (!inConstructor) {
|
| addCompileTimeError(thisKeyword.charOffset,
|
| @@ -1552,8 +1557,11 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| bool isFinal = (modifiers & finalMask) != 0;
|
| ignore(Unhandled.Metadata);
|
| VariableDeclaration variable;
|
| - if (!inCatchClause && functionNestingLevel == 0) {
|
| - dynamic builder = formalParameterScope.lookup(name.name, charOffset, uri);
|
| + if (!inCatchClause &&
|
| + functionNestingLevel == 0 &&
|
| + memberKind != MemberKind.GeneralizedFunctionType) {
|
| + dynamic builder = formalParameterScope.lookup(
|
| + name.name, offsetForToken(name.token), uri);
|
| if (builder == null) {
|
| if (thisKeyword == null) {
|
| internalError("Internal error: formal missing for '${name.name}'");
|
| @@ -1610,7 +1618,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
|
|
| @override
|
| void endFunctionTypedFormalParameter(
|
| - Token covariantKeyword, Token thisKeyword, FormalParameterType kind) {
|
| + Token thisKeyword, FormalParameterType kind) {
|
| debugEvent("FunctionTypedFormalParameter");
|
| if (inCatchClause || functionNestingLevel != 0) {
|
| exitLocalScope();
|
| @@ -1638,7 +1646,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| }
|
|
|
| @override
|
| - void endFormalParameters(int count, Token beginToken, Token endToken) {
|
| + void endFormalParameters(
|
| + int count, Token beginToken, Token endToken, MemberKind kind) {
|
| debugEvent("FormalParameters");
|
| OptionalFormals optional;
|
| if (count > 0 && peek() is OptionalFormals) {
|
| @@ -2527,7 +2536,6 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| @override
|
| void handleRecoverableError(Token token, FastaMessage message) {
|
| bool silent = hasParserError;
|
| - super.handleRecoverableError(token, message);
|
| addCompileTimeError(message.charOffset, message.message, silent: silent);
|
| }
|
|
|
|
|