Fix parameter indices on lowering
This commit is contained in:
+6
-6
@@ -109,20 +109,20 @@ internal fun createStaticFunctionWithReceivers(owner: ClassOrPackageFragmentDesc
|
|||||||
name,
|
name,
|
||||||
CallableMemberDescriptor.Kind.DECLARATION, descriptor.source
|
CallableMemberDescriptor.Kind.DECLARATION, descriptor.source
|
||||||
)
|
)
|
||||||
|
var offset = 0
|
||||||
val dispatchReceiver =
|
val dispatchReceiver =
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, 0, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
||||||
dispatchReceiverType, false, false, false, null, descriptor.source, null)
|
dispatchReceiverType, false, false, false, null, descriptor.source, null)
|
||||||
val extensionReceiver =
|
val extensionReceiver =
|
||||||
descriptor.extensionReceiverParameter?.let { extensionReceiver ->
|
descriptor.extensionReceiverParameter?.let { extensionReceiver ->
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, 1, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
||||||
extensionReceiver.value.type, false, false, false, null, extensionReceiver.source, null)
|
extensionReceiver.value.type, false, false, false, null, extensionReceiver.source, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val valueParameters = listOf(dispatchReceiver, extensionReceiver).filterNotNull() +
|
val valueParameters = listOfNotNull(dispatchReceiver, extensionReceiver) +
|
||||||
descriptor.valueParameters.map { it.copy(newFunction, it.name, it.index + 1) }
|
descriptor.valueParameters.map { it.copy(newFunction, it.name, it.index + offset) }
|
||||||
|
|
||||||
newFunction.initialize(
|
newFunction.initialize(
|
||||||
null, null, emptyList()/*TODO: type parameters*/,
|
null, null, emptyList()/*TODO: type parameters*/,
|
||||||
@@ -135,7 +135,7 @@ internal fun FunctionDescriptor.createFunctionAndMapVariables(oldFunction: IrFun
|
|||||||
IrFunctionImpl(oldFunction.startOffset, oldFunction.endOffset, oldFunction.origin, this, oldFunction.body).also {
|
IrFunctionImpl(oldFunction.startOffset, oldFunction.endOffset, oldFunction.origin, this, oldFunction.body).also {
|
||||||
val mapping: Map<ValueDescriptor, ValueDescriptor> =
|
val mapping: Map<ValueDescriptor, ValueDescriptor> =
|
||||||
(
|
(
|
||||||
listOf(oldFunction.descriptor.dispatchReceiverParameter!!, oldFunction.descriptor.extensionReceiverParameter).filterNotNull() +
|
listOfNotNull(oldFunction.descriptor.dispatchReceiverParameter!!, oldFunction.descriptor.extensionReceiverParameter) +
|
||||||
oldFunction.descriptor.valueParameters
|
oldFunction.descriptor.valueParameters
|
||||||
).zip(this.valueParameters).toMap()
|
).zip(this.valueParameters).toMap()
|
||||||
|
|
||||||
|
|||||||
+5
-7
@@ -34,22 +34,20 @@ fun FunctionDescriptor.toStatic(
|
|||||||
)
|
)
|
||||||
|
|
||||||
var offset = 0
|
var offset = 0
|
||||||
val dispatchReceiver = this.dispatchReceiverParameter?.let {
|
val dispatchReceiver = dispatchReceiverParameter?.let {
|
||||||
offset++
|
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, 0, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
||||||
dispatchReceiverClass!!.defaultType, false, false, false, null, dispatchReceiverClass.source, null)
|
dispatchReceiverClass!!.defaultType, false, false, false, null, dispatchReceiverClass.source, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val extensionReceiver = extensionReceiverParameter?.let {
|
val extensionReceiver = extensionReceiverParameter?.let {
|
||||||
offset++
|
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, 1, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
||||||
it.value.type, false, false, false, null, it.source, null)
|
it.value.type, false, false, false, null, it.source, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val valueParameters = listOf(dispatchReceiver, extensionReceiver).filterNotNull() +
|
val valueParameters = listOfNotNull(dispatchReceiver, extensionReceiver) +
|
||||||
valueParameters.map { it.copy(newFunction, it.name, it.index + offset) }
|
valueParameters.map { it.copy(newFunction, it.name, it.index + offset) }
|
||||||
|
|
||||||
newFunction.initialize(
|
newFunction.initialize(
|
||||||
null, null, emptyList()/*TODO: type parameters*/,
|
null, null, emptyList()/*TODO: type parameters*/,
|
||||||
|
|||||||
Reference in New Issue
Block a user