~ native non trivial
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt
index fcebf3f..7b44807 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsAstUtils.kt
@@ -112,7 +112,6 @@
}
val jsDispatchReceiver = expression.dispatchReceiver?.accept(transformer, context)
- val jsExtensionReceiver = expression.extensionReceiver?.accept(transformer, context)
val arguments = translateCallArguments(expression, context, transformer)
// Transform external and interface's property accessor call
@@ -142,7 +141,7 @@
}
if (isFunctionTypeInvoke(jsDispatchReceiver, expression) || expression.symbol.owner.isJsNativeInvoke()) {
- return JsInvocation(jsDispatchReceiver ?: jsExtensionReceiver!!, arguments)
+ return JsInvocation(jsDispatchReceiver!!, arguments)
}
expression.superQualifierSymbol?.let { superQualifier ->
@@ -184,7 +183,7 @@
val argumentsAsSingleArray = argumentsWithVarargAsSingleArray(
expression,
context,
- jsExtensionReceiver,
+ additionalReceiver = null,
arguments,
varargParameterIndex
)
@@ -241,7 +240,7 @@
}
}
} else {
- JsInvocation(ref, listOfNotNull(jsExtensionReceiver) + arguments)
+ JsInvocation(ref, arguments)
}
}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt
index 5222ab4..69a2178 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt
@@ -123,6 +123,7 @@
if (isInvoke) {
require(expression.dispatchReceiver == null) { renderCompilerError(expression) }
+ // ??
targetPtrParameter = callBuilder.passThroughBridge(
expression.extensionReceiver!!,
symbols.interopCPointer.starProjectedType,
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
index 475a364..a1cb646 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
@@ -599,6 +599,7 @@
.map { index -> expression.getValueArgument(index) }
return builder.at(expression).run {
+ // ??
val classPtr = getRawPtr(expression.extensionReceiver!!)
callAllocAndInit(classPtr, initMethodInfo, arguments, expression, callee)
}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StringConcatenationTypeNarrowing.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StringConcatenationTypeNarrowing.kt
index 203f314..714e38a 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StringConcatenationTypeNarrowing.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StringConcatenationTypeNarrowing.kt
@@ -69,7 +69,7 @@
buildConcatenationCall(plusImplFunction, dispatchReceiver!!, buildNullableArgToString(getValueArgument(0)!!))
context.irBuiltIns.extensionStringPlus ->
- buildConcatenationCall(plusImplFunction, buildNullableArgToString(extensionReceiver!!), buildNullableArgToString(getValueArgument(0)!!))
+ buildConcatenationCall(plusImplFunction, buildNullableArgToString(extensionReceiver!!), buildNullableArgToString(getValueArgument(1)!!))
else -> expression
}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
index a5744b2..36b4b78 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
@@ -1360,20 +1360,11 @@
}
fun IrCallImpl.putArgument(index: Int, value: IrExpression) {
- var receiversCount = 0
val callee = symbol.owner
- if (callee.dispatchReceiverParameter != null)
- ++receiversCount
- if (callee.extensionReceiverParameter != null)
- ++receiversCount
- if (index >= receiversCount)
- putValueArgument(index - receiversCount, value)
- else {
- if (callee.dispatchReceiverParameter != null && index == 0)
- dispatchReceiver = value
- else
- extensionReceiver = value
- }
+ if (callee.dispatchReceiverParameter != null && index == 0)
+ dispatchReceiver = value
+ else
+ putValueArgument(index - (callee.dispatchReceiverParameter != null).toInt(), value)
}
fun IrBuilderWithScope.irDevirtualizedCall(callSite: IrCall,