Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1921)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2876813002: Implement generalized function types. (Closed)
Patch Set: Address comments. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698