fix(use strict): move global this polyfill after "use strict" pragma.

This commit is contained in:
Artem Kobzar
2021-11-12 15:59:27 +00:00
committed by Space
parent 3aafb76077
commit 7aa8de55a5
2 changed files with 5 additions and 8 deletions
@@ -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<K2JSCompilerArguments>() {
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)
@@ -43,6 +43,7 @@ class IrModuleToJsTransformer(
private val relativeRequirePath: Boolean = false,
private val moduleToName: Map<IrModuleFragment, String> = 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<String>(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<IrModuleFragment>, staticContext: JsStaticContext): List<JsStatement> {
val statements = mutableListOf<JsStatement>().also {
if (!generateScriptModule) it += JsStringLiteral("use strict").makeStmt()
if (generateGlobalThisPolyfill) it += jsGlobalThisPolyfill()
}
val preDeclarationBlock = JsGlobalBlock()