Index: pkg/compiler/lib/src/ssa/builder.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart |
index 8766af3ff025653eb3c19aba6697b836eccb908c..d06a002bc42b14a616f38d7f691a4fb2a759fb17 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -4553,7 +4553,10 @@ class SsaBuilder extends ast.Visitor |
String name = selector.name; |
ClassElement cls = currentNonClosureClass; |
- Element element = cls.lookupSuperMember(Identifiers.noSuchMethod_); |
+ MethodElement element = cls.lookupSuperMember(Identifiers.noSuchMethod_); |
+ if (!Selectors.noSuchMethod_.signatureApplies(element)) { |
+ element = coreClasses.objectClass.lookupMember(Identifiers.noSuchMethod_); |
+ } |
if (compiler.enabledInvokeOn && !element.enclosingClass.isObject) { |
// Register the call as dynamic if [noSuchMethod] on the super |
// class is _not_ the default implementation from [Object], in |
@@ -4693,6 +4696,15 @@ class SsaBuilder extends ast.Visitor |
} |
@override |
+ void visitUnresolvedSuperSet( |
+ ast.Send node, |
+ Element element, |
+ ast.Node rhs, |
+ _) { |
+ handleSuperSendSet(node); |
+ } |
+ |
+ @override |
void visitSuperSetterGet( |
ast.Send node, |
MethodElement setter, |
@@ -6811,14 +6823,8 @@ class SsaBuilder extends ast.Visitor |
Element element, |
ast.Node rhs, |
_) { |
- if (node.isSuperCall) { |
- // TODO(johnniwinther): Remove this when final super field assignment is |
- // not an unresolved set. |
- handleSuperSendSet(node); |
- } else { |
- generateIsDeferredLoadedCheckOfSend(node); |
- generateNonInstanceSetter(node, element, visitAndPop(rhs)); |
- } |
+ generateIsDeferredLoadedCheckOfSend(node); |
+ generateNonInstanceSetter(node, element, visitAndPop(rhs)); |
} |
@override |