[WASM] Fix weird use of copyValueArgumentsFrom
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
index 331b458..7eef76f 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
@@ -544,30 +544,28 @@
             val oldFun = call.symbol.owner.realOverrideTarget
             val newFun: IrSimpleFunction = nestedExternalToNewTopLevelFunctions[oldFun] ?: return call
 
-            val newCall = irCall(call, newFun, receiversAsArguments = true)
+            val newCall = IrCallImpl(call.startOffset, call.endOffset, newFun.returnType, newFun.symbol)
+
+            // Copy arguments or fill with default
+            for (parameter in oldFun.parameters) {
+                val arg = call.arguments[parameter.indexInParameters]
+                newCall.arguments[parameter.indexInParameters] = if (
+                    arg == null &&
+                    !parameter.isVararg // Handled with WasmVarargExpressionLowering
+                ) IrConstImpl.defaultValueForType(UNDEFINED_OFFSET, UNDEFINED_OFFSET, parameter.type)
+                else arg
+            }
 
             // Add default arguments flags if needed
             val numDefaultParameters = numDefaultParametersForExternalFunction(oldFun)
+            val firstOldDefaultArgumentIdx = oldFun.parameters.size - numDefaultParameters
             val firstDefaultFlagArgumentIdx = newFun.parameters.size - numDefaultParameters
-
-            val valueArguments = call.arguments
-                .filterIndexed { index, _ -> call.symbol.owner.parameters[index].kind == IrParameterKind.Regular }
-            val firstOldDefaultArgumentIdx = valueArguments.size - numDefaultParameters
-
-            repeat(numDefaultParameters) {
-                val value = if (call.valueArguments[firstOldDefaultArgumentIdx + it] == null) 1 else 0
-                newCall.arguments[firstDefaultFlagArgumentIdx + it] =
+            for (i in 0..<numDefaultParameters) {
+                val value = if (call.arguments[i + firstOldDefaultArgumentIdx] == null) 1 else 0
+                newCall.arguments[firstDefaultFlagArgumentIdx + i] =
                     IrConstImpl.int(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.intType, value)
             }
 
-            // Add default argument values if needed
-            for (i in 0 until newFun.parameters.size) {
-                val parameter = newFun.parameters[i]
-                if (parameter.isVararg) continue // Handled with WasmVarargExpressionLowering
-                if (newCall.arguments[i] != null) continue
-                newCall.arguments[i] = IrConstImpl.defaultValueForType(UNDEFINED_OFFSET, UNDEFINED_OFFSET, parameter.type)
-            }
-
             return newCall
         }
     }