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

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

Issue 2765943002: Improve handling of complicated getters and setters. (Closed)
Patch Set: Update status files. Created 3 years, 9 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 95e15aad3fc01798f7397e861b10cd65b19b5886..93e10fb018195c5729e0803e9c208cdb678d2f11 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -197,6 +197,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
return node;
} else if (node is PrefixBuilder) {
return buildCompileTimeError("A library can't be used as an expression.");
+ } else if (node is ProblemBuilder) {
+ return buildProblemExpression(node, -1);
} else {
return internalError("Unhandled: ${node.runtimeType}");
}
@@ -718,13 +720,6 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
isFirstIdentifier = true;
}
- Builder computeSetter(
- Builder builder, Scope scope, String name, int charOffset) {
- if (builder.isSetter) return builder;
- if (builder.isGetter) return scope.lookupSetter(name, charOffset, uri);
- return builder.isField ? (builder.isFinal ? null : builder) : null;
- }
-
@override
void handleIdentifier(Token token, IdentifierContext context) {
debugEvent("handleIdentifier");
@@ -769,17 +764,16 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
return new StaticAccessor(
this, charOffset, builder.getter.target, builder.setter.target);
} else {
- if (builder is AccessErrorBuilder) {
- AccessErrorBuilder error = builder;
- builder = error.builder;
- }
- if (builder.target == null) {
- return internalError("Unhandled: ${builder}");
+ if (builder.hasProblem && builder is! AccessErrorBuilder) return builder;
+ Builder setter;
+ if (builder.isSetter) {
+ setter = builder;
+ } else if (builder.isGetter) {
+ setter = scope.lookupSetter(name, charOffset, uri);
+ } else if (builder.isField && !builder.isFinal) {
+ setter = builder;
}
- Member getter = builder.target.hasGetter ? builder.target : null;
- Member setter = builder.target.hasSetter ? builder.target : null;
- setter ??= computeSetter(builder, scope, name, charOffset)?.target;
- return new StaticAccessor(this, charOffset, getter, setter);
+ return new StaticAccessor.fromBuilder(this, builder, charOffset, setter);
}
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/builder/class_builder.dart ('k') | pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698