Remove descriptors from InitializersLowering

This commit is contained in:
Georgy Bronnikov
2018-12-03 14:45:50 +03:00
parent 5d7a736cb1
commit 9078cb87e8
@@ -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 {