Move jvm specific phases to JvmLower
This commit is contained in:
committed by
Georgy Bronnikov
parent
049269ba4f
commit
076f5e2ef9
+12
-10
@@ -5,10 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common.lower
|
package org.jetbrains.kotlin.backend.common.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.*
|
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.*
|
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.ir.*
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
import org.jetbrains.kotlin.backend.common.FunctionLoweringPass
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedName
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.passTypeArgumentsFrom
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
@@ -30,12 +38,6 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
|||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
val jvmDefaultArgumentStubPhase = makeIrFilePhase<CommonBackendContext>(
|
|
||||||
{ context -> DefaultArgumentStubGenerator(context, false) },
|
|
||||||
name = "DefaultArgumentsStubGenerator",
|
|
||||||
description = "Generate synthetic stubs for functions with default parameter values"
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO: fix expect/actual default parameters
|
// TODO: fix expect/actual default parameters
|
||||||
|
|
||||||
open class DefaultArgumentStubGenerator(
|
open class DefaultArgumentStubGenerator(
|
||||||
|
|||||||
-7
@@ -30,13 +30,6 @@ import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
|
|
||||||
// This pass has to run after LocalDeclarationsLowering, since we don't handle nested functions.
|
|
||||||
val innerClassesPhase = makeIrFilePhase(
|
|
||||||
::InnerClassesLowering,
|
|
||||||
name = "InnerClasses",
|
|
||||||
description = "Add 'outer this' fields to inner classes"
|
|
||||||
)
|
|
||||||
|
|
||||||
class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
|
class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
|
||||||
private val IrValueSymbol.classForImplicitThis: IrClass?
|
private val IrValueSymbol.classForImplicitThis: IrClass?
|
||||||
// TODO: is this the correct way to get the class?
|
// TODO: is this the correct way to get the class?
|
||||||
|
|||||||
-7
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.common.lower
|
|||||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
@@ -35,12 +34,6 @@ import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
|
|
||||||
val jvmLateinitPhase = makeIrFilePhase(
|
|
||||||
::LateinitLowering,
|
|
||||||
name = "Lateinit",
|
|
||||||
description = "Insert checks for lateinit field references"
|
|
||||||
)
|
|
||||||
|
|
||||||
class LateinitLowering(val context: CommonBackendContext) : FileLoweringPass {
|
class LateinitLowering(val context: CommonBackendContext) : FileLoweringPass {
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
irFile.transformChildrenVoid(object : IrElementTransformerVoid() {
|
irFile.transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||||
|
|||||||
+7
-17
@@ -6,13 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.backend.common.lower
|
package org.jetbrains.kotlin.backend.common.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.BackendContext
|
import org.jetbrains.kotlin.backend.common.BackendContext
|
||||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
|
||||||
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
|
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.*
|
import org.jetbrains.kotlin.backend.common.descriptors.*
|
||||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||||
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -30,23 +30,13 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
|
import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
|
||||||
import org.jetbrains.kotlin.ir.visitors.*
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NameUtils
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
val jvmLocalDeclarationsPhase = makeIrFilePhase<CommonBackendContext>(
|
|
||||||
{ context ->
|
|
||||||
LocalDeclarationsLowering(context, object : LocalNameProvider {
|
|
||||||
override fun localName(declaration: IrDeclarationWithName): String =
|
|
||||||
NameUtils.sanitizeAsJavaIdentifier(super.localName(declaration))
|
|
||||||
}, Visibilities.PUBLIC)
|
|
||||||
},
|
|
||||||
name = "JvmLocalDeclarations",
|
|
||||||
description = "Move local declarations to classes",
|
|
||||||
prerequisite = setOf(sharedVariablesPhase)
|
|
||||||
)
|
|
||||||
|
|
||||||
interface LocalNameProvider {
|
interface LocalNameProvider {
|
||||||
fun localName(declaration: IrDeclarationWithName): String =
|
fun localName(declaration: IrDeclarationWithName): String =
|
||||||
declaration.name.asString()
|
declaration.name.asString()
|
||||||
|
|||||||
@@ -21,10 +21,13 @@ import org.jetbrains.kotlin.backend.common.lower.*
|
|||||||
import org.jetbrains.kotlin.backend.common.lower.loops.forLoopsPhase
|
import org.jetbrains.kotlin.backend.common.lower.loops.forLoopsPhase
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.*
|
import org.jetbrains.kotlin.backend.common.phaser.*
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.*
|
import org.jetbrains.kotlin.backend.jvm.lower.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.util.PatchDeclarationParentsVisitor
|
import org.jetbrains.kotlin.ir.util.PatchDeclarationParentsVisitor
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
|
import org.jetbrains.kotlin.name.NameUtils
|
||||||
|
|
||||||
private fun makePatchParentsPhase(number: Int) = namedIrFilePhase(
|
private fun makePatchParentsPhase(number: Int) = namedIrFilePhase(
|
||||||
lower = object : SameTypeCompilerPhase<CommonBackendContext, IrFile> {
|
lower = object : SameTypeCompilerPhase<CommonBackendContext, IrFile> {
|
||||||
@@ -50,6 +53,12 @@ private val expectDeclarationsRemovingPhase = makeIrFilePhase(
|
|||||||
description = "Remove expect declaration from module fragment"
|
description = "Remove expect declaration from module fragment"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val lateinitPhase = makeIrFilePhase(
|
||||||
|
::LateinitLowering,
|
||||||
|
name = "Lateinit",
|
||||||
|
description = "Insert checks for lateinit field references"
|
||||||
|
)
|
||||||
|
|
||||||
private val propertiesPhase = makeIrFilePhase<CommonBackendContext>(
|
private val propertiesPhase = makeIrFilePhase<CommonBackendContext>(
|
||||||
{ context ->
|
{ context ->
|
||||||
PropertiesLowering(context, JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS) { propertyName ->
|
PropertiesLowering(context, JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS) { propertyName ->
|
||||||
@@ -61,6 +70,31 @@ private val propertiesPhase = makeIrFilePhase<CommonBackendContext>(
|
|||||||
stickyPostconditions = setOf((PropertiesLowering)::checkNoProperties)
|
stickyPostconditions = setOf((PropertiesLowering)::checkNoProperties)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val defaultArgumentStubPhase = makeIrFilePhase<CommonBackendContext>(
|
||||||
|
{ context -> DefaultArgumentStubGenerator(context, false) },
|
||||||
|
name = "DefaultArgumentsStubGenerator",
|
||||||
|
description = "Generate synthetic stubs for functions with default parameter values"
|
||||||
|
)
|
||||||
|
|
||||||
|
private val localDeclarationsPhase = makeIrFilePhase<CommonBackendContext>(
|
||||||
|
{ context ->
|
||||||
|
LocalDeclarationsLowering(context, object : LocalNameProvider {
|
||||||
|
override fun localName(declaration: IrDeclarationWithName): String =
|
||||||
|
NameUtils.sanitizeAsJavaIdentifier(super.localName(declaration))
|
||||||
|
}, Visibilities.PUBLIC)
|
||||||
|
},
|
||||||
|
name = "JvmLocalDeclarations",
|
||||||
|
description = "Move local declarations to classes",
|
||||||
|
prerequisite = setOf(sharedVariablesPhase)
|
||||||
|
)
|
||||||
|
|
||||||
|
private val innerClassesPhase = makeIrFilePhase(
|
||||||
|
::InnerClassesLowering,
|
||||||
|
name = "InnerClasses",
|
||||||
|
description = "Add 'outer this' fields to inner classes",
|
||||||
|
prerequisite = setOf(localDeclarationsPhase)
|
||||||
|
)
|
||||||
|
|
||||||
val jvmPhases = namedIrFilePhase<JvmBackendContext>(
|
val jvmPhases = namedIrFilePhase<JvmBackendContext>(
|
||||||
name = "IrLowering",
|
name = "IrLowering",
|
||||||
description = "IR lowering",
|
description = "IR lowering",
|
||||||
@@ -69,7 +103,7 @@ val jvmPhases = namedIrFilePhase<JvmBackendContext>(
|
|||||||
kCallableNamePropertyPhase then
|
kCallableNamePropertyPhase then
|
||||||
arrayConstructorPhase then
|
arrayConstructorPhase then
|
||||||
|
|
||||||
jvmLateinitPhase then
|
lateinitPhase then
|
||||||
|
|
||||||
moveCompanionObjectFieldsPhase then
|
moveCompanionObjectFieldsPhase then
|
||||||
propertyReferencePhase then
|
propertyReferencePhase then
|
||||||
@@ -79,7 +113,7 @@ val jvmPhases = namedIrFilePhase<JvmBackendContext>(
|
|||||||
renameFieldsPhase then
|
renameFieldsPhase then
|
||||||
annotationPhase then
|
annotationPhase then
|
||||||
|
|
||||||
jvmDefaultArgumentStubPhase then
|
defaultArgumentStubPhase then
|
||||||
|
|
||||||
interfacePhase then
|
interfacePhase then
|
||||||
interfaceDelegationPhase then
|
interfaceDelegationPhase then
|
||||||
@@ -90,7 +124,7 @@ val jvmPhases = namedIrFilePhase<JvmBackendContext>(
|
|||||||
|
|
||||||
enumWhenPhase then
|
enumWhenPhase then
|
||||||
singletonReferencesPhase then
|
singletonReferencesPhase then
|
||||||
jvmLocalDeclarationsPhase then
|
localDeclarationsPhase then
|
||||||
singleAbstractMethodPhase then
|
singleAbstractMethodPhase then
|
||||||
callableReferencePhase then
|
callableReferencePhase then
|
||||||
functionNVarargInvokePhase then
|
functionNVarargInvokePhase then
|
||||||
|
|||||||
Reference in New Issue
Block a user