diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index db5e8c35556..a92ff8abceb 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -28,10 +28,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageUtil import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser -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.config.* import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider @@ -390,7 +387,8 @@ class K2JsIrCompiler : CLICompiler() { fullJs = true, dceJs = arguments.irDce, multiModule = arguments.irPerModule, - relativeRequirePath = false + relativeRequirePath = false, + generateGlobalThisPolyfill = configuration.languageVersionSettings.supportsFeature(LanguageFeature.JsAllowInvalidCharsIdentifiersEscaping) ) val compiledModule: CompilerResult = transformer.generateModule(ir.allModules) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index 52729080ee3..45e79292bb8 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -43,6 +43,7 @@ class IrModuleToJsTransformer( private val relativeRequirePath: Boolean = false, private val moduleToName: Map = emptyMap(), private val removeUnusedAssociatedObjects: Boolean = true, + private val generateGlobalThisPolyfill: Boolean = false ) { private val generateRegionComments = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_REGION_COMMENTS) @@ -153,7 +154,6 @@ class IrModuleToJsTransformer( val moduleBody = generateModuleBody(modules, staticContext) val internalModuleName = JsName("_", false) - val globalThisDeclaration = jsGlobalThisPolyfill(); val globalNames = NameTable(namer.globalNames) val exportStatements = ExportModelToJsStatements(nameGenerator) { globalNames.declareFreshName(it, it) } .generateModuleExport(exportedModule, internalModuleName) @@ -164,7 +164,6 @@ class IrModuleToJsTransformer( val program = JsProgram() if (generateScriptModule) { with(program.globalBlock) { - statements += globalThisDeclaration statements.addWithComment("block: imports", importStatements + crossModuleImports) statements += moduleBody statements.addWithComment("block: exports", exportStatements + crossModuleExports) @@ -174,7 +173,6 @@ class IrModuleToJsTransformer( parameters += JsParameter(internalModuleName) parameters += (importedJsModules + importedKotlinModules).map { JsParameter(it.internalName) } with(body) { - statements += globalThisDeclaration statements.addWithComment("block: imports", importStatements + crossModuleImports) statements += moduleBody statements.addWithComment("block: exports", exportStatements + crossModuleExports) @@ -288,6 +286,7 @@ class IrModuleToJsTransformer( private fun generateModuleBody(modules: Iterable, staticContext: JsStaticContext): List { val statements = mutableListOf().also { if (!generateScriptModule) it += JsStringLiteral("use strict").makeStmt() + if (generateGlobalThisPolyfill) it += jsGlobalThisPolyfill() } val preDeclarationBlock = JsGlobalBlock()