JS: ExpressionDecomposer should always visit JsInvocation qualifier

This commit is contained in:
Alexey Tsvetkov
2015-04-21 16:40:16 +03:00
parent 8db104ef36
commit 68603d188b
3 changed files with 28 additions and 1 deletions
@@ -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
@@ -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");
@@ -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"
}