[JS IR] support new Ir2Js in tests and in K2JsTranslator

This commit is contained in:
Anton Bannykh
2021-10-29 11:26:49 +03:00
committed by TeamCityServer
parent 3c859138d1
commit d565cc4262
6 changed files with 58 additions and 19 deletions
@@ -176,6 +176,9 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
@Argument(value = "-Xir-per-file", description = "Splits generated .js per-file") @Argument(value = "-Xir-per-file", description = "Splits generated .js per-file")
var irPerFile: Boolean by FreezableVar(false) var irPerFile: Boolean by FreezableVar(false)
@Argument(value = "-Xir-new-ir2js", description = "New fragment-based ir2js")
var irNewIr2Js: Boolean by FreezableVar(false)
@Argument( @Argument(
value = "-Xinclude", value = "-Xinclude",
valueDescription = "<path>", valueDescription = "<path>",
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.ir.backend.js.ic.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformerTmp
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.* import org.jetbrains.kotlin.js.config.*
@@ -381,16 +382,29 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
granularity = granularity granularity = granularity
) )
val transformer = IrModuleToJsTransformer( val compiledModule: CompilerResult = if (arguments.irNewIr2Js) {
ir.context, val transformer = IrModuleToJsTransformerTmp(
mainCallArguments, ir.context,
fullJs = true, mainCallArguments,
dceJs = arguments.irDce, fullJs = true,
multiModule = arguments.irPerModule, dceJs = arguments.irDce,
relativeRequirePath = false, multiModule = arguments.irPerModule,
generateGlobalThisPolyfill = configuration.languageVersionSettings.supportsFeature(LanguageFeature.JsAllowInvalidCharsIdentifiersEscaping) relativeRequirePath = false,
) )
val compiledModule: CompilerResult = transformer.generateModule(ir.allModules)
transformer.generateModule(ir.allModules)
} else {
val transformer = IrModuleToJsTransformer(
ir.context,
mainCallArguments,
fullJs = true,
dceJs = arguments.irDce,
multiModule = arguments.irPerModule,
relativeRequirePath = false
)
transformer.generateModule(ir.allModules)
}
messageCollector.report(INFO, "Executable production duration: ${System.currentTimeMillis() - start}ms") messageCollector.report(INFO, "Executable production duration: ${System.currentTimeMillis() - start}ms")
+1
View File
@@ -19,6 +19,7 @@ where advanced options include:
-Xir-dce-runtime-diagnostic={log|exception} -Xir-dce-runtime-diagnostic={log|exception}
Enable runtime diagnostics when performing DCE instead of removing declarations Enable runtime diagnostics when performing DCE instead of removing declarations
-Xir-module-name=<name> Specify a compilation module name for IR backend -Xir-module-name=<name> Specify a compilation module name for IR backend
-Xir-new-ir2js New fragment-based ir2js
-Xir-only Disables pre-IR backend -Xir-only Disables pre-IR backend
-Xir-per-file Splits generated .js per-file -Xir-per-file Splits generated .js per-file
-Xir-per-module Splits generated .js per-module -Xir-per-module Splits generated .js per-module
@@ -234,4 +234,9 @@ object JsEnvironmentConfigurationDirectives : SimpleDirectivesContainer() {
description = "", description = "",
applicability = DirectiveApplicability.Global applicability = DirectiveApplicability.Global
) )
val RUN_NEW_IR_2_JS by directive(
description = "",
applicability = DirectiveApplicability.Global
)
} }
@@ -133,19 +133,34 @@ class JsIrBackendFacade(
.run { if (shouldBeGenerated()) arguments() else null } .run { if (shouldBeGenerated()) arguments() else null }
val runIrDce = JsEnvironmentConfigurationDirectives.RUN_IR_DCE in module.directives val runIrDce = JsEnvironmentConfigurationDirectives.RUN_IR_DCE in module.directives
val esModules = JsEnvironmentConfigurationDirectives.ES_MODULES in module.directives val esModules = JsEnvironmentConfigurationDirectives.ES_MODULES in module.directives
val runNewIr2Js = JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS in module.directives
val outputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name) + ".js") val outputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name) + ".js")
val dceOutputFile = File(JsEnvironmentConfigurator.getDceJsArtifactPath(testServices, module.name) + ".js") val dceOutputFile = File(JsEnvironmentConfigurator.getDceJsArtifactPath(testServices, module.name) + ".js")
if (!esModules) { if (!esModules) {
val transformer = IrModuleToJsTransformerTmp( if (runNewIr2Js) {
loweredIr.context, val transformer = IrModuleToJsTransformerTmp(
mainArguments, loweredIr.context,
fullJs = true, mainArguments,
dceJs = runIrDce, fullJs = true,
multiModule = granularity == JsGenerationGranularity.PER_MODULE, dceJs = runIrDce,
relativeRequirePath = false multiModule = granularity == JsGenerationGranularity.PER_MODULE,
) relativeRequirePath = false
return BinaryArtifacts.Js.JsIrArtifact(outputFile, transformer.generateModule(loweredIr.allModules)).dump(module) )
return BinaryArtifacts.Js.JsIrArtifact(outputFile, transformer.generateModule(loweredIr.allModules)).dump(module)
} else {
val transformer = IrModuleToJsTransformer(
loweredIr.context,
mainArguments,
fullJs = true,
dceJs = runIrDce,
multiModule = granularity == JsGenerationGranularity.PER_MODULE,
relativeRequirePath = false
)
return BinaryArtifacts.Js.JsIrArtifact(outputFile, transformer.generateModule(loweredIr.allModules)).dump(module)
}
} }
val options = JsGenerationOptions(generatePackageJson = true, generateTypeScriptDefinitions = generateDts) val options = JsGenerationOptions(generatePackageJson = true, generateTypeScriptDefinitions = generateDts)
@@ -57,6 +57,7 @@ abstract class AbstractJsIrTest(
if (getBoolean("kotlin.js.ir.klibMainModule")) +JsEnvironmentConfigurationDirectives.KLIB_MAIN_MODULE if (getBoolean("kotlin.js.ir.klibMainModule")) +JsEnvironmentConfigurationDirectives.KLIB_MAIN_MODULE
if (getBoolean("kotlin.js.ir.perModule")) +JsEnvironmentConfigurationDirectives.PER_MODULE if (getBoolean("kotlin.js.ir.perModule")) +JsEnvironmentConfigurationDirectives.PER_MODULE
if (getBoolean("kotlin.js.ir.dce", true)) +JsEnvironmentConfigurationDirectives.RUN_IR_DCE if (getBoolean("kotlin.js.ir.dce", true)) +JsEnvironmentConfigurationDirectives.RUN_IR_DCE
if (getBoolean("kotlin.js.ir.newIr2Js", false)) +JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS
} }
configureJsArtifactsHandlersStep { configureJsArtifactsHandlersStep {