JS/Inlining: in function call like fn() extract fn to a local variable, since fn can be access to property with side effects. Add tests to prove that evaluation order became proper in certain cases. Fix KT-11711, KT-7674, KT-7043

This commit is contained in:
Alexey Andreev
2016-05-06 13:27:59 +03:00
parent c3d0fca92b
commit 4783c9b612
6 changed files with 205 additions and 1 deletions
@@ -179,6 +179,18 @@ public class InlineEvaluationOrderTestGenerated extends AbstractInlineEvaluation
doTest(fileName);
}
@TestMetadata("inlineFunctionAsParameterOfQualifiedCall.kt")
public void testInlineFunctionAsParameterOfQualifiedCall() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/inlineFunctionAsParameterOfQualifiedCall.kt");
doTest(fileName);
}
@TestMetadata("lambdaPropertyExtracted.kt")
public void testLambdaPropertyExtracted() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/lambdaPropertyExtracted.kt");
doTest(fileName);
}
@TestMetadata("lambdaWithClosure.kt")
public void testLambdaWithClosure() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/lambdaWithClosure.kt");
@@ -251,6 +263,18 @@ public class InlineEvaluationOrderTestGenerated extends AbstractInlineEvaluation
doTest(fileName);
}
@TestMetadata("propertyWithSideEffectExtracted.kt")
public void testPropertyWithSideEffectExtracted() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/propertyWithSideEffectExtracted.kt");
doTest(fileName);
}
@TestMetadata("propertyWithSideEffectPassedToInlineFunction.kt")
public void testPropertyWithSideEffectPassedToInlineFunction() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/propertyWithSideEffectPassedToInlineFunction.kt");
doTest(fileName);
}
@TestMetadata("ternaryConditional.kt")
public void testTernaryConditional() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/inlineEvaluationOrder/cases/ternaryConditional.kt");