Fixed a couple of bugs with duplicate IR
This commit is contained in:
+11
-12
@@ -297,19 +297,19 @@ internal fun KotlinStubs.generateObjCCall(
|
|||||||
superQualifier: IrClassSymbol?,
|
superQualifier: IrClassSymbol?,
|
||||||
receiver: IrExpression,
|
receiver: IrExpression,
|
||||||
arguments: List<IrExpression?>
|
arguments: List<IrExpression?>
|
||||||
): IrExpression {
|
) = builder.irBlock {
|
||||||
|
val callBuilder = KotlinToCCallBuilder(builder, this@generateObjCCall, isObjCMethod = true)
|
||||||
|
|
||||||
val callBuilder = KotlinToCCallBuilder(builder, this, isObjCMethod = true)
|
val superClass = irTemporaryVar(
|
||||||
|
superQualifier?.let { getObjCClass(symbols, it) } ?: irNullNativePtr(symbols)
|
||||||
|
)
|
||||||
|
|
||||||
val superClass = superQualifier?.let { builder.getObjCClass(symbols, it) }
|
val messenger = irCall(if (isStret) {
|
||||||
?: builder.irNullNativePtr(symbols)
|
|
||||||
|
|
||||||
val messenger = builder.irCall(if (isStret) {
|
|
||||||
symbols.interopGetMessengerStret
|
symbols.interopGetMessengerStret
|
||||||
} else {
|
} else {
|
||||||
symbols.interopGetMessenger
|
symbols.interopGetMessenger
|
||||||
}.owner).apply {
|
}.owner).apply {
|
||||||
putValueArgument(0, superClass) // TODO: check superClass statically.
|
putValueArgument(0, irGet(superClass)) // TODO: check superClass statically.
|
||||||
}
|
}
|
||||||
|
|
||||||
val targetPtrParameter = callBuilder.passThroughBridge(
|
val targetPtrParameter = callBuilder.passThroughBridge(
|
||||||
@@ -320,7 +320,7 @@ internal fun KotlinStubs.generateObjCCall(
|
|||||||
val targetFunctionName = "targetPtr"
|
val targetFunctionName = "targetPtr"
|
||||||
|
|
||||||
val preparedReceiver = if (method.consumesReceiver()) {
|
val preparedReceiver = if (method.consumesReceiver()) {
|
||||||
builder.irCall(symbols.interopObjCRetain.owner).apply {
|
irCall(symbols.interopObjCRetain.owner).apply {
|
||||||
putValueArgument(0, receiver)
|
putValueArgument(0, receiver)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -328,9 +328,9 @@ internal fun KotlinStubs.generateObjCCall(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val receiverOrSuper = if (superQualifier != null) {
|
val receiverOrSuper = if (superQualifier != null) {
|
||||||
builder.irCall(symbols.interopCreateObjCSuperStruct.owner).apply {
|
irCall(symbols.interopCreateObjCSuperStruct.owner).apply {
|
||||||
putValueArgument(0, preparedReceiver)
|
putValueArgument(0, preparedReceiver)
|
||||||
putValueArgument(1, superClass)
|
putValueArgument(1, irGet(superClass))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
preparedReceiver
|
preparedReceiver
|
||||||
@@ -355,7 +355,7 @@ internal fun KotlinStubs.generateObjCCall(
|
|||||||
|
|
||||||
callBuilder.emitCBridge()
|
callBuilder.emitCBridge()
|
||||||
|
|
||||||
return result
|
+result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrBuilderWithScope.getObjCClass(symbols: KonanSymbols, symbol: IrClassSymbol): IrExpression {
|
private fun IrBuilderWithScope.getObjCClass(symbols: KonanSymbols, symbol: IrClassSymbol): IrExpression {
|
||||||
@@ -1168,7 +1168,6 @@ private class ObjCBlockPointerValuePassing(
|
|||||||
Name.identifier("blockHolder"),
|
Name.identifier("blockHolder"),
|
||||||
isMutable = false, owner = irClass
|
isMutable = false, owner = irClass
|
||||||
)
|
)
|
||||||
irClass.addChild(blockHolderField)
|
|
||||||
|
|
||||||
val constructorDescriptor = WrappedClassConstructorDescriptor()
|
val constructorDescriptor = WrappedClassConstructorDescriptor()
|
||||||
val constructor = IrConstructorImpl(
|
val constructor = IrConstructorImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user