Remove descriptors from InitializersLowering
This commit is contained in:
+26
-30
@@ -8,22 +8,16 @@ package org.jetbrains.kotlin.backend.common.lower
|
|||||||
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
|
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||||
import org.jetbrains.kotlin.backend.common.deepCopyWithWrappedDescriptors
|
import org.jetbrains.kotlin.backend.common.deepCopyWithWrappedDescriptors
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.ir.SetDeclarationsParentVisitor
|
import org.jetbrains.kotlin.backend.common.ir.SetDeclarationsParentVisitor
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
|
||||||
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.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
@@ -31,8 +25,8 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
|||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
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
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
|
||||||
|
|
||||||
object SYNTHESIZED_INIT_BLOCK: IrStatementOriginImpl("SYNTHESIZED_INIT_BLOCK")
|
object SYNTHESIZED_INIT_BLOCK: IrStatementOriginImpl("SYNTHESIZED_INIT_BLOCK")
|
||||||
|
|
||||||
@@ -123,27 +117,29 @@ class InitializersLowering(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createStaticInitializationMethod(irClass: IrClass, staticInitializerStatements: List<IrStatement>) {
|
fun createStaticInitializationMethod(irClass: IrClass, staticInitializerStatements: List<IrStatement>) {
|
||||||
val staticInitializerDescriptor = SimpleFunctionDescriptorImpl.create(
|
// TODO: mark as synthesized
|
||||||
irClass.descriptor, Annotations.EMPTY, clinitName,
|
val staticInitializerDescriptor = WrappedSimpleFunctionDescriptor()
|
||||||
CallableMemberDescriptor.Kind.SYNTHESIZED,
|
val staticInitializer = IrFunctionImpl(
|
||||||
SourceElement.NO_SOURCE
|
irClass.startOffset, irClass.endOffset,
|
||||||
)
|
declarationOrigin,
|
||||||
staticInitializerDescriptor.initialize(
|
IrSimpleFunctionSymbolImpl(staticInitializerDescriptor),
|
||||||
null, null, emptyList(), emptyList(),
|
clinitName,
|
||||||
irClass.descriptor.builtIns.unitType,
|
Visibilities.PUBLIC,
|
||||||
Modality.FINAL, Visibilities.PUBLIC
|
Modality.FINAL,
|
||||||
)
|
returnType = context.irBuiltIns.unitType,
|
||||||
irClass.declarations.add(
|
isInline = false,
|
||||||
IrFunctionImpl(
|
isExternal = false,
|
||||||
irClass.startOffset, irClass.endOffset, declarationOrigin,
|
isTailrec = false,
|
||||||
staticInitializerDescriptor,
|
isSuspend = false
|
||||||
context.irBuiltIns.unitType,
|
).apply {
|
||||||
IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
|
staticInitializerDescriptor.bind(this)
|
||||||
staticInitializerStatements.map { it.copy(irClass) })
|
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset,
|
||||||
).apply {
|
staticInitializerStatements.map { it.copy(irClass) })
|
||||||
accept(SetDeclarationsParentVisitor, this)
|
accept(SetDeclarationsParentVisitor, this)
|
||||||
}
|
// Should come after SetDeclarationParentVisitor, because it sets staticInitializer's own parent to itself.
|
||||||
)
|
parent = irClass
|
||||||
|
}
|
||||||
|
irClass.declarations.add(staticInitializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
Reference in New Issue
Block a user