[JS IR] Fix referencing Kotin variables in inline JS code

Fixed by outlining JS code that uses Kotlin variables making usages of
these locals explicit and preventing bugs due to one-sided variable renaming.

This prevents using Kotlin variables as lvalue in JS code.
This commit is contained in:
Svyatoslav Kuzmich
2021-01-22 15:24:05 +03:00
parent 708e6914bd
commit cb3b1f8ae2
14 changed files with 253 additions and 22 deletions
+18 -14
View File
@@ -21,13 +21,15 @@ fun box(): String {
assertEquals(1, js("0 ^ 1"), "^")
assertEquals(-2, js("~1"), "~")
var i = 2
assertEquals(1, js("--i"), "-- prefix")
assertEquals(1, js("i--"), "-- postfix (1)")
assertEquals(0, js("i"), "-- postfix (0)")
assertEquals(1, js("++i"), "++ prefix")
assertEquals(1, js("i++"), "++ postfix (1)")
assertEquals(2, js("i"), "++ postfix (0)")
if (testUtils.isLegacyBackend()) {
var i = 2
assertEquals(1, js("--i"), "-- prefix")
assertEquals(1, js("i--"), "-- postfix (1)")
assertEquals(0, js("i"), "-- postfix (0)")
assertEquals(1, js("++i"), "++ prefix")
assertEquals(1, js("i++"), "++ postfix (1)")
assertEquals(2, js("i"), "++ postfix (0)")
}
assertEquals(true , js("true || false"), "||")
assertEquals(false , js("true && false"), "&&")
@@ -47,13 +49,15 @@ fun box(): String {
assertEquals("even", js("(4 % 2 === 0)?'even':'odd'"), "?:")
assertEquals(3, js("1,2,3"), ", (comma)")
var j = 0
assertEquals(1, js("j = 1"), "=")
assertEquals(3, js("j += 2"), "+=")
assertEquals(2, js("j -= 1"), "-=")
assertEquals(14, js("j *= 7"), "*=")
assertEquals(7, js("j /= 2"), "/=")
assertEquals(1, js("j %= 2"), "%=")
if (testUtils.isLegacyBackend()) {
var j = 0
assertEquals(1, js("j = 1"), "=")
assertEquals(3, js("j += 2"), "+=")
assertEquals(2, js("j -= 1"), "-=")
assertEquals(14, js("j *= 7"), "*=")
assertEquals(7, js("j /= 2"), "/=")
assertEquals(1, js("j %= 2"), "%=")
}
assertEquals(undefined, js("(void 0)"), "void")
assertEquals(true, js("'key' in {'key': 10}"), "in")