[JS IR] Add properties lazy initialization with multiple modules

[JS IR] Move tests into compiler/testData

[JS IR] Add cyclic dependencies with lazy property initialization

[JS IR] Add test on not initialization in case of call non properties (classed, objects, enum classes, const vals)

[JS IR] Add initialization through top level

[JS IR] Ignore enum getInstance function in property lazy initialization

[JS IR] Use let function with useful result instead of pure apply and also

[JS IR] Remove duplicated tests in js.translator
This commit is contained in:
Ilya Goncharov
2020-11-24 17:19:15 +03:00
parent 6cb573cb45
commit 697b2b02f1
19 changed files with 335 additions and 67 deletions
@@ -6786,26 +6786,6 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationPure.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
@@ -17709,6 +17709,46 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationCyclicImports.kt")
public void testLazyInitializationCyclicImports() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationCyclicImports.kt");
}
@TestMetadata("lazyInitializationMultiModule.kt")
public void testLazyInitializationMultiModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationMultiModule.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("lazyInitializationThroughTopFun.kt")
public void testLazyInitializationThroughTopFun() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationThroughTopFun.kt");
}
@TestMetadata("noInitializationLazilyOnNonPropertiesCall.kt")
public void testNoInitializationLazilyOnNonPropertiesCall() throws Exception {
runTest("compiler/testData/codegen/box/properties/noInitializationLazilyOnNonPropertiesCall.kt");
}
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
@@ -6786,26 +6786,6 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationPure.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
@@ -17709,6 +17709,46 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationCyclicImports.kt")
public void testLazyInitializationCyclicImports() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationCyclicImports.kt");
}
@TestMetadata("lazyInitializationMultiModule.kt")
public void testLazyInitializationMultiModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationMultiModule.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("lazyInitializationThroughTopFun.kt")
public void testLazyInitializationThroughTopFun() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationThroughTopFun.kt");
}
@TestMetadata("noInitializationLazilyOnNonPropertiesCall.kt")
public void testNoInitializationLazilyOnNonPropertiesCall() throws Exception {
runTest("compiler/testData/codegen/box/properties/noInitializationLazilyOnNonPropertiesCall.kt");
}
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
@@ -6816,26 +6816,6 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationPure.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
@@ -17814,6 +17814,31 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
}
@TestMetadata("lazyInitialization.kt")
public void testLazyInitialization() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationCyclicImports.kt")
public void testLazyInitializationCyclicImports() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationCyclicImports.kt");
}
@TestMetadata("lazyInitializationMultiModule.kt")
public void testLazyInitializationMultiModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationMultiModule.kt");
}
@TestMetadata("lazyInitializationOrder.kt")
public void testLazyInitializationOrder() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationOrder.kt");
}
@TestMetadata("lazyInitializationSplitPerModule.kt")
public void testLazyInitializationSplitPerModule() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationSplitPerModule.kt");
}
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
@@ -1,18 +0,0 @@
// IGNORE_BACKEND: JS
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val o = "O"
// FILE: B.kt
val ok = o + k
// FILE: C.kt
val k = "K"
// FILE: main.kt
fun box(): String = ok
@@ -1,36 +0,0 @@
// EXPECTED_REACHABLE_NODES: 1239
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val a = "A".let {
flag = !flag
if (flag) {
it
} else {
"!A"
}
}
val b = "B".let {
flag = !flag
if (!flag) {
it
} else {
"!B"
}
}
// FILE: B.kt
var flag: Boolean = false
// FILE: main.kt
fun box(): String {
return if (
a == "A" && b == "B"
)
"OK"
else "a = $a; b = ${b}"
}
@@ -1,32 +0,0 @@
// IGNORE_BACKEND: JS
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val a = "A"
// FILE: B.kt
val b = "B".apply {}
val c = b
// FILE: C.kt
val d = "D".apply {}
val e = d
// FILE: main.kt
fun box(): String {
// Get only e to initialize all properties in file
e
return if (
js("a") === "A" &&
js("typeof b") == "undefined" &&
js("typeof c") == "undefined" &&
js("d") === "D" &&
js("e") === "D"
)
"OK"
else "a = ${js("a")}; typeof b = ${js("typeof b")}; typeof c = ${js("typeof c")}; d = ${js("d")}; e = ${js("e")}"
}
@@ -1,22 +0,0 @@
// IGNORE_BACKEND: JS
// DONT_TARGET_EXACT_BACKEND: WASM
// SPLIT_PER_MODULE
// PROPERTY_LAZY_INITIALIZATION
// MODULE: lib1
// FILE: A.kt
val o = "O"
// FILE: B.kt
val okCandidate = o + k
// FILE: C.kt
val k = "K"
// MODULE: lib2(lib1)
// FILE: lib2.kt
val ok = okCandidate
// MODULE: main(lib1, lib2)
// FILE: main.kt
fun box(): String = ok