~ 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,