[K/JS] Add support of compilation with ES-classes
This commit is contained in:
@@ -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)
|
||||
|
||||
-2
@@ -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,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 {
|
||||
|
||||
@@ -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"
|
||||
|
||||
Vendored
+2
@@ -1,3 +1,5 @@
|
||||
MUTED
|
||||
|
||||
MODULES: lib1, lib2, main
|
||||
|
||||
STEP 0:
|
||||
|
||||
+2
-2
@@ -11,5 +11,5 @@ fun baz() = 1
|
||||
|
||||
fun bar() = 2
|
||||
|
||||
// LINES(JS): 1 3 3 2 2 4 3 4 4 4 5 5 2 8 8 10 10 10 12 12 12
|
||||
// LINES(JS_IR): 1 2 * 3 4 5 * 8 8 10 10 10 10 12 12 12 12
|
||||
// LINES(JS): 1 3 3 2 2 4 3 4 4 4 5 5 2 8 8 10 10 10 12 12 12
|
||||
// LINES(JS_IR): 1 2 8 * 3 4 5 * 8 8 10 10 10 10 12 12 12 12
|
||||
|
||||
+2
-2
@@ -7,5 +7,5 @@ fun box(
|
||||
println(y)
|
||||
}
|
||||
|
||||
// LINES(JS): 1 8 2 2 2 2 3 3 3 4 6 6 7 7
|
||||
// LINES(JS_IR): 1 2 3 2 4 6 6 7 7
|
||||
// LINES(JS): 1 8 2 2 2 2 3 3 3 4 6 6 7 7
|
||||
// LINES(JS_IR): 1 2 3 5 2 4 6 6 7 7
|
||||
|
||||
+2
@@ -18,5 +18,7 @@ declare namespace JS_TESTS {
|
||||
function genericWithMultipleConstraints<T extends unknown/* kotlin.Comparable<T> */ & foo.SomeExternalInterface & Error>(x: T): T;
|
||||
function generic3<A, B, C, D, E>(a: A, b: B, c: C, d: D): Nullable<E>;
|
||||
function inlineFun(x: number, callback: (p0: number) => void): void;
|
||||
function formatList(value: any/* kotlin.collections.List<UnknownType *> */): string;
|
||||
function createList(): any/* kotlin.collections.List<UnknownType *> */;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -6,6 +6,7 @@
|
||||
// SKIP_NODE_JS
|
||||
// INFER_MAIN_MODULE
|
||||
// MODULE: JS_TESTS
|
||||
// WITH_STDLIB
|
||||
// FILE: functions.kt
|
||||
|
||||
@file:JsExport
|
||||
@@ -64,4 +65,10 @@ fun <A, B, C, D, E> generic3(a: A, b: B, c: C, d: D): E? = null
|
||||
|
||||
inline fun inlineFun(x: Int, callback: (Int) -> Unit) {
|
||||
callback(x)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun formatList(value: List<*>): String = value.joinToString(", ") { it.toString() }
|
||||
|
||||
|
||||
fun createList(): List<*> = listOf(1, 2, 3)
|
||||
|
||||
+3
@@ -23,6 +23,8 @@ var varargWithOtherParameters = JS_TESTS.foo.varargWithOtherParameters;
|
||||
var varargWithComplexType = JS_TESTS.foo.varargWithComplexType;
|
||||
var genericWithConstraint = JS_TESTS.foo.genericWithConstraint;
|
||||
var genericWithMultipleConstraints = JS_TESTS.foo.genericWithMultipleConstraints;
|
||||
var formatList = JS_TESTS.foo.formatList;
|
||||
var createList = JS_TESTS.foo.createList;
|
||||
function assert(condition) {
|
||||
if (!condition) {
|
||||
throw "Assertion failed";
|
||||
@@ -55,5 +57,6 @@ function box() {
|
||||
var result = 0;
|
||||
inlineFun(10, function (x) { result = x; });
|
||||
assert(result === 10);
|
||||
assert(formatList(createList()) === "1, 2, 3");
|
||||
return "OK";
|
||||
}
|
||||
|
||||
+4
-1
@@ -11,7 +11,8 @@ import varargWithOtherParameters = JS_TESTS.foo.varargWithOtherParameters;
|
||||
import varargWithComplexType = JS_TESTS.foo.varargWithComplexType;
|
||||
import genericWithConstraint = JS_TESTS.foo.genericWithConstraint;
|
||||
import genericWithMultipleConstraints = JS_TESTS.foo.genericWithMultipleConstraints;
|
||||
|
||||
import formatList = JS_TESTS.foo.formatList;
|
||||
import createList = JS_TESTS.foo.createList;
|
||||
function assert(condition: boolean) {
|
||||
if (!condition) {
|
||||
throw "Assertion failed";
|
||||
@@ -54,5 +55,7 @@ function box(): string {
|
||||
inlineFun(10, x => { result = x; });
|
||||
assert(result === 10);
|
||||
|
||||
assert(formatList(createList()) === "1, 2, 3")
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user