diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt index 5a950e5f41d..146d4e2a33c 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt @@ -42,7 +42,11 @@ internal class BuiltInFictitiousFunctionIrClassFactory( override fun getDeclaration(symbol: IrSymbol) = (symbol.descriptor as? FunctionClassDescriptor)?.let { descriptor -> - buildClass(descriptor) { declareClass(offset, offset, DECLARATION_ORIGIN_FUNCTION_CLASS, descriptor) } + buildClass(descriptor) { + declareClass(descriptor) { + IrClassImpl(offset, offset, DECLARATION_ORIGIN_FUNCTION_CLASS, it, descriptor) + } + } } var module: IrModuleFragment? = null @@ -122,24 +126,19 @@ internal class BuiltInFictitiousFunctionIrClassFactory( ) private fun createSimpleFunction( - descriptor: FunctionDescriptor, - origin: IrDeclarationOrigin, - returnType: IrType - ) = symbolTable?.declareSimpleFunction( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, - descriptor - ) { + descriptor: FunctionDescriptor, + origin: IrDeclarationOrigin, + returnType: IrType + ) = symbolTable?.declareSimpleFunction(descriptor) { IrFunctionImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, - it, - returnType + SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, + it, returnType, descriptor ) - } - ?: IrFunctionImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, - descriptor, - returnType - ) + } ?: IrFunctionImpl( + SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, + descriptor, + returnType + ) private val createClassLambda = { s: IrClassSymbol -> IrClassImpl(offset, offset, DECLARATION_ORIGIN_FUNCTION_CLASS, s) } @@ -169,7 +168,9 @@ internal class BuiltInFictitiousFunctionIrClassFactory( } val superTypeSymbol = when (val superTypeDescriptor = superType.constructor.declarationDescriptor) { is FunctionClassDescriptor -> buildClass(superTypeDescriptor) { - declareClass(offset, offset, DECLARATION_ORIGIN_FUNCTION_CLASS, superTypeDescriptor) + declareClass(superTypeDescriptor) { + IrClassImpl(offset, offset, DECLARATION_ORIGIN_FUNCTION_CLASS, it, superTypeDescriptor) + } }.symbol functionSymbol.descriptor -> functionSymbol kFunctionSymbol.descriptor -> kFunctionSymbol @@ -278,7 +279,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory( } } - val newFunction = symbolTable?.declareSimpleFunction(offset, offset, memberOrigin, descriptor, functionDeclare) + val newFunction = symbolTable?.declareSimpleFunction(descriptor, functionDeclare) ?: functionDeclare(IrSimpleFunctionSymbolImpl(descriptor)) newFunction.parent = this diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/DescriptorToIrTranslationUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/DescriptorToIrTranslationUtils.kt index 1c7995944e7..fad00fa25af 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/DescriptorToIrTranslationUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/interop/DescriptorToIrTranslationUtils.kt @@ -9,11 +9,14 @@ import org.jetbrains.kotlin.backend.konan.InteropBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.builders.IrBuilder import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces @@ -46,12 +49,15 @@ internal interface DescriptorToIrTranslationMixin { * Additional elements are passed via [builder] callback. */ fun createClass(descriptor: ClassDescriptor, builder: (IrClass) -> Unit): IrClass = - symbolTable.declareClass( + symbolTable.declareClass(descriptor) { + IrClassImpl( startOffset = SYNTHETIC_OFFSET, endOffset = SYNTHETIC_OFFSET, origin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, + symbol = it, descriptor = descriptor - ).also { irClass -> + ) + }.also { irClass -> symbolTable.withScope(descriptor) { irClass.superTypes += descriptor.typeConstructor.supertypes.map { it.toIrType() @@ -78,10 +84,13 @@ internal interface DescriptorToIrTranslationMixin { } fun createConstructor(constructorDescriptor: ClassConstructorDescriptor): IrConstructor { - val irConstructor = symbolTable.declareConstructor( + val irConstructor = symbolTable.declareConstructor(constructorDescriptor) { + IrConstructorImpl( SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, - IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, constructorDescriptor - ) + IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, + it, IrUninitializedType, constructorDescriptor + ) + } irConstructor.valueParameters += constructorDescriptor.valueParameters.map { valueParameterDescriptor -> symbolTable.declareValueParameter( SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.DEFINED,