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