diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 2afac13e9ec..e9b3fc2c12f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -5278,6 +5278,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsModule/importCountUmd.kt"); doTest(fileName); } + + @TestMetadata("topLevelVarargFun.kt") + public void testTopLevelVarargFun() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsModule/topLevelVarargFun.kt"); + doTest(fileName); + } } @TestMetadata("js/js.translator/testData/box/jsName") diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index 3b10088b544..5e8c7d5672e 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -73,12 +73,12 @@ object DefaultFunctionCallCase : FunctionCallCase() { callableDescriptor: CallableDescriptor, isNative: Boolean, hasSpreadOperator: Boolean): JsExpression { + val functionRef = ReferenceTranslator.translateAsValueReference(callableDescriptor, context) if (isNative && hasSpreadOperator) { - val functionCallRef = Namer.getFunctionApplyRef(JsNameRef(context.getNameForDescriptor(callableDescriptor))) + val functionCallRef = Namer.getFunctionApplyRef(functionRef) return JsInvocation(functionCallRef, argumentsInfo.translateArguments) } - val functionRef = ReferenceTranslator.translateAsValueReference(callableDescriptor, context) return JsInvocation(functionRef, argumentsInfo.translateArguments) } diff --git a/js/js.translator/testData/box/jsModule/topLevelVarargFun.js b/js/js.translator/testData/box/jsModule/topLevelVarargFun.js new file mode 100644 index 00000000000..7f7b027cb56 --- /dev/null +++ b/js/js.translator/testData/box/jsModule/topLevelVarargFun.js @@ -0,0 +1,5 @@ +define("bar", [], function() { + return function() { + return "(" + Array.prototype.join.call(arguments, "") + ")"; + }; +}); \ No newline at end of file diff --git a/js/js.translator/testData/box/jsModule/topLevelVarargFun.kt b/js/js.translator/testData/box/jsModule/topLevelVarargFun.kt new file mode 100644 index 00000000000..79d8875ab64 --- /dev/null +++ b/js/js.translator/testData/box/jsModule/topLevelVarargFun.kt @@ -0,0 +1,15 @@ +// EXPECTED_REACHABLE_NODES: 490 +// MODULE_KIND: AMD +@JsModule("bar") +external fun foo(vararg arg: String): String + +fun box(): String { + val x = arrayOf("a", "b") + var r = foo(*x) + if (r != "(ab)") return "fail1: $r" + + r = foo("c", "d") + if (r != "(cd)") return "fail2: $r" + + return "OK" +} \ No newline at end of file