[JS BE] add es6LoweringPhase
This commit is contained in:
@@ -709,6 +709,86 @@ val loweringList = listOf<Lowering>(
|
||||
validateIrAfterLowering
|
||||
)
|
||||
|
||||
val es6LoweringList = listOf<Lowering>(
|
||||
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<JsIrBackendContext, IrModuleFragment, IrModuleFragment>, lowering ->
|
||||
acc.then(lowering.modulePhase)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
val jsEs6Phases = namedIrModulePhase(
|
||||
name = "ES6IrModuleLowering",
|
||||
description = "ES6 IR module lowering",
|
||||
lower = es6LoweringList.drop(1).fold(es6LoweringList[0].modulePhase) { acc: CompilerPhase<JsIrBackendContext, IrModuleFragment, IrModuleFragment>, lowering ->
|
||||
acc.then(lowering.modulePhase)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user