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 73a3bc5eb22..c221ea7f18c 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 @@ -260,10 +260,10 @@ class ExpressionDecomposer private ( } private fun Callable.process() { + qualifier = accept(qualifier) var matchedIndices = arguments.indicesOfExtractable if (!matchedIndices.hasNext()) return - qualifier = accept(qualifier) if (qualifier in containsNodeWithSideEffect) { val callee = qualifier as? JsNameRef val receiver = callee?.qualifier diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineEvaluationOrderTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineEvaluationOrderTestGenerated.java index 40b7290f872..7783c249453 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineEvaluationOrderTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineEvaluationOrderTestGenerated.java @@ -119,6 +119,12 @@ public class InlineEvaluationOrderTestGenerated extends AbstractInlineEvaluation doTest(fileName); } + @TestMetadata("callQualifierComplex.kt") + public void testCallQualifierComplex() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/callQualifierComplex.kt"); + doTest(fileName); + } + @TestMetadata("conditional.kt") public void testConditional() throws Exception { String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/conditional.kt"); diff --git a/js/js.translator/testData/inlineEvaluationOrder/cases/callQualifierComplex.kt b/js/js.translator/testData/inlineEvaluationOrder/cases/callQualifierComplex.kt new file mode 100644 index 00000000000..33141ee7c90 --- /dev/null +++ b/js/js.translator/testData/inlineEvaluationOrder/cases/callQualifierComplex.kt @@ -0,0 +1,21 @@ +package foo + +// CHECK_NOT_CALLED: multiplyFunInline + +fun multiplyFun(): (Int, Int)->Int { + log("multiplyFun()") + return { x, y -> x * y } +} + +inline +fun multiplyFunInline(): (Int, Int)->Int { + log("multiplyFunInline()") + return { x, y -> x * y } +} + +fun box(): String { + assertEquals(6, array(multiplyFun(), multiplyFunInline())[0](fizz(2), fizz(3))) + assertEquals("multiplyFun();multiplyFunInline();fizz(2);fizz(3);", pullLog()) + + return "OK" +} \ No newline at end of file