From 9078cb87e8b75aee16ed3f37356b6825cbe0f317 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 3 Dec 2018 14:45:50 +0300 Subject: [PATCH] Remove descriptors from InitializersLowering --- .../common/lower/InitializersLowering.kt | 56 +++++++++---------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt index 8748107164e..c4aee08c7a7 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt @@ -8,22 +8,16 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.ClassLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext 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.phaser.makeIrFilePhase -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.SourceElement 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.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl -import org.jetbrains.kotlin.ir.expressions.IrBlock -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.* import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl 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.visitors.IrElementTransformerVoid 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.resolve.descriptorUtil.builtIns object SYNTHESIZED_INIT_BLOCK: IrStatementOriginImpl("SYNTHESIZED_INIT_BLOCK") @@ -123,27 +117,29 @@ class InitializersLowering( } fun createStaticInitializationMethod(irClass: IrClass, staticInitializerStatements: List) { - val staticInitializerDescriptor = SimpleFunctionDescriptorImpl.create( - irClass.descriptor, Annotations.EMPTY, clinitName, - CallableMemberDescriptor.Kind.SYNTHESIZED, - SourceElement.NO_SOURCE - ) - staticInitializerDescriptor.initialize( - null, null, emptyList(), emptyList(), - irClass.descriptor.builtIns.unitType, - Modality.FINAL, Visibilities.PUBLIC - ) - irClass.declarations.add( - IrFunctionImpl( - irClass.startOffset, irClass.endOffset, declarationOrigin, - staticInitializerDescriptor, - context.irBuiltIns.unitType, - IrBlockBodyImpl(irClass.startOffset, irClass.endOffset, - staticInitializerStatements.map { it.copy(irClass) }) - ).apply { - accept(SetDeclarationsParentVisitor, this) - } - ) + // TODO: mark as synthesized + val staticInitializerDescriptor = WrappedSimpleFunctionDescriptor() + val staticInitializer = IrFunctionImpl( + irClass.startOffset, irClass.endOffset, + declarationOrigin, + IrSimpleFunctionSymbolImpl(staticInitializerDescriptor), + clinitName, + Visibilities.PUBLIC, + Modality.FINAL, + returnType = context.irBuiltIns.unitType, + isInline = false, + isExternal = false, + isTailrec = false, + isSuspend = false + ).apply { + staticInitializerDescriptor.bind(this) + body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset, + staticInitializerStatements.map { it.copy(irClass) }) + accept(SetDeclarationsParentVisitor, this) + // Should come after SetDeclarationParentVisitor, because it sets staticInitializer's own parent to itself. + parent = irClass + } + irClass.declarations.add(staticInitializer) } companion object {