[IR] Mark IrFunctionImpl with an opt-in annotation
KT-59318
This commit is contained in:
committed by
Space Team
parent
e1d03f6540
commit
41197392f9
@@ -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,
|
||||||
|
|||||||
+39
-9
@@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-17
@@ -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)
|
||||||
|
|||||||
+9
-9
@@ -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,
|
||||||
|
|||||||
+15
-13
@@ -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(
|
||||||
|
|||||||
+11
-17
@@ -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)
|
||||||
|
|||||||
+20
-23
@@ -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 ->
|
||||||
|
|||||||
+29
-31
@@ -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,
|
||||||
|
|||||||
+16
-19
@@ -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
|
||||||
|
|
||||||
|
|||||||
-1
@@ -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.*
|
||||||
|
|||||||
Reference in New Issue
Block a user