[JS IR] - Remove file lowering declarations from lowering phases
- rename fileToPurenessInitializers onto fileToInitializerPureness - remove redundant check on top-level property [JS IR] Rename initialis* to initializ* for consistency [JS IR] Move propertyLazyInitialization property to context from configuration [JS IR] Add test on lazy initialization properties order [JS IR] Add multi module for lazy initialization of properties [JS IR] Move tests onto js.translator [JS IR] Rename fileToInitializerPureness according to context name ^KT-43222 fixed
This commit is contained in:
+2
-2
@@ -125,8 +125,8 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
|
|||||||
@Argument(value = "-Xir-dce-print-reachability-info", description = "Print declarations' reachability info to stdout during performing DCE")
|
@Argument(value = "-Xir-dce-print-reachability-info", description = "Print declarations' reachability info to stdout during performing DCE")
|
||||||
var irDcePrintReachabilityInfo: Boolean by FreezableVar(false)
|
var irDcePrintReachabilityInfo: Boolean by FreezableVar(false)
|
||||||
|
|
||||||
@Argument(value = "-Xir-property-lazy-initialisation", description = "Perform lazy initialisation for properties")
|
@Argument(value = "-Xir-property-lazy-initialization", description = "Perform lazy initialization for properties")
|
||||||
var irPropertyLazyInitialisation: Boolean by FreezableVar(false)
|
var irPropertyLazyInitialization: Boolean by FreezableVar(false)
|
||||||
|
|
||||||
@Argument(value = "-Xir-only", description = "Disables pre-IR backend")
|
@Argument(value = "-Xir-only", description = "Disables pre-IR backend")
|
||||||
var irOnly: Boolean by FreezableVar(false)
|
var irOnly: Boolean by FreezableVar(false)
|
||||||
|
|||||||
@@ -159,11 +159,6 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
arguments.irModuleName ?: FileUtil.getNameWithoutExtension(outputFile)
|
arguments.irModuleName ?: FileUtil.getNameWithoutExtension(outputFile)
|
||||||
)
|
)
|
||||||
|
|
||||||
configurationJs.put(
|
|
||||||
JSConfigurationKeys.PROPERTY_LAZY_INITIALISATION,
|
|
||||||
arguments.irPropertyLazyInitialisation
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO: in this method at least 3 different compiler configurations are used (original, env.configuration, jsConfig.configuration)
|
// TODO: in this method at least 3 different compiler configurations are used (original, env.configuration, jsConfig.configuration)
|
||||||
// Such situation seems a bit buggy...
|
// Such situation seems a bit buggy...
|
||||||
val config = JsConfig(projectJs, configurationJs)
|
val config = JsConfig(projectJs, configurationJs)
|
||||||
@@ -269,7 +264,8 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
generateDceJs = arguments.irDce,
|
generateDceJs = arguments.irDce,
|
||||||
dceDriven = arguments.irDceDriven,
|
dceDriven = arguments.irDceDriven,
|
||||||
multiModule = arguments.irPerModule,
|
multiModule = arguments.irPerModule,
|
||||||
relativeRequirePath = true
|
relativeRequirePath = true,
|
||||||
|
propertyLazyInitialization = arguments.irPropertyLazyInitialization,
|
||||||
)
|
)
|
||||||
} catch (e: JsIrCompilationError) {
|
} catch (e: JsIrCompilationError) {
|
||||||
return COMPILATION_ERROR
|
return COMPILATION_ERROR
|
||||||
|
|||||||
Generated
-5
@@ -21373,11 +21373,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
@@ -43,10 +43,11 @@ class JsIrBackendContext(
|
|||||||
val additionalExportedDeclarationNames: Set<FqName>,
|
val additionalExportedDeclarationNames: Set<FqName>,
|
||||||
override val configuration: CompilerConfiguration, // TODO: remove configuration from backend context
|
override val configuration: CompilerConfiguration, // TODO: remove configuration from backend context
|
||||||
override val scriptMode: Boolean = false,
|
override val scriptMode: Boolean = false,
|
||||||
override val es6mode: Boolean = false
|
override val es6mode: Boolean = false,
|
||||||
|
val propertyLazyInitialization: Boolean = false,
|
||||||
) : JsCommonBackendContext {
|
) : JsCommonBackendContext {
|
||||||
val fileToInitialisationFuns: MutableMap<IrFile, IrSimpleFunction?> = mutableMapOf()
|
val fileToInitializationFuns: MutableMap<IrFile, IrSimpleFunction?> = mutableMapOf()
|
||||||
val fileToPurenessInitializers: MutableMap<IrFile, Boolean> = mutableMapOf()
|
val fileToInitializerPureness: MutableMap<IrFile, Boolean> = mutableMapOf()
|
||||||
|
|
||||||
override val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
|
override val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
|
||||||
|
|
||||||
|
|||||||
@@ -109,16 +109,6 @@ class ModuleLowering(
|
|||||||
override val modulePhase: NamedCompilerPhase<JsIrBackendContext, Iterable<IrModuleFragment>>
|
override val modulePhase: NamedCompilerPhase<JsIrBackendContext, Iterable<IrModuleFragment>>
|
||||||
) : Lowering(name)
|
) : Lowering(name)
|
||||||
|
|
||||||
class FileLowering(
|
|
||||||
name: String,
|
|
||||||
description: String,
|
|
||||||
prerequisite: Set<NamedCompilerPhase<JsIrBackendContext, *>> = emptySet(),
|
|
||||||
private val factory: (JsIrBackendContext) -> FileLoweringPass
|
|
||||||
) : Lowering(name) {
|
|
||||||
override val modulePhase: NamedCompilerPhase<JsIrBackendContext, Iterable<IrModuleFragment>> =
|
|
||||||
makeJsModulePhase(factory, name, description, prerequisite)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun makeDeclarationTransformerPhase(
|
private fun makeDeclarationTransformerPhase(
|
||||||
lowering: (JsIrBackendContext) -> DeclarationTransformer,
|
lowering: (JsIrBackendContext) -> DeclarationTransformer,
|
||||||
name: String,
|
name: String,
|
||||||
@@ -133,13 +123,6 @@ private fun makeBodyLoweringPhase(
|
|||||||
prerequisite: Set<Lowering> = emptySet()
|
prerequisite: Set<Lowering> = emptySet()
|
||||||
) = BodyLowering(name, description, prerequisite.map { it.modulePhase }.toSet(), lowering)
|
) = BodyLowering(name, description, prerequisite.map { it.modulePhase }.toSet(), lowering)
|
||||||
|
|
||||||
private fun makeFileLoweringPhase(
|
|
||||||
lowering: (JsIrBackendContext) -> FileLoweringPass,
|
|
||||||
name: String,
|
|
||||||
description: String,
|
|
||||||
prerequisite: Set<Lowering> = emptySet()
|
|
||||||
) = FileLowering(name, description, prerequisite.map { it.modulePhase }.toSet(), lowering)
|
|
||||||
|
|
||||||
fun NamedCompilerPhase<JsIrBackendContext, Iterable<IrModuleFragment>>.toModuleLowering() = ModuleLowering(this.name, this)
|
fun NamedCompilerPhase<JsIrBackendContext, Iterable<IrModuleFragment>>.toModuleLowering() = ModuleLowering(this.name, this)
|
||||||
|
|
||||||
private val validateIrBeforeLowering = makeCustomJsModulePhase(
|
private val validateIrBeforeLowering = makeCustomJsModulePhase(
|
||||||
@@ -378,7 +361,7 @@ private val propertyLazyInitLoweringPhase = makeBodyLoweringPhase(
|
|||||||
private val removeInitializersForLazyProperties = makeDeclarationTransformerPhase(
|
private val removeInitializersForLazyProperties = makeDeclarationTransformerPhase(
|
||||||
::RemoveInitializersForLazyProperties,
|
::RemoveInitializersForLazyProperties,
|
||||||
name = "RemoveInitializersForLazyProperties",
|
name = "RemoveInitializersForLazyProperties",
|
||||||
description = "Remove property initializers if they was initialised lazily"
|
description = "Remove property initializers if they was initialized lazily"
|
||||||
)
|
)
|
||||||
|
|
||||||
private val propertyAccessorInlinerLoweringPhase = makeBodyLoweringPhase(
|
private val propertyAccessorInlinerLoweringPhase = makeBodyLoweringPhase(
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ fun compile(
|
|||||||
dceDriven: Boolean = false,
|
dceDriven: Boolean = false,
|
||||||
es6mode: Boolean = false,
|
es6mode: Boolean = false,
|
||||||
multiModule: Boolean = false,
|
multiModule: Boolean = false,
|
||||||
relativeRequirePath: Boolean = false
|
relativeRequirePath: Boolean = false,
|
||||||
|
propertyLazyInitialization: Boolean,
|
||||||
): CompilerResult {
|
): CompilerResult {
|
||||||
stageController = StageController()
|
stageController = StageController()
|
||||||
|
|
||||||
@@ -62,7 +63,16 @@ fun compile(
|
|||||||
is MainModule.Klib -> dependencyModules
|
is MainModule.Klib -> dependencyModules
|
||||||
}
|
}
|
||||||
|
|
||||||
val context = JsIrBackendContext(moduleDescriptor, irBuiltIns, symbolTable, allModules.first(), exportedDeclarations, configuration, es6mode = es6mode)
|
val context = JsIrBackendContext(
|
||||||
|
moduleDescriptor,
|
||||||
|
irBuiltIns,
|
||||||
|
symbolTable,
|
||||||
|
allModules.first(),
|
||||||
|
exportedDeclarations,
|
||||||
|
configuration,
|
||||||
|
es6mode = es6mode,
|
||||||
|
propertyLazyInitialization = propertyLazyInitialization,
|
||||||
|
)
|
||||||
|
|
||||||
// Load declarations referenced during `context` initialization
|
// Load declarations referenced during `context` initialization
|
||||||
val irProviders = listOf(deserializer)
|
val irProviders = listOf(deserializer)
|
||||||
|
|||||||
+30
-33
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrElementBase
|
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrElementBase
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys.PROPERTY_LAZY_INITIALISATION
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import kotlin.collections.component1
|
import kotlin.collections.component1
|
||||||
import kotlin.collections.component2
|
import kotlin.collections.component2
|
||||||
@@ -37,43 +36,41 @@ class PropertyLazyInitLowering(
|
|||||||
private val irFactory
|
private val irFactory
|
||||||
get() = context.irFactory
|
get() = context.irFactory
|
||||||
|
|
||||||
val fileToInitialisationFuns
|
private val fileToInitializationFuns
|
||||||
get() = context.fileToInitialisationFuns
|
get() = context.fileToInitializationFuns
|
||||||
|
|
||||||
val fileToPurenessInitializers
|
private val fileToInitializerPureness
|
||||||
get() = context.fileToPurenessInitializers
|
get() = context.fileToInitializerPureness
|
||||||
|
|
||||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||||
if (context.configuration[PROPERTY_LAZY_INITIALISATION] != true) {
|
if (!context.propertyLazyInitialization) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (container !is IrSimpleFunction && container !is IrField && container !is IrProperty)
|
if (container !is IrSimpleFunction && container !is IrField && container !is IrProperty)
|
||||||
return
|
return
|
||||||
|
|
||||||
if (!container.isTopLevel) return
|
|
||||||
|
|
||||||
val file = container.parent as? IrFile
|
val file = container.parent as? IrFile
|
||||||
?: return
|
?: return
|
||||||
|
|
||||||
val initFun = (when {
|
val initFun = (when {
|
||||||
file in fileToInitialisationFuns -> fileToInitialisationFuns[file]
|
file in fileToInitializationFuns -> fileToInitializationFuns[file]
|
||||||
fileToPurenessInitializers[file] == true -> null
|
fileToInitializerPureness[file] == true -> null
|
||||||
else -> {
|
else -> {
|
||||||
createInitialisationFunction(file).also {
|
createInitializationFunction(file).also {
|
||||||
fileToInitialisationFuns[file] = it
|
fileToInitializationFuns[file] = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}) ?: return
|
}) ?: return
|
||||||
|
|
||||||
val initialisationCall = JsIrBuilder.buildCall(
|
val initializationCall = JsIrBuilder.buildCall(
|
||||||
target = initFun.symbol,
|
target = initFun.symbol,
|
||||||
type = initFun.returnType
|
type = initFun.returnType
|
||||||
)
|
)
|
||||||
|
|
||||||
when (container) {
|
when (container) {
|
||||||
is IrSimpleFunction ->
|
is IrSimpleFunction ->
|
||||||
irBody.addInitialisation(initialisationCall, container)
|
irBody.addInitialization(initializationCall, container)
|
||||||
is IrField -> {
|
is IrField -> {
|
||||||
container
|
container
|
||||||
.correspondingProperty
|
.correspondingProperty
|
||||||
@@ -82,13 +79,13 @@ class PropertyLazyInitLowering(
|
|||||||
?.let { listOf(it.getter, it.setter) }
|
?.let { listOf(it.getter, it.setter) }
|
||||||
?.filterNotNull()
|
?.filterNotNull()
|
||||||
?.forEach {
|
?.forEach {
|
||||||
irBody.addInitialisation(initialisationCall, it)
|
irBody.addInitialization(initializationCall, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createInitialisationFunction(
|
private fun createInitializationFunction(
|
||||||
file: IrFile
|
file: IrFile
|
||||||
): IrSimpleFunction? {
|
): IrSimpleFunction? {
|
||||||
val fileName = file.name
|
val fileName = file.name
|
||||||
@@ -102,12 +99,12 @@ class PropertyLazyInitLowering(
|
|||||||
if (fieldToInitializer.isEmpty()) return null
|
if (fieldToInitializer.isEmpty()) return null
|
||||||
|
|
||||||
val allFieldsInFilePure = allFieldsInFilePure(fieldToInitializer.values)
|
val allFieldsInFilePure = allFieldsInFilePure(fieldToInitializer.values)
|
||||||
fileToPurenessInitializers[file] = allFieldsInFilePure
|
fileToInitializerPureness[file] = allFieldsInFilePure
|
||||||
if (allFieldsInFilePure) {
|
if (allFieldsInFilePure) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val initialisedField = irFactory.createInitialisationField(fileName)
|
val initializedField = irFactory.createInitializationField(fileName)
|
||||||
.apply {
|
.apply {
|
||||||
file.declarations.add(this)
|
file.declarations.add(this)
|
||||||
parent = file
|
parent = file
|
||||||
@@ -121,14 +118,14 @@ class PropertyLazyInitLowering(
|
|||||||
}.apply {
|
}.apply {
|
||||||
buildPropertiesInitializationBody(
|
buildPropertiesInitializationBody(
|
||||||
fieldToInitializer,
|
fieldToInitializer,
|
||||||
initialisedField
|
initializedField
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrFactory.createInitialisationField(fileName: String): IrField =
|
private fun IrFactory.createInitializationField(fileName: String): IrField =
|
||||||
buildField {
|
buildField {
|
||||||
name = Name.identifier("properties initialised $fileName")
|
name = Name.identifier("properties initialized $fileName")
|
||||||
type = irBuiltIns.booleanType
|
type = irBuiltIns.booleanType
|
||||||
isStatic = true
|
isStatic = true
|
||||||
isFinal = true
|
isFinal = true
|
||||||
@@ -137,18 +134,18 @@ class PropertyLazyInitLowering(
|
|||||||
|
|
||||||
private fun IrSimpleFunction.buildPropertiesInitializationBody(
|
private fun IrSimpleFunction.buildPropertiesInitializationBody(
|
||||||
initializers: Map<IrField, IrExpression>,
|
initializers: Map<IrField, IrExpression>,
|
||||||
initialisedField: IrField
|
initializedField: IrField
|
||||||
) {
|
) {
|
||||||
body = irFactory.createBlockBody(
|
body = irFactory.createBlockBody(
|
||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
buildBodyWithIfGuard(initializers, initialisedField)
|
buildBodyWithIfGuard(initializers, initializedField)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildBodyWithIfGuard(
|
private fun buildBodyWithIfGuard(
|
||||||
initializers: Map<IrField, IrExpression>,
|
initializers: Map<IrField, IrExpression>,
|
||||||
initialisedField: IrField
|
initializedField: IrField
|
||||||
): List<IrStatement> {
|
): List<IrStatement> {
|
||||||
val statements = initializers
|
val statements = initializers
|
||||||
.map { (field, expression) ->
|
.map { (field, expression) ->
|
||||||
@@ -156,13 +153,13 @@ class PropertyLazyInitLowering(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val upGuard = createIrSetField(
|
val upGuard = createIrSetField(
|
||||||
initialisedField,
|
initializedField,
|
||||||
JsIrBuilder.buildBoolean(context.irBuiltIns.booleanType, true)
|
JsIrBuilder.buildBoolean(context.irBuiltIns.booleanType, true)
|
||||||
)
|
)
|
||||||
|
|
||||||
return JsIrBuilder.buildIfElse(
|
return JsIrBuilder.buildIfElse(
|
||||||
type = irBuiltIns.unitType,
|
type = irBuiltIns.unitType,
|
||||||
cond = calculator.not(createIrGetField(initialisedField)),
|
cond = calculator.not(createIrGetField(initializedField)),
|
||||||
thenBranch = JsIrBuilder.buildComposite(
|
thenBranch = JsIrBuilder.buildComposite(
|
||||||
type = irBuiltIns.unitType,
|
type = irBuiltIns.unitType,
|
||||||
statements = mutableListOf(upGuard).apply { addAll(statements) }
|
statements = mutableListOf(upGuard).apply { addAll(statements) }
|
||||||
@@ -171,7 +168,7 @@ class PropertyLazyInitLowering(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrBody.addInitialisation(
|
private fun IrBody.addInitialization(
|
||||||
initCall: IrCall,
|
initCall: IrCall,
|
||||||
container: IrSimpleFunction
|
container: IrSimpleFunction
|
||||||
) {
|
) {
|
||||||
@@ -217,11 +214,11 @@ class RemoveInitializersForLazyProperties(
|
|||||||
private val context: JsIrBackendContext
|
private val context: JsIrBackendContext
|
||||||
) : DeclarationTransformer {
|
) : DeclarationTransformer {
|
||||||
|
|
||||||
val fileToPurenessInitializers
|
private val fileToInitializerPureness
|
||||||
get() = context.fileToPurenessInitializers
|
get() = context.fileToInitializerPureness
|
||||||
|
|
||||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||||
if (context.configuration[PROPERTY_LAZY_INITIALISATION] != true) {
|
if (!context.propertyLazyInitialization) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,9 +226,9 @@ class RemoveInitializersForLazyProperties(
|
|||||||
|
|
||||||
val file = declaration.parent as? IrFile ?: return null
|
val file = declaration.parent as? IrFile ?: return null
|
||||||
|
|
||||||
if (fileToPurenessInitializers[file] == true) return null
|
if (fileToInitializerPureness[file] == true) return null
|
||||||
|
|
||||||
val allFieldsInFilePure = fileToPurenessInitializers[file]
|
val allFieldsInFilePure = fileToInitializerPureness[file]
|
||||||
?: calculateFileFieldsPureness(file)
|
?: calculateFileFieldsPureness(file)
|
||||||
|
|
||||||
if (allFieldsInFilePure) {
|
if (allFieldsInFilePure) {
|
||||||
@@ -252,7 +249,7 @@ class RemoveInitializersForLazyProperties(
|
|||||||
.values
|
.values
|
||||||
|
|
||||||
val allFieldsInFilePure = allFieldsInFilePure(expressions)
|
val allFieldsInFilePure = allFieldsInFilePure(expressions)
|
||||||
fileToPurenessInitializers[file] = allFieldsInFilePure
|
fileToInitializerPureness[file] = allFieldsInFilePure
|
||||||
return allFieldsInFilePure
|
return allFieldsInFilePure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -18,8 +18,8 @@ where advanced options include:
|
|||||||
-Xir-produce-klib-dir Generate unpacked KLIB into parent directory of output JS file.
|
-Xir-produce-klib-dir Generate unpacked KLIB into parent directory of output JS file.
|
||||||
In combination with -meta-info generates both IR and pre-IR versions of library.
|
In combination with -meta-info generates both IR and pre-IR versions of library.
|
||||||
-Xir-produce-klib-file Generate packed klib into file specified by -output. Disables pre-IR backend
|
-Xir-produce-klib-file Generate packed klib into file specified by -output. Disables pre-IR backend
|
||||||
-Xir-property-lazy-initialisation
|
-Xir-property-lazy-initialization
|
||||||
Perform lazy initialisation for properties
|
Perform lazy initialization for properties
|
||||||
-Xmetadata-only Generate *.meta.js and *.kjsm files only
|
-Xmetadata-only Generate *.meta.js and *.kjsm files only
|
||||||
-Xtyped-arrays Translate primitive arrays to JS typed arrays
|
-Xtyped-arrays Translate primitive arrays to JS typed arrays
|
||||||
-Xwasm Use experimental WebAssembly compiler backend
|
-Xwasm Use experimental WebAssembly compiler backend
|
||||||
|
|||||||
-5
@@ -23144,11 +23144,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
-5
@@ -23149,11 +23149,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
-5
@@ -21373,11 +21373,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
@@ -89,7 +89,4 @@ public class JSConfigurationKeys {
|
|||||||
|
|
||||||
public static final CompilerConfigurationKey<ErrorTolerancePolicy> ERROR_TOLERANCE_POLICY =
|
public static final CompilerConfigurationKey<ErrorTolerancePolicy> ERROR_TOLERANCE_POLICY =
|
||||||
CompilerConfigurationKey.create("set up policy to ignore compilation errors");
|
CompilerConfigurationKey.create("set up policy to ignore compilation errors");
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<Boolean> PROPERTY_LAZY_INITIALISATION =
|
|
||||||
CompilerConfigurationKey.create("enable property lazy initialisation");
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ abstract class BasicBoxTest(
|
|||||||
val skipDceDriven = SKIP_DCE_DRIVEN.matcher(fileContent).find()
|
val skipDceDriven = SKIP_DCE_DRIVEN.matcher(fileContent).find()
|
||||||
val splitPerModule = SPLIT_PER_MODULE.matcher(fileContent).find()
|
val splitPerModule = SPLIT_PER_MODULE.matcher(fileContent).find()
|
||||||
|
|
||||||
val propertyLazyInitialization = PROPERTY_LAZY_INITIALISATION.matcher(fileContent).find()
|
val propertyLazyInitialization = PROPERTY_LAZY_INITIALIZATION.matcher(fileContent).find()
|
||||||
|
|
||||||
TestFileFactoryImpl(coroutinesPackage).use { testFactory ->
|
TestFileFactoryImpl(coroutinesPackage).use { testFactory ->
|
||||||
val inputFiles = TestFiles.createTestFiles(
|
val inputFiles = TestFiles.createTestFiles(
|
||||||
@@ -420,7 +420,7 @@ abstract class BasicBoxTest(
|
|||||||
skipDceDriven: Boolean,
|
skipDceDriven: Boolean,
|
||||||
splitPerModule: Boolean,
|
splitPerModule: Boolean,
|
||||||
errorIgnorancePolicy: ErrorTolerancePolicy,
|
errorIgnorancePolicy: ErrorTolerancePolicy,
|
||||||
propertyLazyInitialisation: Boolean,
|
propertyLazyInitialization: Boolean,
|
||||||
) {
|
) {
|
||||||
val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") }
|
val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") }
|
||||||
val testFiles = kotlinFiles.map { it.fileName }
|
val testFiles = kotlinFiles.map { it.fileName }
|
||||||
@@ -447,7 +447,6 @@ abstract class BasicBoxTest(
|
|||||||
incrementalData = null,
|
incrementalData = null,
|
||||||
expectActualLinker = expectActualLinker,
|
expectActualLinker = expectActualLinker,
|
||||||
errorIgnorancePolicy,
|
errorIgnorancePolicy,
|
||||||
propertyLazyInitialisation
|
|
||||||
)
|
)
|
||||||
val outputFile = File(outputFileName)
|
val outputFile = File(outputFileName)
|
||||||
val dceOutputFile = File(dceOutputFileName)
|
val dceOutputFile = File(dceOutputFileName)
|
||||||
@@ -455,8 +454,23 @@ abstract class BasicBoxTest(
|
|||||||
|
|
||||||
val incrementalData = IncrementalData()
|
val incrementalData = IncrementalData()
|
||||||
translateFiles(
|
translateFiles(
|
||||||
psiFiles.map(TranslationUnit::SourceFile), outputFile, dceOutputFile, pirOutputFile, config, outputPrefixFile, outputPostfixFile,
|
psiFiles.map(TranslationUnit::SourceFile),
|
||||||
mainCallParameters, incrementalData, remap, testPackage, testFunction, needsFullIrRuntime, isMainModule, skipDceDriven, splitPerModule
|
outputFile,
|
||||||
|
dceOutputFile,
|
||||||
|
pirOutputFile,
|
||||||
|
config,
|
||||||
|
outputPrefixFile,
|
||||||
|
outputPostfixFile,
|
||||||
|
mainCallParameters,
|
||||||
|
incrementalData,
|
||||||
|
remap,
|
||||||
|
testPackage,
|
||||||
|
testFunction,
|
||||||
|
needsFullIrRuntime,
|
||||||
|
isMainModule,
|
||||||
|
skipDceDriven,
|
||||||
|
splitPerModule,
|
||||||
|
propertyLazyInitialization,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
|
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
|
||||||
@@ -514,13 +528,27 @@ abstract class BasicBoxTest(
|
|||||||
incrementalData,
|
incrementalData,
|
||||||
expectActualLinker,
|
expectActualLinker,
|
||||||
ErrorTolerancePolicy.DEFAULT,
|
ErrorTolerancePolicy.DEFAULT,
|
||||||
propertyLazyInitialisation = false
|
|
||||||
)
|
)
|
||||||
val recompiledOutputFile = File(outputFile.parentFile, outputFile.nameWithoutExtension + "-recompiled.js")
|
val recompiledOutputFile = File(outputFile.parentFile, outputFile.nameWithoutExtension + "-recompiled.js")
|
||||||
|
|
||||||
translateFiles(
|
translateFiles(
|
||||||
translationUnits, recompiledOutputFile, recompiledOutputFile, recompiledOutputFile, recompiledConfig, outputPrefixFile, outputPostfixFile,
|
translationUnits,
|
||||||
mainCallParameters, incrementalData, remap, testPackage, testFunction, needsFullIrRuntime, false, true, false
|
recompiledOutputFile,
|
||||||
|
recompiledOutputFile,
|
||||||
|
recompiledOutputFile,
|
||||||
|
recompiledConfig,
|
||||||
|
outputPrefixFile,
|
||||||
|
outputPostfixFile,
|
||||||
|
mainCallParameters,
|
||||||
|
incrementalData,
|
||||||
|
remap,
|
||||||
|
testPackage,
|
||||||
|
testFunction,
|
||||||
|
needsFullIrRuntime,
|
||||||
|
isMainModule = false,
|
||||||
|
skipDceDriven = true,
|
||||||
|
splitPerModule = false,
|
||||||
|
propertyLazyInitialization = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
val originalOutput = FileUtil.loadFile(outputFile)
|
val originalOutput = FileUtil.loadFile(outputFile)
|
||||||
@@ -594,7 +622,8 @@ abstract class BasicBoxTest(
|
|||||||
needsFullIrRuntime: Boolean,
|
needsFullIrRuntime: Boolean,
|
||||||
isMainModule: Boolean,
|
isMainModule: Boolean,
|
||||||
skipDceDriven: Boolean,
|
skipDceDriven: Boolean,
|
||||||
splitPerModule: Boolean
|
splitPerModule: Boolean,
|
||||||
|
propertyLazyInitialization: Boolean,
|
||||||
) {
|
) {
|
||||||
val translator = K2JSTranslator(config, false)
|
val translator = K2JSTranslator(config, false)
|
||||||
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
|
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
|
||||||
@@ -740,7 +769,6 @@ abstract class BasicBoxTest(
|
|||||||
incrementalData: IncrementalData?,
|
incrementalData: IncrementalData?,
|
||||||
expectActualLinker: Boolean,
|
expectActualLinker: Boolean,
|
||||||
errorIgnorancePolicy: ErrorTolerancePolicy,
|
errorIgnorancePolicy: ErrorTolerancePolicy,
|
||||||
propertyLazyInitialisation: Boolean,
|
|
||||||
): JsConfig {
|
): JsConfig {
|
||||||
val configuration = environment.configuration.copy()
|
val configuration = environment.configuration.copy()
|
||||||
|
|
||||||
@@ -764,7 +792,6 @@ abstract class BasicBoxTest(
|
|||||||
configuration.put(JSConfigurationKeys.MODULE_KIND, module.moduleKind)
|
configuration.put(JSConfigurationKeys.MODULE_KIND, module.moduleKind)
|
||||||
configuration.put(JSConfigurationKeys.TARGET, EcmaVersion.v5)
|
configuration.put(JSConfigurationKeys.TARGET, EcmaVersion.v5)
|
||||||
configuration.put(JSConfigurationKeys.ERROR_TOLERANCE_POLICY, errorIgnorancePolicy)
|
configuration.put(JSConfigurationKeys.ERROR_TOLERANCE_POLICY, errorIgnorancePolicy)
|
||||||
configuration.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALISATION, propertyLazyInitialisation)
|
|
||||||
|
|
||||||
if (errorIgnorancePolicy.allowErrors) {
|
if (errorIgnorancePolicy.allowErrors) {
|
||||||
configuration.put(JSConfigurationKeys.DEVELOPER_MODE, true)
|
configuration.put(JSConfigurationKeys.DEVELOPER_MODE, true)
|
||||||
@@ -998,7 +1025,7 @@ abstract class BasicBoxTest(
|
|||||||
|
|
||||||
private val ERROR_POLICY_PATTERN = Pattern.compile("^// *ERROR_POLICY: *(.+)$", Pattern.MULTILINE)
|
private val ERROR_POLICY_PATTERN = Pattern.compile("^// *ERROR_POLICY: *(.+)$", Pattern.MULTILINE)
|
||||||
|
|
||||||
private val PROPERTY_LAZY_INITIALISATION = Pattern.compile("^// *PROPERTY_LAZY_INITIALISATION *$", Pattern.MULTILINE)
|
private val PROPERTY_LAZY_INITIALIZATION = Pattern.compile("^// *PROPERTY_LAZY_INITIALIZATION *$", Pattern.MULTILINE)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
protected val runTestInNashorn = getBoolean("kotlin.js.useNashorn")
|
protected val runTestInNashorn = getBoolean("kotlin.js.useNashorn")
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ abstract class BasicIrBoxTest(
|
|||||||
needsFullIrRuntime: Boolean,
|
needsFullIrRuntime: Boolean,
|
||||||
isMainModule: Boolean,
|
isMainModule: Boolean,
|
||||||
skipDceDriven: Boolean,
|
skipDceDriven: Boolean,
|
||||||
splitPerModule: Boolean
|
splitPerModule: Boolean,
|
||||||
|
propertyLazyInitialization: Boolean,
|
||||||
) {
|
) {
|
||||||
val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file }
|
val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file }
|
||||||
|
|
||||||
@@ -143,7 +144,8 @@ abstract class BasicIrBoxTest(
|
|||||||
generateFullJs = true,
|
generateFullJs = true,
|
||||||
generateDceJs = runIrDce,
|
generateDceJs = runIrDce,
|
||||||
es6mode = runEs6Mode,
|
es6mode = runEs6Mode,
|
||||||
multiModule = splitPerModule || perModule
|
multiModule = splitPerModule || perModule,
|
||||||
|
propertyLazyInitialization = propertyLazyInitialization,
|
||||||
)
|
)
|
||||||
|
|
||||||
compiledModule.jsCode!!.writeTo(outputFile, config)
|
compiledModule.jsCode!!.writeTo(outputFile, config)
|
||||||
@@ -169,7 +171,8 @@ abstract class BasicIrBoxTest(
|
|||||||
exportedDeclarations = setOf(FqName.fromSegments(listOfNotNull(testPackage, testFunction))),
|
exportedDeclarations = setOf(FqName.fromSegments(listOfNotNull(testPackage, testFunction))),
|
||||||
dceDriven = true,
|
dceDriven = true,
|
||||||
es6mode = runEs6Mode,
|
es6mode = runEs6Mode,
|
||||||
multiModule = splitPerModule || perModule
|
multiModule = splitPerModule || perModule,
|
||||||
|
propertyLazyInitialization = propertyLazyInitialization
|
||||||
).jsCode!!.writeTo(pirOutputFile, config)
|
).jsCode!!.writeTo(pirOutputFile, config)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+20
@@ -6786,6 +6786,26 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
|
|||||||
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
|
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")
|
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
|
||||||
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
||||||
|
|||||||
Generated
-10
@@ -17629,16 +17629,6 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("lazyInitializationPure.kt")
|
|
||||||
public void testLazyInitializationPure() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
+20
@@ -6786,6 +6786,26 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
|
|||||||
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
|
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")
|
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
|
||||||
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
||||||
|
|||||||
Generated
-10
@@ -17629,16 +17629,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("lazyInitializationPure.kt")
|
|
||||||
public void testLazyInitializationPure() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
+20
@@ -6816,6 +6816,26 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
|
|||||||
runTest("js/js.translator/testData/box/propertyAccess/initValInConstructor.kt");
|
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")
|
@TestMetadata("overloadedOverriddenFunctionPropertyName.kt")
|
||||||
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
public void testOverloadedOverriddenFunctionPropertyName() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
runTest("js/js.translator/testData/box/propertyAccess/overloadedOverriddenFunctionPropertyName.kt");
|
||||||
|
|||||||
-5
@@ -17734,11 +17734,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/properties/kt9603.kt");
|
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("primitiveOverrideDefaultAccessor.kt")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
// IGNORE_BACKEND: JS, NATIVE
|
// IGNORE_BACKEND: JS
|
||||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||||
// PROPERTY_LAZY_INITIALISATION
|
// PROPERTY_LAZY_INITIALIZATION
|
||||||
|
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
// 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}"
|
||||||
|
}
|
||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
// TARGET_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS
|
||||||
// PROPERTY_LAZY_INITIALISATION
|
// PROPERTY_LAZY_INITIALIZATION
|
||||||
|
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ val e = d
|
|||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
d
|
// Get only e to initialize all properties in file
|
||||||
e
|
e
|
||||||
return if (
|
return if (
|
||||||
js("a") === "A" &&
|
js("a") === "A" &&
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
// 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
|
||||||
Reference in New Issue
Block a user