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); |
} |