fix for KT=2702 - wrong bridges on super call
This commit is contained in:
@@ -370,4 +370,12 @@ public class CodegenUtil {
|
||||
}
|
||||
return JetStandardClasses.getAnyType();
|
||||
}
|
||||
|
||||
public static <T extends CallableMemberDescriptor> T unwrapFakeOverride(T member) {
|
||||
while (member.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
//noinspection unchecked
|
||||
member = (T) member.getOverriddenDescriptors().iterator().next();
|
||||
}
|
||||
return member;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1317,9 +1317,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
IntrinsicMethod intrinsic = null;
|
||||
if (descriptor instanceof CallableMemberDescriptor) {
|
||||
CallableMemberDescriptor memberDescriptor = (CallableMemberDescriptor) descriptor;
|
||||
while (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
memberDescriptor = memberDescriptor.getOverriddenDescriptors().iterator().next();
|
||||
}
|
||||
memberDescriptor = unwrapFakeOverride(memberDescriptor);
|
||||
|
||||
intrinsic = state.getIntrinsics().getIntrinsic(memberDescriptor);
|
||||
}
|
||||
if (intrinsic != null) {
|
||||
@@ -1696,6 +1695,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
c = c.getParentContext();
|
||||
assert c != null;
|
||||
}
|
||||
fd = unwrapFakeOverride(fd);
|
||||
fd = (FunctionDescriptor) c.getAccessor(fd);
|
||||
superCall = false;
|
||||
receiver = StackValue.thisOrOuter(this, enclosed);
|
||||
|
||||
@@ -357,9 +357,7 @@ public class JetTypeMapper extends BindingTraceAware {
|
||||
public CallableMethod mapToCallableMethod(@NotNull FunctionDescriptor functionDescriptor, boolean superCall, OwnerKind kind) {
|
||||
final DeclarationDescriptor functionParent = functionDescriptor.getOriginal().getContainingDeclaration();
|
||||
|
||||
while (functionDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
functionDescriptor = functionDescriptor.getOverriddenDescriptors().iterator().next();
|
||||
}
|
||||
functionDescriptor = unwrapFakeOverride(functionDescriptor);
|
||||
|
||||
JvmMethodSignature descriptor = mapSignature(functionDescriptor.getOriginal(), true, kind);
|
||||
JvmClassName owner;
|
||||
|
||||
Reference in New Issue
Block a user