DefaultImpls fixes
This commit is contained in:
committed by
Dmitry Petrov
parent
c22bfaeefb
commit
bc6f691405
+1
-1
@@ -79,7 +79,7 @@ class InterfaceDelegationLowering(val state: GenerationState) : IrElementTransfo
|
|||||||
|
|
||||||
var shift = 0
|
var shift = 0
|
||||||
if (inheritedFun.dispatchReceiverParameter != null) {
|
if (inheritedFun.dispatchReceiverParameter != null) {
|
||||||
irCallImpl.putValueArgument(0, IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irClass.descriptor.thisAsReceiverParameter))
|
irCallImpl.putValueArgument(0, IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, interfaceFun.dispatchReceiverParameter!!))
|
||||||
shift = 1
|
shift = 1
|
||||||
}
|
}
|
||||||
inheritedFun.valueParameters.mapIndexed { i, valueParameterDescriptor ->
|
inheritedFun.valueParameters.mapIndexed { i, valueParameterDescriptor ->
|
||||||
|
|||||||
+10
-7
@@ -66,7 +66,8 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
members.add(newFunction)
|
members.add(newFunction)
|
||||||
it.body = null
|
it.body = null
|
||||||
|
|
||||||
val mapping: Map<DeclarationDescriptor, ValueParameterDescriptor> = (listOf(it.descriptor.containingDeclaration) + it.descriptor.valueParameters).zip(functionDescriptorImpl.valueParameters).toMap()
|
val mapping: Map<DeclarationDescriptor, ValueParameterDescriptor> =
|
||||||
|
(listOf(it.descriptor.dispatchReceiverParameter!!) + it.descriptor.valueParameters).zip(functionDescriptorImpl.valueParameters).toMap()
|
||||||
|
|
||||||
newFunction.body?.transform(VariableRemapper(mapping), null)
|
newFunction.body?.transform(VariableRemapper(mapping), null)
|
||||||
}
|
}
|
||||||
@@ -100,12 +101,14 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
CallableMemberDescriptor.Kind.DECLARATION, descriptor.source
|
CallableMemberDescriptor.Kind.DECLARATION, descriptor.source
|
||||||
)
|
)
|
||||||
|
|
||||||
val valueParameters =
|
val dispatchReceiver =
|
||||||
listOf(ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, 0, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
newFunction, null, 0, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
||||||
interfaceDescriptor.defaultType, false, false, false, false, null, interfaceDescriptor.source, null)
|
interfaceDescriptor.defaultType, false, false, false, false, null, interfaceDescriptor.source, null)
|
||||||
) +
|
|
||||||
descriptor.valueParameters.map { it.copy(newFunction, it.name, it.index + 1) }
|
val valueParameters = listOf(dispatchReceiver) +
|
||||||
|
descriptor.valueParameters.map { it.copy(newFunction, it.name, it.index + 1) }
|
||||||
|
|
||||||
newFunction.initialize(
|
newFunction.initialize(
|
||||||
null, null, emptyList()/*TODO: type parameters*/,
|
null, null, emptyList()/*TODO: type parameters*/,
|
||||||
valueParameters, descriptor.returnType, Modality.FINAL, descriptor.visibility
|
valueParameters, descriptor.returnType, Modality.FINAL, descriptor.visibility
|
||||||
|
|||||||
Reference in New Issue
Block a user