[JS IR] Add compiler argument about lazy initialisation
^KT-43222 fixed
This commit is contained in:
+3
@@ -125,6 +125,9 @@ 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")
|
||||||
|
var irPropertyLazyInitialisation: 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)
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
|
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||||
|
import org.jetbrains.kotlin.config.Services
|
||||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
||||||
@@ -156,6 +159,11 @@ 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)
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ private val propertyLazyInitLoweringPhase = makeBodyLoweringPhase(
|
|||||||
private val removeInitializersForLazyProperties = makeDeclarationTransformerPhase(
|
private val removeInitializersForLazyProperties = makeDeclarationTransformerPhase(
|
||||||
::RemoveInitializersForLazyProperties,
|
::RemoveInitializersForLazyProperties,
|
||||||
name = "RemoveInitializersForLazyProperties",
|
name = "RemoveInitializersForLazyProperties",
|
||||||
description = "Make property init as lazy"
|
description = "Remove property initializers if they was initialised lazily"
|
||||||
)
|
)
|
||||||
|
|
||||||
private val propertyAccessorInlinerLoweringPhase = makeBodyLoweringPhase(
|
private val propertyAccessorInlinerLoweringPhase = makeBodyLoweringPhase(
|
||||||
|
|||||||
+9
@@ -20,6 +20,7 @@ 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
|
||||||
@@ -43,6 +44,10 @@ class PropertyLazyInitLowering(
|
|||||||
get() = context.fileToPurenessInitializers
|
get() = context.fileToPurenessInitializers
|
||||||
|
|
||||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||||
|
if (context.configuration[PROPERTY_LAZY_INITIALISATION] != true) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (container !is IrSimpleFunction && container !is IrField && container !is IrProperty)
|
if (container !is IrSimpleFunction && container !is IrField && container !is IrProperty)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -216,6 +221,10 @@ class RemoveInitializersForLazyProperties(
|
|||||||
get() = context.fileToPurenessInitializers
|
get() = context.fileToPurenessInitializers
|
||||||
|
|
||||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||||
|
if (context.configuration[PROPERTY_LAZY_INITIALISATION] != true) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
if (declaration !is IrField) return null
|
if (declaration !is IrField) return null
|
||||||
|
|
||||||
val file = declaration.parent as? IrFile ?: return null
|
val file = declaration.parent as? IrFile ?: return null
|
||||||
|
|||||||
@@ -89,4 +89,7 @@ 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");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user