diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index cb942e76a34..c84682fbdbd 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -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"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index 455b7efc7de..984131ad059 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -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 diff --git a/js/js.translator/testData/box/inlineEvaluationOrder/capturedVarAsArgument.kt b/js/js.translator/testData/box/inlineEvaluationOrder/capturedVarAsArgument.kt new file mode 100644 index 00000000000..831335f6a42 --- /dev/null +++ b/js/js.translator/testData/box/inlineEvaluationOrder/capturedVarAsArgument.kt @@ -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" +} \ No newline at end of file