[JS IR] Replace IrModuleToJsTransformer with IrModuleToJsTransformerTmp
This commit is contained in:
committed by
Space Team
parent
2ec07b861b
commit
d17794481d
@@ -82,15 +82,10 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
val mainCallArguments: List<String>?
|
val mainCallArguments: List<String>?
|
||||||
) {
|
) {
|
||||||
private fun lowerIr(): LoweredIr {
|
private fun lowerIr(): LoweredIr {
|
||||||
val irFactory = when {
|
|
||||||
arguments.irNewIr2Js -> IrFactoryImplForJsIC(WholeWorldStageController())
|
|
||||||
else -> IrFactoryImpl
|
|
||||||
}
|
|
||||||
|
|
||||||
return compile(
|
return compile(
|
||||||
module,
|
module,
|
||||||
phaseConfig,
|
phaseConfig,
|
||||||
irFactory,
|
IrFactoryImplForJsIC(WholeWorldStageController()),
|
||||||
keep = arguments.irKeep?.split(",")
|
keep = arguments.irKeep?.split(",")
|
||||||
?.filterNot { it.isEmpty() }
|
?.filterNot { it.isEmpty() }
|
||||||
?.toSet()
|
?.toSet()
|
||||||
@@ -106,7 +101,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
messageCollector
|
messageCollector
|
||||||
),
|
),
|
||||||
granularity = arguments.granularity,
|
granularity = arguments.granularity,
|
||||||
icCompatibleIr2Js = arguments.irNewIr2Js,
|
icCompatibleIr2Js = true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,22 +118,6 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
val out = generator.generateJsCode(relativeRequirePath = true, outJsProgram = false)
|
val out = generator.generateJsCode(relativeRequirePath = true, outJsProgram = false)
|
||||||
return TransformResult(out, dts)
|
return TransformResult(out, dts)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun compileAndTransformIrOld(): TransformResult {
|
|
||||||
val ir = lowerIr()
|
|
||||||
val transformer = IrModuleToJsTransformer(
|
|
||||||
ir.context,
|
|
||||||
mainCallArguments,
|
|
||||||
fullJs = !arguments.irDce,
|
|
||||||
dceJs = arguments.irDce,
|
|
||||||
multiModule = arguments.irPerModule,
|
|
||||||
relativeRequirePath = true,
|
|
||||||
moduleToName = ir.moduleFragmentToUniqueName
|
|
||||||
)
|
|
||||||
|
|
||||||
val result = transformer.generateModule(ir.allModules)
|
|
||||||
return TransformResult(result.outputs.values.single(), result.tsDefinitions ?: error("No ts definitions"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -427,12 +406,8 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
val start = System.currentTimeMillis()
|
val start = System.currentTimeMillis()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
val ir2JsTransformer = Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments)
|
||||||
val (outputs, tsDefinitions) = if (arguments.irNewIr2Js) {
|
val (outputs, tsDefinitions) = ir2JsTransformer.compileAndTransformIrNew()
|
||||||
Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments).compileAndTransformIrNew()
|
|
||||||
} else {
|
|
||||||
Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments).compileAndTransformIrOld()
|
|
||||||
}
|
|
||||||
|
|
||||||
messageCollector.report(INFO, "Executable production duration: ${System.currentTimeMillis() - start}ms")
|
messageCollector.report(INFO, "Executable production duration: ${System.currentTimeMillis() - start}ms")
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.backend.js.lower.collectNativeImplementations
|
|||||||
import org.jetbrains.kotlin.ir.backend.js.lower.generateJsTests
|
import org.jetbrains.kotlin.ir.backend.js.lower.generateJsTests
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.moveBodilessDeclarationsToSeparatePlace
|
import org.jetbrains.kotlin.ir.backend.js.lower.moveBodilessDeclarationsToSeparatePlace
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.NameTables
|
import org.jetbrains.kotlin.ir.backend.js.utils.NameTables
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
@@ -160,21 +159,6 @@ fun compileIr(
|
|||||||
return LoweredIr(context, moduleFragment, allModules, moduleToName)
|
return LoweredIr(context, moduleFragment, allModules, moduleToName)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateJsCode(
|
|
||||||
context: JsIrBackendContext,
|
|
||||||
moduleFragment: IrModuleFragment,
|
|
||||||
nameTables: NameTables
|
|
||||||
): String {
|
|
||||||
if (context.configuration.getBoolean(JSConfigurationKeys.GENERATE_POLYFILLS)) {
|
|
||||||
collectNativeImplementations(context, moduleFragment)
|
|
||||||
}
|
|
||||||
moveBodilessDeclarationsToSeparatePlace(context, moduleFragment)
|
|
||||||
jsPhases.invokeToplevel(PhaseConfig(jsPhases), context, listOf(moduleFragment))
|
|
||||||
|
|
||||||
val transformer = IrModuleToJsTransformer(context, null, true, nameTables)
|
|
||||||
return transformer.generateModule(listOf(moduleFragment)).outputs[TranslationMode.FULL]!!.jsCode
|
|
||||||
}
|
|
||||||
|
|
||||||
fun CompilationOutputs.writeSourceMapIfPresent(outputJsFile: File) {
|
fun CompilationOutputs.writeSourceMapIfPresent(outputJsFile: File) {
|
||||||
sourceMap?.let {
|
sourceMap?.let {
|
||||||
val mapFile = outputJsFile.resolveSibling("${outputJsFile.name}.map")
|
val mapFile = outputJsFile.resolveSibling("${outputJsFile.name}.map")
|
||||||
|
|||||||
-5
@@ -245,11 +245,6 @@ object JsEnvironmentConfigurationDirectives : SimpleDirectivesContainer() {
|
|||||||
applicability = DirectiveApplicability.Global
|
applicability = DirectiveApplicability.Global
|
||||||
)
|
)
|
||||||
|
|
||||||
val RUN_NEW_IR_2_JS by directive(
|
|
||||||
description = "",
|
|
||||||
applicability = DirectiveApplicability.Global
|
|
||||||
)
|
|
||||||
|
|
||||||
val NO_COMMON_FILES by directive(
|
val NO_COMMON_FILES by directive(
|
||||||
"""
|
"""
|
||||||
Don't added helper files to prevent linking issues.
|
Don't added helper files to prevent linking issues.
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ import org.jetbrains.kotlin.ir.backend.js.*
|
|||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
||||||
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.backend.js.transformers.irToJs.TranslationMode
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||||
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
||||||
@@ -608,9 +609,9 @@ class GenerateIrRuntime {
|
|||||||
|
|
||||||
jsPhases.invokeToplevel(phaseConfig, context, listOf(module))
|
jsPhases.invokeToplevel(phaseConfig, context, listOf(module))
|
||||||
|
|
||||||
val transformer = IrModuleToJsTransformer(context, null)
|
val transformer = IrModuleToJsTransformerTmp(context, null)
|
||||||
|
|
||||||
return transformer.generateModule(listOf(module))
|
return transformer.generateModule(listOf(module), setOf(TranslationMode.PER_MODULE), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun compile(files: List<KtFile>): String {
|
fun compile(files: List<KtFile>): String {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.js.test.converters
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
|
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkNoUnboundSymbols
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||||
import org.jetbrains.kotlin.cli.common.isWindows
|
import org.jetbrains.kotlin.cli.common.isWindows
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
@@ -16,7 +15,6 @@ import org.jetbrains.kotlin.ir.backend.js.*
|
|||||||
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.ic.JsExecutableProducer
|
import org.jetbrains.kotlin.ir.backend.js.ic.JsExecutableProducer
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
||||||
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.backend.js.transformers.irToJs.IrModuleToJsTransformerTmp
|
||||||
import org.jetbrains.kotlin.ir.backend.js.SourceMapsInfo
|
import org.jetbrains.kotlin.ir.backend.js.SourceMapsInfo
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode
|
||||||
@@ -24,7 +22,6 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
|||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.irMessageLogger
|
import org.jetbrains.kotlin.ir.util.irMessageLogger
|
||||||
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.js.test.handlers.JsBoxRunner.Companion.TEST_FUNCTION
|
import org.jetbrains.kotlin.js.test.handlers.JsBoxRunner.Companion.TEST_FUNCTION
|
||||||
import org.jetbrains.kotlin.js.test.utils.extractTestPackage
|
import org.jetbrains.kotlin.js.test.utils.extractTestPackage
|
||||||
@@ -77,7 +74,6 @@ class JsIrBackendFacade(
|
|||||||
val splitPerModule = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives
|
val splitPerModule = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives
|
||||||
val splitPerFile = JsEnvironmentConfigurationDirectives.SPLIT_PER_FILE in module.directives
|
val splitPerFile = JsEnvironmentConfigurationDirectives.SPLIT_PER_FILE in module.directives
|
||||||
val perModule = JsEnvironmentConfigurationDirectives.PER_MODULE in module.directives
|
val perModule = JsEnvironmentConfigurationDirectives.PER_MODULE in module.directives
|
||||||
val runNewIr2Js = JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS in module.directives
|
|
||||||
val keep = module.directives[JsEnvironmentConfigurationDirectives.KEEP].toSet()
|
val keep = module.directives[JsEnvironmentConfigurationDirectives.KEEP].toSet()
|
||||||
|
|
||||||
val granularity = when {
|
val granularity = when {
|
||||||
@@ -151,7 +147,7 @@ class JsIrBackendFacade(
|
|||||||
safeExternalBoolean = JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN in module.directives,
|
safeExternalBoolean = JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN in module.directives,
|
||||||
safeExternalBooleanDiagnostic = module.directives[JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC].singleOrNull(),
|
safeExternalBooleanDiagnostic = module.directives[JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC].singleOrNull(),
|
||||||
granularity = granularity,
|
granularity = granularity,
|
||||||
icCompatibleIr2Js = runNewIr2Js,
|
icCompatibleIr2Js = true,
|
||||||
)
|
)
|
||||||
|
|
||||||
return loweredIr2JsArtifact(module, loweredIr, granularity)
|
return loweredIr2JsArtifact(module, loweredIr, granularity)
|
||||||
@@ -166,43 +162,29 @@ 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 onlyIrDce = JsEnvironmentConfigurationDirectives.ONLY_IR_DCE in module.directives
|
val onlyIrDce = JsEnvironmentConfigurationDirectives.ONLY_IR_DCE in module.directives
|
||||||
val runNewIr2Js = JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS in module.directives
|
|
||||||
val perModuleOnly = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives
|
val perModuleOnly = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives
|
||||||
val isEsModules = JsEnvironmentConfigurationDirectives.ES_MODULES in module.directives ||
|
val isEsModules = JsEnvironmentConfigurationDirectives.ES_MODULES in module.directives ||
|
||||||
module.directives[JsEnvironmentConfigurationDirectives.MODULE_KIND].contains(ModuleKind.ES)
|
module.directives[JsEnvironmentConfigurationDirectives.MODULE_KIND].contains(ModuleKind.ES)
|
||||||
|
|
||||||
val outputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name, TranslationMode.FULL) + module.kind.extension)
|
val outputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name, TranslationMode.FULL) + module.kind.extension)
|
||||||
|
|
||||||
if (runNewIr2Js) {
|
val transformer = IrModuleToJsTransformerTmp(
|
||||||
val transformer = IrModuleToJsTransformerTmp(
|
loweredIr.context,
|
||||||
loweredIr.context,
|
mainArguments,
|
||||||
mainArguments,
|
moduleToName = JsIrModuleToPath(
|
||||||
moduleToName = JsIrModuleToPath(
|
testServices,
|
||||||
testServices,
|
isEsModules && granularity != JsGenerationGranularity.WHOLE_PROGRAM
|
||||||
isEsModules && granularity != JsGenerationGranularity.WHOLE_PROGRAM
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
// If runIrDce then include DCE results
|
)
|
||||||
// If perModuleOnly then skip whole program
|
// If runIrDce then include DCE results
|
||||||
// (it.dce => runIrDce) && (perModuleOnly => it.perModule)
|
// If perModuleOnly then skip whole program
|
||||||
val translationModes = TranslationMode.values()
|
// (it.dce => runIrDce) && (perModuleOnly => it.perModule)
|
||||||
.filter { (it.dce || !onlyIrDce) && (!it.dce || runIrDce) && (!perModuleOnly || it.perModule) }
|
val translationModes = TranslationMode.values()
|
||||||
.filter { it.dce == it.minimizedMemberNames }
|
.filter { (it.dce || !onlyIrDce) && (!it.dce || runIrDce) && (!perModuleOnly || it.perModule) }
|
||||||
.toSet()
|
.filter { it.dce == it.minimizedMemberNames }
|
||||||
val compilationOut = transformer.generateModule(loweredIr.allModules, translationModes, false)
|
.toSet()
|
||||||
return BinaryArtifacts.Js.JsIrArtifact(outputFile, compilationOut).dump(module)
|
val compilationOut = transformer.generateModule(loweredIr.allModules, translationModes, false)
|
||||||
} else {
|
return BinaryArtifacts.Js.JsIrArtifact(outputFile, compilationOut).dump(module)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrModuleFragment.resolveTestPathes() {
|
private fun IrModuleFragment.resolveTestPathes() {
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ 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", true)) +JsEnvironmentConfigurationDirectives.PER_MODULE
|
if (getBoolean("kotlin.js.ir.perModule", true)) +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", true)) +JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS
|
|
||||||
-JsEnvironmentConfigurationDirectives.GENERATE_NODE_JS_RUNNER
|
-JsEnvironmentConfigurationDirectives.GENERATE_NODE_JS_RUNNER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user