[Native] Drop irBuilder from IrUtils2

We can reuse `createIrBuilder` function
This commit is contained in:
Ivan Kylchik
2023-08-15 16:21:52 +02:00
committed by Space Team
parent 9e750e900d
commit b3474ac730
9 changed files with 40 additions and 45 deletions
@@ -1,6 +1,7 @@
package org.jetbrains.kotlin.backend.konan.cgen package org.jetbrains.kotlin.backend.konan.cgen
import org.jetbrains.kotlin.backend.common.lower.at import org.jetbrains.kotlin.backend.common.lower.at
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irNot import org.jetbrains.kotlin.backend.common.lower.irNot
import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
@@ -1162,7 +1163,7 @@ private class ObjCBlockPointerValuePassing(
constructor.valueParameters += constructorParameter constructor.valueParameters += constructorParameter
constructorParameter.parent = constructor constructorParameter.parent = constructor
constructor.body = irBuilder(stubs.irBuiltIns, constructor.symbol).irBlockBody(startOffset, endOffset) { constructor.body = stubs.irBuiltIns.createIrBuilder(constructor.symbol).irBlockBody(startOffset, endOffset) {
+irDelegatingConstructorCall(symbols.any.owner.constructors.single()) +irDelegatingConstructorCall(symbols.any.owner.constructors.single())
+irSetField(irGet(irClass.thisReceiver!!), blockHolderField, +irSetField(irGet(irClass.thisReceiver!!), blockHolderField,
irCall(symbols.interopCreateObjCObjectHolder.owner).apply { irCall(symbols.interopCreateObjCObjectHolder.owner).apply {
@@ -1208,7 +1209,7 @@ private class ObjCBlockPointerValuePassing(
parameter parameter
} }
invokeMethod.body = irBuilder(stubs.irBuiltIns, invokeMethod.symbol).irBlockBody(startOffset, endOffset) { invokeMethod.body = stubs.irBuiltIns.createIrBuilder(invokeMethod.symbol).irBlockBody(startOffset, endOffset) {
val blockPointer = irCall(symbols.interopObjCObjectRawValueGetter.owner).apply { val blockPointer = irCall(symbols.interopObjCObjectRawValueGetter.owner).apply {
extensionReceiver = irGetField(irGet(invokeMethod.dispatchReceiverParameter!!), blockHolderField) extensionReceiver = irGetField(irGet(invokeMethod.dispatchReceiverParameter!!), blockHolderField)
} }
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.backend.konan.cgen package org.jetbrains.kotlin.backend.konan.cgen
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlock import org.jetbrains.kotlin.backend.common.lower.irBlock
import org.jetbrains.kotlin.backend.common.lower.irThrow import org.jetbrains.kotlin.backend.common.lower.irThrow
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
@@ -19,7 +20,6 @@ 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.types.impl.IrUninitializedType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.irBuilder
import org.jetbrains.kotlin.ir.util.irCatch import org.jetbrains.kotlin.ir.util.irCatch
import org.jetbrains.kotlin.konan.ForeignExceptionMode import org.jetbrains.kotlin.konan.ForeignExceptionMode
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -74,7 +74,7 @@ internal class KotlinBridgeBuilder(
) { ) {
private var counter = 0 private var counter = 0
private val bridge: IrFunction = createKotlinBridge(startOffset, endOffset, cName, stubs, isExternal, foreignExceptionMode, origin) private val bridge: IrFunction = createKotlinBridge(startOffset, endOffset, cName, stubs, isExternal, foreignExceptionMode, origin)
val irBuilder: IrBuilderWithScope = irBuilder(stubs.irBuiltIns, bridge.symbol).at(startOffset, endOffset) val irBuilder: IrBuilderWithScope = stubs.irBuiltIns.createIrBuilder(bridge.symbol).at(startOffset, endOffset)
fun addParameter(type: IrType): IrValueParameter { fun addParameter(type: IrType): IrValueParameter {
val index = counter++ val index = counter++
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cenum package org.jetbrains.kotlin.backend.konan.ir.interop.cenum
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin
import org.jetbrains.kotlin.backend.konan.ir.interop.findDeclarationByName import org.jetbrains.kotlin.backend.konan.ir.interop.findDeclarationByName
@@ -55,7 +56,7 @@ internal class CEnumByValueFunctionGenerator(
// } // }
// throw NPE // throw NPE
postLinkageSteps.add { postLinkageSteps.add {
byValueIrFunction.body = irBuilder(irBuiltIns, byValueIrFunction.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { byValueIrFunction.body = irBuiltIns.createIrBuilder(byValueIrFunction.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+irReturn(irBlock { +irReturn(irBlock {
val values = irTemporary(irCall(valuesIrFunctionSymbol), isMutable = true) val values = irTemporary(irCall(valuesIrFunctionSymbol), isMutable = true)
val inductionVariable = irTemporary(irInt(0), isMutable = true) val inductionVariable = irTemporary(irInt(0), isMutable = true)
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cenum package org.jetbrains.kotlin.backend.konan.ir.interop.cenum
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.descriptors.enumEntries import org.jetbrains.kotlin.backend.konan.descriptors.enumEntries
import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin
import org.jetbrains.kotlin.backend.konan.ir.interop.findDeclarationByName import org.jetbrains.kotlin.backend.konan.ir.interop.findDeclarationByName
@@ -101,7 +102,7 @@ internal class CEnumClassGenerator(
propertyDescriptor, propertyDescriptor.type.toIrType(), DescriptorVisibilities.PRIVATE propertyDescriptor, propertyDescriptor.type.toIrType(), DescriptorVisibilities.PRIVATE
).also { ).also {
postLinkageSteps.add { postLinkageSteps.add {
it.initializer = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run { it.initializer = irBuiltIns.createIrBuilder(it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run {
irExprBody(irGet(irClass.primaryConstructor!!.valueParameters[0])) irExprBody(irGet(irClass.primaryConstructor!!.valueParameters[0]))
} }
} }
@@ -110,7 +111,7 @@ internal class CEnumClassGenerator(
val getter = irProperty.getter!! val getter = irProperty.getter!!
getter.correspondingPropertySymbol = irProperty.symbol getter.correspondingPropertySymbol = irProperty.symbol
postLinkageSteps.add { postLinkageSteps.add {
getter.body = irBuilder(irBuiltIns, getter.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { getter.body = irBuiltIns.createIrBuilder(getter.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+irReturn( +irReturn(
irGetField( irGetField(
irGet(getter.dispatchReceiverParameter!!), irGet(getter.dispatchReceiverParameter!!),
@@ -161,7 +162,7 @@ internal class CEnumClassGenerator(
val classSymbol = symbolTable.descriptorExtension.referenceClass(descriptor) val classSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
val type = descriptor.defaultType.toIrType() val type = descriptor.defaultType.toIrType()
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET) irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET)
.irBlockBody { .irBlockBody {
+IrEnumConstructorCallImpl( +IrEnumConstructorCallImpl(
startOffset, endOffset, startOffset, endOffset,
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cenum package org.jetbrains.kotlin.backend.konan.ir.interop.cenum
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull
import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin
import org.jetbrains.kotlin.backend.konan.ir.interop.irInstanceInitializer import org.jetbrains.kotlin.backend.konan.ir.interop.irInstanceInitializer
@@ -56,7 +57,7 @@ internal class CEnumCompanionGenerator(
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor) val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
postLinkageSteps.add { postLinkageSteps.add {
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { it.body = irBuiltIns.createIrBuilder(it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
superConstructorSymbol superConstructorSymbol
@@ -85,7 +86,7 @@ internal class CEnumCompanionGenerator(
} }
private fun generateAliasGetterBody(getter: IrSimpleFunction, entrySymbol: IrEnumEntrySymbol, enumClass: IrClass): IrBody = private fun generateAliasGetterBody(getter: IrSimpleFunction, entrySymbol: IrEnumEntrySymbol, enumClass: IrClass): IrBody =
irBuilder(irBuiltIns, getter.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irBuiltIns.createIrBuilder(getter.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+irReturn( +irReturn(
IrGetEnumValueImpl(startOffset, endOffset, enumClass.defaultType, entrySymbol) IrGetEnumValueImpl(startOffset, endOffset, enumClass.defaultType, entrySymbol)
) )
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cenum package org.jetbrains.kotlin.backend.konan.ir.interop.cenum
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin
@@ -23,7 +24,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.ir.util.irBuilder
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
@@ -61,7 +61,7 @@ internal class CEnumVarClassGenerator(
val irConstructor = createConstructor(enumVarClass.descriptor.unsubstitutedPrimaryConstructor!!) val irConstructor = createConstructor(enumVarClass.descriptor.unsubstitutedPrimaryConstructor!!)
val classSymbol = symbolTable.descriptorExtension.referenceClass(enumVarClass.descriptor) val classSymbol = symbolTable.descriptorExtension.referenceClass(enumVarClass.descriptor)
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol
).also { ).also {
@@ -85,7 +85,7 @@ internal class CEnumVarClassGenerator(
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor) val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
postLinkageSteps.add { postLinkageSteps.add {
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { it.body = irBuiltIns.createIrBuilder(it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
symbols.primitiveVarPrimaryConstructor symbols.primitiveVarPrimaryConstructor
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cstruct package org.jetbrains.kotlin.backend.konan.ir.interop.cstruct
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.RuntimeNames import org.jetbrains.kotlin.backend.konan.RuntimeNames
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin import org.jetbrains.kotlin.backend.konan.ir.interop.DescriptorToIrTranslationMixin
@@ -101,7 +102,7 @@ internal class CStructVarClassGenerator(
val getPtr = symbols.interopGetPtr val getPtr = symbols.interopGetPtr
destroy.body = irBuilder(irBuiltIns, destroy.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET) destroy.body = irBuiltIns.createIrBuilder(destroy.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET)
.irBlockBody { .irBlockBody {
+irCall(companionDestroy).apply { +irCall(companionDestroy).apply {
dispatchReceiver = irGetObject(irClass.companionObject()!!.symbol) dispatchReceiver = irGetObject(irClass.companionObject()!!.symbol)
@@ -157,12 +158,12 @@ internal class CStructVarClassGenerator(
DescriptorVisibilities.PRIVATE DescriptorVisibilities.PRIVATE
).also { ).also {
it.parent = irClass it.parent = irClass
it.initializer = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run { it.initializer = irBuiltIns.createIrBuilder(it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run {
irExprBody(irGet(irClass.primaryConstructor!!.valueParameters[1])) irExprBody(irGet(irClass.primaryConstructor!!.valueParameters[1]))
} }
} }
managedVal.getter!!.body = irBuilder(irBuiltIns, managedVal.getter!!.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET) managedVal.getter!!.body = irBuiltIns.createIrBuilder(managedVal.getter!!.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET)
.irBlockBody { .irBlockBody {
+irReturn(irGetField(irGet(managedVal.getter!!.dispatchReceiverParameter!!), managedVal.backingField!!)) +irReturn(irGetField(irGet(managedVal.getter!!.dispatchReceiverParameter!!), managedVal.backingField!!))
@@ -181,7 +182,7 @@ internal class CStructVarClassGenerator(
isExternal = false, isExternal = false,
).also { field -> ).also { field ->
field.parent = irClass field.parent = irClass
field.initializer = irBuilder(irBuiltIns, field.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run { field.initializer = irBuiltIns.createIrBuilder(field.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).run {
val lambda = context.irFactory.buildFun { val lambda = context.irFactory.buildFun {
startOffset = SYNTHETIC_OFFSET startOffset = SYNTHETIC_OFFSET
endOffset = SYNTHETIC_OFFSET endOffset = SYNTHETIC_OFFSET
@@ -268,7 +269,7 @@ internal class CStructVarClassGenerator(
if (!irClass.descriptor.annotations.hasAnnotation(RuntimeNames.managedType)) { if (!irClass.descriptor.annotations.hasAnnotation(RuntimeNames.managedType)) {
return createConstructor(irClass.descriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor -> return createConstructor(irClass.descriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor ->
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, startOffset, endOffset,
context.irBuiltIns.unitType, symbols.cStructVarConstructorSymbol context.irBuiltIns.unitType, symbols.cStructVarConstructorSymbol
@@ -282,7 +283,7 @@ internal class CStructVarClassGenerator(
} else { } else {
return createConstructor(irClass.descriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor -> return createConstructor(irClass.descriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor ->
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, startOffset, endOffset,
context.irBuiltIns.unitType, symbols.managedTypeConstructor context.irBuiltIns.unitType, symbols.managedTypeConstructor
@@ -300,7 +301,7 @@ internal class CStructVarClassGenerator(
private fun createSecondaryConstructor(descriptor: ClassConstructorDescriptor): IrConstructor { private fun createSecondaryConstructor(descriptor: ClassConstructorDescriptor): IrConstructor {
return createConstructor(descriptor).also { return createConstructor(descriptor).also {
postLinkageSteps.add { postLinkageSteps.add {
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { it.body = irBuiltIns.createIrBuilder(it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
// Empty. The real body is constructed at the call site by the interop lowering phase. // Empty. The real body is constructed at the call site by the interop lowering phase.
} }
} }
@@ -4,6 +4,7 @@
*/ */
package org.jetbrains.kotlin.backend.konan.ir.interop.cstruct package org.jetbrains.kotlin.backend.konan.ir.interop.cstruct
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.RuntimeNames import org.jetbrains.kotlin.backend.konan.RuntimeNames
import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull import org.jetbrains.kotlin.backend.konan.descriptors.getArgumentValueOrNull
import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols
@@ -68,7 +69,7 @@ internal class CStructVarCompanionGenerator(
if (companionObjectDescriptor.containingDeclaration.annotations.hasAnnotation(RuntimeNames.managedType)) { if (companionObjectDescriptor.containingDeclaration.annotations.hasAnnotation(RuntimeNames.managedType)) {
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor -> return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor ->
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
irBuiltIns.anyClass.owner.primaryConstructor!!.symbol irBuiltIns.anyClass.owner.primaryConstructor!!.symbol
@@ -80,7 +81,7 @@ internal class CStructVarCompanionGenerator(
} else { } else {
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor -> return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also { irConstructor ->
postLinkageSteps.add { postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuiltIns.createIrBuilder(irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner( +IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
symbols.structVarPrimaryConstructor symbols.structVarPrimaryConstructor
@@ -5,50 +5,39 @@
package org.jetbrains.kotlin.ir.util package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.konan.KonanBackendContext import org.jetbrains.kotlin.backend.konan.KonanBackendContext
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.IrFileEntry
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.irCall
import org.jetbrains.kotlin.ir.builders.parent
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection import org.jetbrains.kotlin.ir.types.makeNullable
import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver
import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.MemberScope
import java.lang.reflect.Proxy
internal fun irBuilder(
irBuiltIns: IrBuiltIns,
scopeOwnerSymbol: IrSymbol,
startOffset: Int = UNDEFINED_OFFSET,
endOffset: Int = UNDEFINED_OFFSET
): IrBuilderWithScope =
object : IrBuilderWithScope(
IrGeneratorContextBase(irBuiltIns),
Scope(scopeOwnerSymbol),
startOffset,
endOffset
) {}
private var topLevelInitializersCounter = 0 private var topLevelInitializersCounter = 0