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