JS: ExpressionDecomposer should always visit JsInvocation qualifier
This commit is contained in:
@@ -260,10 +260,10 @@ class ExpressionDecomposer private (
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Callable.process() {
|
private fun Callable.process() {
|
||||||
|
qualifier = accept(qualifier)
|
||||||
var matchedIndices = arguments.indicesOfExtractable
|
var matchedIndices = arguments.indicesOfExtractable
|
||||||
if (!matchedIndices.hasNext()) return
|
if (!matchedIndices.hasNext()) return
|
||||||
|
|
||||||
qualifier = accept(qualifier)
|
|
||||||
if (qualifier in containsNodeWithSideEffect) {
|
if (qualifier in containsNodeWithSideEffect) {
|
||||||
val callee = qualifier as? JsNameRef
|
val callee = qualifier as? JsNameRef
|
||||||
val receiver = callee?.qualifier
|
val receiver = callee?.qualifier
|
||||||
|
|||||||
+6
@@ -119,6 +119,12 @@ public class InlineEvaluationOrderTestGenerated extends AbstractInlineEvaluation
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("conditional.kt")
|
||||||
public void testConditional() throws Exception {
|
public void testConditional() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/conditional.kt");
|
String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/conditional.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"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user