JS: don't mark access to captured var as pure

See KT-19108
This commit is contained in:
Alexey Andreev
2017-09-06 18:38:06 +03:00
parent f2b6644db5
commit 4779f4fefb
3 changed files with 27 additions and 1 deletions
@@ -4310,6 +4310,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
doTest(fileName);
}
@TestMetadata("capturedVarAsArgument.kt")
public void testCapturedVarAsArgument() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineEvaluationOrder/capturedVarAsArgument.kt");
doTest(fileName);
}
@TestMetadata("conditional.kt")
public void testConditional() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineEvaluationOrder/conditional.kt");
@@ -176,7 +176,9 @@ public final class Namer {
@NotNull
public static JsNameRef getCapturedVarAccessor(@NotNull JsExpression ref) {
return pureFqn(CAPTURED_VAR_FIELD, ref);
JsNameRef result = new JsNameRef(CAPTURED_VAR_FIELD, ref);
MetadataProperties.setSideEffects(result, SideEffectKind.DEPENDS_ON_STATE);
return result;
}
@NotNull
@@ -0,0 +1,18 @@
// EXPECTED_REACHABLE_NODES: 996
var log = ""
inline fun foo(x: Int, action: (Int) -> Unit) = action(x)
fun box(): String {
var x = 23
foo(x) {
log += "$it;"
x++
log += "$it;"
}
if (log != "23;23;") return "fail1: $log"
if (x != 24) return "fail2: $x"
return "OK"
}