[IR] Mark IrFunctionImpl with an opt-in annotation

KT-59318
This commit is contained in:
Sergej Jaskiewicz
2023-12-07 17:43:00 +01:00
committed by Space Team
parent e1d03f6540
commit 41197392f9
10 changed files with 168 additions and 140 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrImplementationDetail
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
@@ -21,7 +22,10 @@ import org.jetbrains.kotlin.ir.types.impl.ReturnTypeIsNotInitializedException
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class IrFunctionImpl( // IMPORTANT: This class is used in the Compose IDE plugin (platform 233).
// Don't rename it or change its constructor's signature so as not to break binary compatibility when an older version of
// the Compose IDE plugin is used with a newer version of the Kotlin IDE plugin that vendors the updated compiler version.
class IrFunctionImpl @IrImplementationDetail constructor(
override val startOffset: Int, override val startOffset: Int,
override val endOffset: Int, override val endOffset: Int,
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
@@ -12,14 +12,17 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.descriptors.IrAbstractDescriptorBasedFunctionFactory import org.jetbrains.kotlin.ir.descriptors.IrAbstractDescriptorBasedFunctionFactory
import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.linkage.IrProvider
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.impl.* 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.SimpleTypeNullability import org.jetbrains.kotlin.ir.types.SimpleTypeNullability
import org.jetbrains.kotlin.ir.types.classOrNull import org.jetbrains.kotlin.ir.types.classOrNull
@@ -188,9 +191,23 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
): IrSimpleFunction { ): IrSimpleFunction {
val functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction = { val functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction = {
with(descriptor) { with(descriptor) {
IrFunctionImpl( symbolTable.irFactory.createSimpleFunction(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, it, name, visibility, modality, returnType, SYNTHETIC_OFFSET,
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride SYNTHETIC_OFFSET,
origin,
name,
visibility,
isInline,
isExpect,
returnType,
modality,
it,
isTailrec,
isSuspend,
isOperator,
isInfix,
isExternal,
isFakeOverride = isFakeOverride,
) )
} }
} }
@@ -329,10 +346,23 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
val functionDeclare = { s: IrSimpleFunctionSymbol -> val functionDeclare = { s: IrSimpleFunctionSymbol ->
descriptor.run { descriptor.run {
IrFunctionImpl( symbolTable.irFactory.createSimpleFunction(
offset, offset, memberOrigin, s, name, visibility, modality, returnType, offset,
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, offset,
isFakeOverride = true memberOrigin,
name,
visibility,
isInline,
isExpect,
returnType,
modality,
s,
isTailrec,
isSuspend,
isOperator,
isInfix,
isExternal,
isFakeOverride = true,
) )
} }
} }
@@ -3,10 +3,11 @@ 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.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.InteropFqNames
import org.jetbrains.kotlin.backend.konan.PrimitiveBinaryType
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.buildSimpleAnnotation import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation
import org.jetbrains.kotlin.ir.util.getAnnotationArgumentValue
import org.jetbrains.kotlin.backend.konan.ir.konanLibrary import org.jetbrains.kotlin.backend.konan.ir.konanLibrary
import org.jetbrains.kotlin.backend.konan.lower.FunctionReferenceLowering import org.jetbrains.kotlin.backend.konan.lower.FunctionReferenceLowering
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
@@ -18,7 +19,8 @@ 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.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
@@ -573,23 +575,22 @@ private fun KotlinStubs.createFakeKotlinExternalFunction(
cFunctionName: String, cFunctionName: String,
isObjCMethod: Boolean isObjCMethod: Boolean
): IrSimpleFunction { ): IrSimpleFunction {
val bridge = IrFunctionImpl( val bridge = irBuiltIns.irFactory.createSimpleFunction(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.DEFINED, IrDeclarationOrigin.DEFINED,
IrSimpleFunctionSymbolImpl(),
Name.identifier(cFunctionName), Name.identifier(cFunctionName),
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.FINAL,
signature.returnType,
isInline = false, isInline = false,
isExternal = true, isExpect = false,
signature.returnType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
isExternal = true,
) )
bridge.annotations += buildSimpleAnnotation(irBuiltIns, UNDEFINED_OFFSET, UNDEFINED_OFFSET, bridge.annotations += buildSimpleAnnotation(irBuiltIns, UNDEFINED_OFFSET, UNDEFINED_OFFSET,
@@ -1186,15 +1187,21 @@ private class ObjCBlockPointerValuePassing(
val overriddenInvokeMethod = (functionType.classifier.owner as IrClass).simpleFunctions() val overriddenInvokeMethod = (functionType.classifier.owner as IrClass).simpleFunctions()
.single { it.name == OperatorNameConventions.INVOKE } .single { it.name == OperatorNameConventions.INVOKE }
val invokeMethod = IrFunctionImpl( val invokeMethod = context.irFactory.createSimpleFunction(
startOffset, endOffset, startOffset,
endOffset,
OBJC_BLOCK_FUNCTION_IMPL, OBJC_BLOCK_FUNCTION_IMPL,
IrSimpleFunctionSymbolImpl(),
overriddenInvokeMethod.name, overriddenInvokeMethod.name,
DescriptorVisibilities.PUBLIC, Modality.FINAL, DescriptorVisibilities.PUBLIC,
isInline = false,
isExpect = false,
returnType = functionType.arguments.last().typeOrNull!!, returnType = functionType.arguments.last().typeOrNull!!,
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, Modality.FINAL,
isFakeOverride = false, isOperator = false, isInfix = false IrSimpleFunctionSymbolImpl(),
isTailrec = false,
isSuspend = false,
isOperator = false,
isInfix = false,
) )
invokeMethod.overriddenSymbols += overriddenInvokeMethod.symbol invokeMethod.overriddenSymbols += overriddenInvokeMethod.symbol
irClass.addChild(invokeMethod) irClass.addChild(invokeMethod)
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
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.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
@@ -112,23 +112,23 @@ private fun createKotlinBridge(
foreignExceptionMode: ForeignExceptionMode.Mode, foreignExceptionMode: ForeignExceptionMode.Mode,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin
): IrFunction { ): IrFunction {
val bridge = IrFunctionImpl( val bridge = stubs.irBuiltIns.irFactory.createSimpleFunction(
startOffset, startOffset,
endOffset, endOffset,
origin, origin,
IrSimpleFunctionSymbolImpl(),
Name.identifier(cBridgeName), Name.identifier(cBridgeName),
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.FINAL,
IrUninitializedType,
isInline = false, isInline = false,
isExternal = isExternal, isExpect = false,
IrUninitializedType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
isExternal = isExternal,
isFakeOverride = false,
) )
if (isExternal) { if (isExternal) {
bridge.annotations += buildSimpleAnnotation(stubs.irBuiltIns, startOffset, endOffset, bridge.annotations += buildSimpleAnnotation(stubs.irBuiltIns, startOffset, endOffset,
@@ -21,10 +21,13 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.builders.declarations.buildFun
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.IrValueParameterImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
@@ -127,23 +130,22 @@ internal class WorkersBridgesBuilding(val context: Context) : DeclarationContain
val startOffset = jobFunction.startOffset val startOffset = jobFunction.startOffset
val endOffset = jobFunction.endOffset val endOffset = jobFunction.endOffset
runtimeJobFunction = runtimeJobFunction =
IrFunctionImpl( context.irFactory.createSimpleFunction(
startOffset, endOffset, startOffset,
endOffset,
IrDeclarationOrigin.DEFINED, IrDeclarationOrigin.DEFINED,
IrSimpleFunctionSymbolImpl(),
jobFunction.name, jobFunction.name,
jobFunction.visibility, jobFunction.visibility,
jobFunction.modality,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
returnType = context.irBuiltIns.anyNType,
jobFunction.modality,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
returnType = context.irBuiltIns.anyNType,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
) )
runtimeJobFunction.valueParameters += runtimeJobFunction.valueParameters +=
IrValueParameterImpl( IrValueParameterImpl(
@@ -7,20 +7,15 @@ package org.jetbrains.kotlin.backend.konan.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.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.irDelegatingConstructorCall
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.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.types.isPrimitiveType
import org.jetbrains.kotlin.ir.types.isString
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
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
@@ -109,22 +104,21 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo
val startOffset = irClass.startOffset val startOffset = irClass.startOffset
val endOffset = irClass.endOffset val endOffset = irClass.endOffset
val initializeFun = val initializeFun =
IrFunctionImpl( context.irFactory.createSimpleFunction(
startOffset, endOffset, startOffset,
endOffset,
DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER, DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER,
IrSimpleFunctionSymbolImpl(),
"INITIALIZER".synthesizedName, "INITIALIZER".synthesizedName,
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.FINAL,
context.irBuiltIns.unitType,
isInline = false, isInline = false,
isSuspend = false,
isExternal = false,
isTailrec = false,
isExpect = false, isExpect = false,
isFakeOverride = false, context.irBuiltIns.unitType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false,
isSuspend = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
).apply { ).apply {
parent = irClass parent = irClass
irClass.declarations.add(this) irClass.declarations.add(this)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.backend.konan.lower package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.ir.util.inlineFunction
import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.backend.common.lower.*
import org.jetbrains.kotlin.backend.common.peek import org.jetbrains.kotlin.backend.common.peek
import org.jetbrains.kotlin.backend.common.pop import org.jetbrains.kotlin.backend.common.pop
@@ -15,7 +14,10 @@ import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.cgen.* import org.jetbrains.kotlin.backend.konan.cgen.*
import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
import org.jetbrains.kotlin.backend.konan.ir.* import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
import org.jetbrains.kotlin.backend.konan.ir.isFromInteropLibrary
import org.jetbrains.kotlin.backend.konan.ir.konanLibrary
import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType
import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -27,13 +29,10 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
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.IrFunctionImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
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.*
import org.jetbrains.kotlin.ir.objcinterop.* import org.jetbrains.kotlin.ir.objcinterop.*
import org.jetbrains.kotlin.ir.util.toIrConst
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -271,22 +270,21 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
// Generate `override fun init...(...) = this.initBy(...)`: // Generate `override fun init...(...) = this.initBy(...)`:
return IrFunctionImpl( return context.irFactory.createSimpleFunction(
constructor.startOffset, constructor.endOffset, constructor.startOffset,
constructor.endOffset,
OVERRIDING_INITIALIZER_BY_CONSTRUCTOR, OVERRIDING_INITIALIZER_BY_CONSTRUCTOR,
IrSimpleFunctionSymbolImpl(),
initMethod.name, initMethod.name,
DescriptorVisibilities.PUBLIC, DescriptorVisibilities.PUBLIC,
Modality.OPEN,
irClass.defaultType,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
irClass.defaultType,
Modality.OPEN,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
).also { result -> ).also { result ->
result.parent = irClass result.parent = irClass
result.createDispatchReceiverParameter() result.createDispatchReceiverParameter()
@@ -369,24 +367,23 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
function.valueParameters.mapTo(parameterTypes) { nativePtrType } function.valueParameters.mapTo(parameterTypes) { nativePtrType }
val newFunction = val newFunction =
IrFunctionImpl( context.irFactory.createSimpleFunction(
function.startOffset, function.endOffset, function.startOffset,
function.endOffset,
// The generated function is called by ObjC and contains Kotlin code, so // The generated function is called by ObjC and contains Kotlin code, so
// it must switch thread state and potentially initialize runtime on this thread. // it must switch thread state and potentially initialize runtime on this thread.
CBridgeOrigin.C_TO_KOTLIN_BRIDGE, CBridgeOrigin.C_TO_KOTLIN_BRIDGE,
IrSimpleFunctionSymbolImpl(),
("imp:$selector").synthesizedName, ("imp:$selector").synthesizedName,
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.FINAL,
function.returnType,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
function.returnType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
) )
newFunction.valueParameters += parameterTypes.mapIndexed { index, type -> newFunction.valueParameters += parameterTypes.mapIndexed { index, type ->
@@ -5,18 +5,19 @@ import org.jetbrains.kotlin.backend.common.lower.*
import org.jetbrains.kotlin.backend.common.lower.optimizations.LivenessAnalysis import org.jetbrains.kotlin.backend.common.lower.optimizations.LivenessAnalysis
import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.NativeGenerationState import org.jetbrains.kotlin.backend.konan.NativeGenerationState
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.irCall
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.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.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSuspendableExpressionImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSuspensionPointImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
@@ -28,7 +29,6 @@ import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictedSuspendFunction import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictedSuspendFunction
import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver
internal class NativeSuspendFunctionsLowering( internal class NativeSuspendFunctionsLowering(
generationState: NativeGenerationState generationState: NativeGenerationState
@@ -457,42 +457,40 @@ internal class NativeSuspendFunctionsLowering(
// These are marker functions to split up the lowering on two parts. // These are marker functions to split up the lowering on two parts.
private val saveState = private val saveState =
IrFunctionImpl( context.irFactory.createSimpleFunction(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
SYNTHETIC_OFFSET,
IrDeclarationOrigin.DEFINED, IrDeclarationOrigin.DEFINED,
IrSimpleFunctionSymbolImpl(),
"saveState".synthesizedName, "saveState".synthesizedName,
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.ABSTRACT,
context.irBuiltIns.unitType,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
context.irBuiltIns.unitType,
Modality.ABSTRACT,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
) )
private val restoreState = private val restoreState =
IrFunctionImpl( context.irFactory.createSimpleFunction(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
IrDeclarationOrigin.DEFINED, SYNTHETIC_OFFSET,
IrSimpleFunctionSymbolImpl(), IrDeclarationOrigin.DEFINED,
"restoreState".synthesizedName, "restoreState".synthesizedName,
DescriptorVisibilities.PRIVATE, DescriptorVisibilities.PRIVATE,
Modality.ABSTRACT, isInline = false,
context.irBuiltIns.unitType, isExpect = false,
isInline = false, context.irBuiltIns.unitType,
isExternal = false, Modality.ABSTRACT,
isTailrec = false, IrSimpleFunctionSymbolImpl(),
isSuspend = false, isTailrec = false,
isExpect = false, isSuspend = false,
isFakeOverride = false, isOperator = false,
isOperator = false, isInfix = false,
isInfix = false )
)
private fun IrBuilderWithScope.irVar(name: Name, type: IrType, private fun IrBuilderWithScope.irVar(name: Name, type: IrType,
isMutable: Boolean = false, isMutable: Boolean = false,
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.builders.declarations.buildField
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.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -332,22 +331,21 @@ internal class TestProcessor (val context: Context) {
private fun buildObjectGetter(objectSymbol: IrClassSymbol, private fun buildObjectGetter(objectSymbol: IrClassSymbol,
owner: IrClass, owner: IrClass,
getterName: Name): IrSimpleFunction = getterName: Name): IrSimpleFunction =
IrFunctionImpl( context.irFactory.createSimpleFunction(
owner.startOffset, owner.endOffset, owner.startOffset,
owner.endOffset,
TEST_SUITE_GENERATED_MEMBER, TEST_SUITE_GENERATED_MEMBER,
IrSimpleFunctionSymbolImpl(),
getterName, getterName,
DescriptorVisibilities.PROTECTED, DescriptorVisibilities.PROTECTED,
Modality.FINAL,
objectSymbol.starProjectedType,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
objectSymbol.starProjectedType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
).apply { ).apply {
parent = owner parent = owner
@@ -370,22 +368,21 @@ internal class TestProcessor (val context: Context) {
private fun buildInstanceGetter(classSymbol: IrClassSymbol, private fun buildInstanceGetter(classSymbol: IrClassSymbol,
owner: IrClass, owner: IrClass,
getterName: Name): IrSimpleFunction = getterName: Name): IrSimpleFunction =
IrFunctionImpl( context.irFactory.createSimpleFunction(
owner.startOffset, owner.endOffset, owner.startOffset,
owner.endOffset,
TEST_SUITE_GENERATED_MEMBER, TEST_SUITE_GENERATED_MEMBER,
IrSimpleFunctionSymbolImpl(),
getterName, getterName,
DescriptorVisibilities.PROTECTED, DescriptorVisibilities.PROTECTED,
Modality.FINAL,
classSymbol.starProjectedType,
isInline = false, isInline = false,
isExternal = false, isExpect = false,
classSymbol.starProjectedType,
Modality.FINAL,
IrSimpleFunctionSymbolImpl(),
isTailrec = false, isTailrec = false,
isSuspend = false, isSuspend = false,
isExpect = false,
isFakeOverride = false,
isOperator = false, isOperator = false,
isInfix = false isInfix = false,
).apply { ).apply {
parent = owner parent = owner
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*