diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt index a3299ad178b..c9d028c10ac 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt @@ -74,6 +74,13 @@ class ExpressionDecomposer private ( return decomposer.additionalStatements } } + + override fun visit(x: JsArrayLiteral, ctx: JsContext<*>): Boolean { + val elements = x.getExpressions() + processByIndices(elements, elements.indicesOfExtractable) + return false + } + override fun visit(x: JsInvocation, ctx: JsContext<*>): Boolean { CallableInvocationAdapter(x).process() return false diff --git a/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteral.kt b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteral.kt new file mode 100644 index 00000000000..6e15348afae --- /dev/null +++ b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteral.kt @@ -0,0 +1,8 @@ +package foo + +fun box(): String { + assertEquals(array(1, 2), array(fizz(1), buzz(2))) + assertEquals("fizz(1);buzz(2);", pullLog()) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralMultipleInlineCalls.kt b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralMultipleInlineCalls.kt new file mode 100644 index 00000000000..ba52d0a826a --- /dev/null +++ b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralMultipleInlineCalls.kt @@ -0,0 +1,8 @@ +package foo + +fun box(): String { + assertEquals(array(1, 2, 3, 4), array(fizz(1), buzz(2), fizz(3), buzz(4))) + assertEquals("fizz(1);buzz(2);fizz(3);buzz(4);", pullLog()) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralNested.kt b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralNested.kt new file mode 100644 index 00000000000..bb3a452f1bc --- /dev/null +++ b/js/js.translator/testData/inlineEvaluationOrder/cases/arrayLiteralNested.kt @@ -0,0 +1,8 @@ +package foo + +fun box(): String { + assertEquals(array(array(1, 2), array(3, 4)), array(array(fizz(1), buzz(2)), array(fizz(3), buzz(4)))) + assertEquals("fizz(1);buzz(2);fizz(3);buzz(4);", pullLog()) + + return "OK" +} \ No newline at end of file