From 79b42d7fe5b5c3b0493a6104e7a0dbce8bc6a837 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 15 Feb 2016 19:17:44 +0300 Subject: [PATCH] [KT-10614] Fix issue: copy array on vararg call with spread operator --- .../kotlin/js/translate/reference/CallArgumentTranslator.kt | 3 +++ js/js.translator/testData/expression/function/cases/vararg.kt | 3 +++ 2 files changed, 6 insertions(+) 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