[K/JS] Add support of compilation with ES-classes

This commit is contained in:
Artem Kobzar
2023-01-17 18:14:17 +00:00
committed by Space Team
parent 8d728d4f53
commit 71486a321c
239 changed files with 57567 additions and 1658 deletions
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1331
fun box(): String {
val s = String()
val ints = Array<Int>(2) { i -> (i + 2) * 2 }
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1344
open class A(var value: Int) {
init {
value *= 2
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1347
var sideEffect = ""
abstract class A {
@@ -1,5 +1,3 @@
//IGNORE_BACKEND: JS, JS_IR
var sideEffect = ""
open external class E()
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1355
var sideEffect = ""
open class Summator(x: Int, y: Int) {
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1359
open class A(val x: Int) {
constructor(): this(100)
}
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1340
open class A(val x: Int)
class B(val p: Int, val q: Int): A(p + q)
@@ -1,5 +1,3 @@
//IGNORE_BACKEND: JS, JS_IR
open external class E(x: Int, y: Int) {
val t: Int = definedExternally
}
@@ -1,5 +1,3 @@
//IGNORE_BACKEND: JS, JS_IR
open external class E(x: Int, y: Int) {
val t: Int = definedExternally
}
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1345
var sideEffect = ""
open class A(var value: Int) {
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1343
abstract class A {
abstract fun foo(): String
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1341
open class A(val x: Int, val y: Int) {
constructor(x: Int) : this(x, x)
}
@@ -0,0 +1,7 @@
class JsFoo {
static instances = new Set();
constructor(value) {
this.value = value;
JsFoo.instances.add(this);
}
}
@@ -0,0 +1,24 @@
@JsName("Set")
external class JsSet<T> {
fun has(value: T): Boolean
}
external open class JsFoo(value: String) {
val value: String
companion object {
val instances: JsSet<JsFoo>
}
}
class KotlinFoo(value: String) : JsFoo(value) {
fun existsInJs(): Boolean = JsFoo.instances.has(this)
}
fun box(): String {
val foo = KotlinFoo("TEST")
assertEquals("TEST", foo.value)
assertEquals(true, foo.existsInJs())
return "OK"
}
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1358
open class A(var value: Int)
open class B : A {
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1371
inline class I1(val a: Int)
inline class I2(val i: I1)
inline class I3(val i: I2)
@@ -1,5 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1251
// IGNORE_BACKEND: JS_IR_ES6
// KT-41227
var result = ""
@@ -1,6 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1288
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// FILE: foo.kt
package foo
@@ -1,5 +1,5 @@
// IGNORE_FIR
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1336
// MODULE: lib
// FILE: lib.kt
+1
View File
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1288
// IGNORE_BACKEND: JS_IR_ES6
// CHECK_CONTAINS_NO_CALLS: box except=equals;Baz_getInstance;callLocal;callLocalExtension TARGET_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: box except=Foo_getInstance;Bar;Baz_getInstance;callLocal;callLocalExtension IGNORED_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: callLocal
@@ -1,14 +1,14 @@
// EXPECTED_REACHABLE_NODES: 1285
package foo
// CHECK_CONTAINS_NO_CALLS: myMultiply except=A;imul
// CHECK_CONTAINS_NO_CALLS: myMultiply except=A;imul;new_foo_A_16tm4z_k$
internal class A(val a: Int)
internal inline fun <T, R> with2(receiver: T, arg1: R, arg2: R, f: T.(R, R) -> R): R = receiver.f(arg1, arg2)
// CHECK_BREAKS_COUNT: function=myMultiply count=0 TARGET_BACKENDS=JS_IR
// CHECK_LABELS_COUNT: function=myMultiply name=$l$block count=0 TARGET_BACKENDS=JS_IR
// CHECK_BREAKS_COUNT: function=myMultiply count=0 TARGET_BACKENDS=JS_IR,JS_IR_ES6
// CHECK_LABELS_COUNT: function=myMultiply name=$l$block count=0 TARGET_BACKENDS=JS_IR,JS_IR_ES6
internal fun myMultiply(a: Int, b: Int, c: Int): Int = with2(A(a), b, c) { x, y -> a*x*y }
fun box(): String {
+1 -1
View File
@@ -209,7 +209,7 @@ fun testNullableUnderlyingType() {
caseJsEq()
}
// CHECK_NEW_COUNT: function=testUnderlyingWithEqualsOverride count=4
// CHECK_NEW_COUNT: function=testUnderlyingWithEqualsOverride count=4 TARGET_BACKENDS=JS_IR
// CHECK_CALLED_IN_SCOPE: scope=testUnderlyingWithEqualsOverride function=equals
fun testUnderlyingWithEqualsOverride() {
val x0 = ClassUnderlayingWithEquals(MyClass(0))
@@ -1,5 +1,4 @@
// IGNORE_FIR
// IGNORE_BACKEND: JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1397
// MODULE: lib
// FILE: lib.kt
@@ -1,5 +1,4 @@
// IGNORE_FIR
// IGNORE_BACKEND: JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1282
// MODULE: lib
// FILE: lib.kt
@@ -1,5 +1,4 @@
// EXPECTED_REACHABLE_NODES: 1285
// IGNORE_BACKEND: JS_IR_ES6
package foo
external class A {
@@ -1,5 +1,5 @@
// IGNORE_FIR
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// MODULE: AT
// FILE: at.kt
@@ -1,6 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: CLASS_EXPORT
// IGNORE_BACKEND: JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1294
package foo
@@ -1,5 +1,5 @@
// IGNORE_FIR
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1454
// MODULE: lib1
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JS_IR_ES6
import kotlin.reflect.KClass
// FILE: main.kt
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JS_IR_ES6
// FILE: main.kt
import kotlin.reflect.KClass
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JS_IR_ES6
import kotlin.reflect.KClass
// FILE: main.kt
@@ -1,4 +1,5 @@
// KJS_WITH_FULL_RUNTIME
// IGNORE_BACKEND: JS_IR_ES6
import kotlin.reflect.KClass
import kotlin.reflect.KType
@@ -1,7 +1,5 @@
// IGNORE_BACKEND: JS
fun test(case: String, expctedMessage: String?, expectedCause: Throwable?, expectedToString: String, t: Throwable): String {
val actualMessage = t.message
if (actualMessage != expctedMessage) return "$case FAIL message: $actualMessage, expcted: $expctedMessage"