[IR] Unbind construction methods of IrFunctionImpl from symbol.descriptor
This commit is contained in:
+2
-9
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||
@@ -41,8 +40,6 @@ import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class Fir2IrDeclarationStorage(
|
||||
private val components: Fir2IrComponents,
|
||||
@@ -459,7 +456,7 @@ class Fir2IrDeclarationStorage(
|
||||
else simpleFunction?.isSuspend == true
|
||||
val created = function.convertWithOffsets { startOffset, endOffset ->
|
||||
enterScope(descriptor)
|
||||
val result = symbolTable.declareSimpleFunction(startOffset, endOffset, origin, descriptor) { symbol ->
|
||||
val result = symbolTable.declareSimpleFunction(descriptor) { symbol ->
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, updatedOrigin, symbol,
|
||||
name, visibility,
|
||||
@@ -562,11 +559,7 @@ class Fir2IrDeclarationStorage(
|
||||
WrappedPropertyGetterDescriptor(Annotations.EMPTY, SourceElement.NO_SOURCE)
|
||||
}
|
||||
val prefix = if (isSetter) "set" else "get"
|
||||
return symbolTable.declareSimpleFunction(
|
||||
propertyAccessor?.psi?.startOffsetSkippingComments ?: startOffset,
|
||||
propertyAccessor?.psi?.endOffset ?: endOffset,
|
||||
origin, descriptor
|
||||
) { symbol ->
|
||||
return symbolTable.declareSimpleFunction(descriptor) { symbol ->
|
||||
val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
|
||||
+1
-1
@@ -215,7 +215,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
|
||||
): IrFunction {
|
||||
val functionDescriptor = WrappedSimpleFunctionDescriptor()
|
||||
val thisReceiverDescriptor = WrappedValueParameterDescriptor()
|
||||
return components.symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, functionDescriptor) { symbol ->
|
||||
return components.symbolTable.declareSimpleFunction(functionDescriptor) { symbol ->
|
||||
IrFunctionImpl(
|
||||
UNDEFINED_OFFSET,
|
||||
UNDEFINED_OFFSET,
|
||||
|
||||
-2
@@ -387,8 +387,6 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
|
||||
val adapterFunctionDescriptor = WrappedSimpleFunctionDescriptor()
|
||||
|
||||
val irAdapterFun = context.symbolTable.declareSimpleFunction(
|
||||
startOffset, endOffset,
|
||||
IrDeclarationOrigin.ADAPTER_FOR_SUSPEND_CONVERSION,
|
||||
adapterFunctionDescriptor
|
||||
) { irAdapterSymbol ->
|
||||
IrFunctionImpl(
|
||||
|
||||
-2
@@ -340,8 +340,6 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
||||
callableReferenceType.isKSuspendFunctionType
|
||||
|
||||
return context.symbolTable.declareSimpleFunction(
|
||||
startOffset, endOffset,
|
||||
IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
||||
adapterFunctionDescriptor
|
||||
) { irAdapterSymbol ->
|
||||
IrFunctionImpl(
|
||||
|
||||
+1
-1
@@ -171,7 +171,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: FunctionDescriptor, symbol: IrSimpleFunctionSymbol,
|
||||
defaultArgumentFactory: IrFunction.(ValueParameterDescriptor) -> IrExpressionBody? = { null }
|
||||
): IrSimpleFunction {
|
||||
val irFunction = IrFunctionImpl(startOffset, endOffset, origin, symbol, IrUninitializedType)
|
||||
val irFunction = IrFunctionImpl(startOffset, endOffset, origin, symbol, IrUninitializedType, descriptor)
|
||||
irFunction.metadata = MetadataSource.Function(descriptor)
|
||||
|
||||
symbolTable.withScope(descriptor) {
|
||||
|
||||
+58
-34
@@ -23,43 +23,79 @@ class IrFunctionImpl(
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
override val symbol: IrSimpleFunctionSymbol,
|
||||
name: Name = symbol.descriptor.name,
|
||||
visibility: Visibility = symbol.descriptor.visibility,
|
||||
override val modality: Modality = symbol.descriptor.modality,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
returnType: IrType,
|
||||
isInline: Boolean = symbol.descriptor.isInline,
|
||||
isExternal: Boolean = symbol.descriptor.isExternal,
|
||||
override val isTailrec: Boolean = symbol.descriptor.isTailrec,
|
||||
override val isSuspend: Boolean = symbol.descriptor.isSuspend,
|
||||
override val isOperator: Boolean = symbol.descriptor.isOperator,
|
||||
isExpect: Boolean = symbol.descriptor.isExpect,
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isOperator: Boolean,
|
||||
isExpect: Boolean,
|
||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
) :
|
||||
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
||||
IrSimpleFunction,
|
||||
FunctionCarrier {
|
||||
|
||||
@Deprecated(
|
||||
"This constructor is left for native compilation purpose only. " +
|
||||
"It takes function attributes from symbol.descriptor " +
|
||||
"Please either provide function attributes or its descriptor explicitly"
|
||||
)
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
symbol: IrSimpleFunctionSymbol,
|
||||
returnType: IrType
|
||||
) : this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
name = symbol.descriptor.name,
|
||||
visibility = symbol.descriptor.visibility,
|
||||
modality = symbol.descriptor.modality,
|
||||
returnType = returnType,
|
||||
isInline = symbol.descriptor.isInline,
|
||||
isExternal = symbol.descriptor.isExternal,
|
||||
isTailrec = symbol.descriptor.isTailrec,
|
||||
isSuspend = symbol.descriptor.isSuspend,
|
||||
isOperator = symbol.descriptor.isOperator,
|
||||
isExpect = symbol.descriptor.isExpect
|
||||
)
|
||||
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
symbol: IrSimpleFunctionSymbol,
|
||||
returnType: IrType,
|
||||
visibility: Visibility = symbol.descriptor.visibility,
|
||||
modality: Modality = symbol.descriptor.modality
|
||||
descriptor: FunctionDescriptor,
|
||||
name: Name = descriptor.name
|
||||
) : this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name,
|
||||
visibility,
|
||||
modality,
|
||||
returnType,
|
||||
isInline = symbol.descriptor.isInline,
|
||||
isExternal = symbol.descriptor.isExternal,
|
||||
isTailrec = symbol.descriptor.isTailrec,
|
||||
isSuspend = symbol.descriptor.isSuspend,
|
||||
isExpect = symbol.descriptor.isExpect,
|
||||
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
isOperator = symbol.descriptor.isOperator
|
||||
name = name,
|
||||
visibility = descriptor.visibility,
|
||||
modality = descriptor.modality,
|
||||
returnType = returnType,
|
||||
isInline = descriptor.isInline,
|
||||
isExternal = descriptor.isExternal,
|
||||
isTailrec = descriptor.isTailrec,
|
||||
isSuspend = descriptor.isSuspend,
|
||||
isOperator = descriptor.isOperator,
|
||||
isExpect = descriptor.isExpect
|
||||
)
|
||||
|
||||
// Used by kotlin-native in InteropLowering.kt and IrUtils2.kt
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: FunctionDescriptor,
|
||||
returnType: IrType
|
||||
) : this(
|
||||
startOffset, endOffset, origin,
|
||||
IrSimpleFunctionSymbolImpl(descriptor), returnType, descriptor
|
||||
)
|
||||
|
||||
override val descriptor: FunctionDescriptor = symbol.descriptor
|
||||
@@ -94,18 +130,6 @@ class IrFunctionImpl(
|
||||
}
|
||||
}
|
||||
|
||||
// Used by kotlin-native in InteropLowering.kt and IrUtils2.kt
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: FunctionDescriptor,
|
||||
returnType: IrType
|
||||
) : this(
|
||||
startOffset, endOffset, origin,
|
||||
IrSimpleFunctionSymbolImpl(descriptor), returnType
|
||||
)
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BACKEND).first()
|
||||
}
|
||||
}
|
||||
return symbolTable.declareSimpleFunction(offset, offset, memberOrigin, descriptor, factory).symbol
|
||||
return symbolTable.declareSimpleFunction(descriptor, factory).symbol
|
||||
}
|
||||
|
||||
override fun FunctionDescriptor.valueParameterDescriptor(index: Int): ValueParameterDescriptor {
|
||||
@@ -292,7 +292,8 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
buildSimpleType()
|
||||
}
|
||||
|
||||
IrFunctionImpl(offset, offset, memberOrigin, it, Name.identifier("invoke"), Visibilities.PUBLIC, Modality.ABSTRACT,
|
||||
IrFunctionImpl(
|
||||
offset, offset, memberOrigin, it, Name.identifier("invoke"), Visibilities.PUBLIC, Modality.ABSTRACT,
|
||||
returnType,
|
||||
isInline = false,
|
||||
isExternal = false,
|
||||
@@ -369,7 +370,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
|
||||
fun createFakeOverrideFunction(descriptor: FunctionDescriptor, property: IrPropertySymbol?): IrSimpleFunction {
|
||||
val returnType = descriptor.returnType?.let { toIrType(it) } ?: error("No return type for $descriptor")
|
||||
val newFunction = symbolTable.declareSimpleFunction(offset, offset, memberOrigin, descriptor) {
|
||||
val newFunction = symbolTable.declareSimpleFunction(descriptor) {
|
||||
descriptor.run {
|
||||
IrFunctionImpl(
|
||||
offset, offset, memberOrigin, it, name, visibility, modality, returnType,
|
||||
|
||||
@@ -210,11 +210,7 @@ class DeclarationStubGenerator(
|
||||
if (descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE)
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
else computeOrigin(descriptor)
|
||||
return symbolTable.declareSimpleFunction(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||
origin,
|
||||
descriptor.original
|
||||
) {
|
||||
return symbolTable.declareSimpleFunction(descriptor.original) {
|
||||
IrLazyFunction(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
|
||||
it, descriptor,
|
||||
|
||||
@@ -692,19 +692,8 @@ open class SymbolTable(
|
||||
}
|
||||
|
||||
fun declareSimpleFunction(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: FunctionDescriptor,
|
||||
functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction = {
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, origin, it,
|
||||
nameProvider.nameForDeclaration(descriptor),
|
||||
returnType = IrUninitializedType
|
||||
).apply {
|
||||
metadata = MetadataSource.Function(it.descriptor)
|
||||
}
|
||||
}
|
||||
functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction
|
||||
): IrSimpleFunction {
|
||||
return simpleFunctionSymbolTable.declare(
|
||||
descriptor,
|
||||
|
||||
@@ -10,7 +10,10 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||
|
||||
fun SymbolTable.declareSimpleFunctionWithOverrides(
|
||||
startOffset: Int,
|
||||
@@ -18,7 +21,16 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: FunctionDescriptor
|
||||
) =
|
||||
declareSimpleFunction(startOffset, endOffset, origin, descriptor).also { declaration ->
|
||||
declareSimpleFunction(descriptor) {
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, origin, it,
|
||||
returnType = IrUninitializedType,
|
||||
descriptor = descriptor,
|
||||
name = nameProvider.nameForDeclaration(descriptor),
|
||||
).apply {
|
||||
metadata = MetadataSource.Function(descriptor)
|
||||
}
|
||||
}.also { declaration ->
|
||||
generateOverriddenFunctionSymbols(declaration, this)
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -252,7 +252,8 @@ interface IrBuilderExtension {
|
||||
fieldSymbol.owner.endOffset,
|
||||
SERIALIZABLE_PLUGIN_ORIGIN,
|
||||
symbol,
|
||||
descriptor.returnType!!.toIrType()
|
||||
descriptor.returnType!!.toIrType(),
|
||||
descriptor
|
||||
).also { f ->
|
||||
generateOverriddenFunctionSymbols(f, compilerContext.symbolTable)
|
||||
f.createParameterDeclarations(receiver = null)
|
||||
|
||||
Reference in New Issue
Block a user