diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt index b2794736a76..7a5f04e2c56 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt @@ -709,6 +709,86 @@ val loweringList = listOf( validateIrAfterLowering ) +val es6LoweringList = listOf( + scriptRemoveReceiverLowering, + validateIrBeforeLowering, + testGenerationPhase, + expectDeclarationsRemovingPhase, + stripTypeAliasDeclarationsPhase, + arrayConstructorPhase, + lateinitNullableFieldsPhase, + lateinitDeclarationLoweringPhase, + lateinitUsageLoweringPhase, + sharedVariablesLoweringPhase, + localClassesInInlineLambdasPhase, + localClassesInInlineFunctionsPhase, + localClassesExtractionFromInlineFunctionsPhase, + functionInliningPhase, + copyInlineFunctionBodyLoweringPhase, + createScriptFunctionsPhase, + callableReferenceLowering, + singleAbstractMethodPhase, + tailrecLoweringPhase, + enumClassConstructorLoweringPhase, + enumClassConstructorBodyLoweringPhase, + localDelegatedPropertiesLoweringPhase, + localDeclarationsLoweringPhase, + localClassExtractionPhase, + innerClassesLoweringPhase, + innerClassesMemberBodyLoweringPhase, + innerClassConstructorCallsLoweringPhase, + propertiesLoweringPhase, + primaryConstructorLoweringPhase, + delegateToPrimaryConstructorLoweringPhase, + annotationConstructorLowering, + initializersLoweringPhase, + initializersCleanupLoweringPhase, + kotlinNothingValueExceptionPhase, + // Common prefix ends + enumEntryInstancesLoweringPhase, + enumEntryInstancesBodyLoweringPhase, + enumClassCreateInitializerLoweringPhase, + enumEntryCreateGetInstancesFunsLoweringPhase, + enumSyntheticFunsLoweringPhase, + enumUsageLoweringPhase, + enumEntryRemovalLoweringPhase, + suspendFunctionsLoweringPhase, + propertyReferenceLoweringPhase, + interopCallableReferenceLoweringPhase, + returnableBlockLoweringPhase, + forLoopsLoweringPhase, + primitiveCompanionLoweringPhase, + propertyAccessorInlinerLoweringPhase, + foldConstantLoweringPhase, + privateMembersLoweringPhase, + privateMemberUsagesLoweringPhase, + defaultArgumentStubGeneratorPhase, + defaultArgumentPatchOverridesPhase, + defaultParameterInjectorPhase, + defaultParameterCleanerPhase, + jsDefaultCallbackGeneratorPhase, + removeInlineFunctionsWithReifiedTypeParametersLoweringPhase, + throwableSuccessorsLoweringPhase, + es6AddInternalParametersToConstructorPhase, + es6ConstructorLowering, + varargLoweringPhase, + multipleCatchesLoweringPhase, + bridgesConstructionPhase, + typeOperatorLoweringPhase, + secondaryFactoryInjectorLoweringPhase, + classReferenceLoweringPhase, + inlineClassDeclarationLoweringPhase, + inlineClassUsageLoweringPhase, + autoboxingTransformerPhase, + blockDecomposerLoweringPhase, + constLoweringPhase, + objectDeclarationLoweringPhase, + objectUsageLoweringPhase, + callsLoweringPhase, + cleanupLoweringPhase, + validateIrAfterLowering +) + // TODO comment? Eliminate MouduleLowering's? Don't filter them here? val pirLowerings = loweringList.filter { it is DeclarationLowering || it is BodyLowering } + staticMembersLoweringPhase @@ -719,4 +799,12 @@ val jsPhases = namedIrModulePhase( lower = loweringList.drop(1).fold(loweringList[0].modulePhase) { acc: CompilerPhase, lowering -> acc.then(lowering.modulePhase) } -) \ No newline at end of file +) + +val jsEs6Phases = namedIrModulePhase( + name = "ES6IrModuleLowering", + description = "ES6 IR module lowering", + lower = es6LoweringList.drop(1).fold(es6LoweringList[0].modulePhase) { acc: CompilerPhase, lowering -> + acc.then(lowering.modulePhase) + } +) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index 51267fd08a0..a557184f5cc 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -98,7 +98,8 @@ fun compile( val transformer = IrModuleToJsTransformer(context, mainFunction, mainArguments) return transformer.generateModule(moduleFragment, fullJs = true, dceJs = false) } else { - jsPhases.invokeToplevel(phaseConfig, context, moduleFragment) + val phases = if (es6mode) jsEs6Phases else jsPhases + phases.invokeToplevel(phaseConfig, context, moduleFragment) val transformer = IrModuleToJsTransformer(context, mainFunction, mainArguments) return transformer.generateModule(moduleFragment, generateFullJs, generateDceJs) }