diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt index 652c99e8f03..53639da2edb 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt @@ -237,6 +237,9 @@ class CallArgumentTranslator private constructor( val concatExpression = concatArgumentsIfNeeded(concatArguments) result.add(concatExpression) } + else if (result.size == 1) { + result[0] = JsAstUtils.invokeMethod(result[0], "slice") + } return resultKind } diff --git a/js/js.translator/testData/expression/function/cases/vararg.kt b/js/js.translator/testData/expression/function/cases/vararg.kt index 15030e25713..ee89a451dc8 100644 --- a/js/js.translator/testData/expression/function/cases/vararg.kt +++ b/js/js.translator/testData/expression/function/cases/vararg.kt @@ -103,5 +103,8 @@ fun box(): String { assertEquals(3, idArrayVarArg(arrayOf(1, 2), *arrayOf(arrayOf(3, 4), arrayOf(5, 6))).size) assertEquals(6, idArrayVarArg(arrayOf(1, 2), *arrayOf(arrayOf(3, 4), arrayOf(5, 6)), arrayOf(7), *arrayOf(arrayOf(8, 9), arrayOf(10, 11))).size) + val c = arrayOf(*a) + assertFalse(a === c, "Spread operator should copy its argument") + return "OK" } \ No newline at end of file