[IR] Unbind construction methods of IrConstructorImpl from symbol.descriptor
This commit is contained in:
+1
-1
@@ -519,7 +519,7 @@ class Fir2IrDeclarationStorage(
|
||||
val isPrimary = constructor.isPrimary
|
||||
classifierStorage.preCacheTypeParameters(constructor)
|
||||
val created = constructor.convertWithOffsets { startOffset, endOffset ->
|
||||
symbolTable.declareConstructor(startOffset, endOffset, origin, descriptor) { symbol ->
|
||||
symbolTable.declareConstructor(descriptor) { symbol ->
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
Name.special("<init>"), constructor.visibility,
|
||||
|
||||
+18
-6
@@ -9,11 +9,13 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset
|
||||
@@ -244,17 +246,27 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
ktParametersElement: KtPureElement,
|
||||
constructorDescriptor: ClassConstructorDescriptor,
|
||||
generateBody: BodyGenerator.() -> IrBody?
|
||||
): IrConstructor =
|
||||
context.symbolTable.declareConstructor(
|
||||
ktConstructorElement.getStartOffsetOfConstructorDeclarationKeywordOrNull() ?: ktConstructorElement.pureStartOffset,
|
||||
ktConstructorElement.pureEndOffset,
|
||||
IrDeclarationOrigin.DEFINED,
|
||||
): IrConstructor {
|
||||
val startOffset = ktConstructorElement.getStartOffsetOfConstructorDeclarationKeywordOrNull() ?: ktConstructorElement.pureStartOffset
|
||||
val endOffset = ktConstructorElement.pureEndOffset
|
||||
val origin = IrDeclarationOrigin.DEFINED
|
||||
return context.symbolTable.declareConstructor(
|
||||
constructorDescriptor
|
||||
).buildWithScope { irConstructor ->
|
||||
) {
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, it,
|
||||
returnType = IrUninitializedType,
|
||||
descriptor = constructorDescriptor,
|
||||
name = context.symbolTable.nameProvider.nameForDeclaration(constructorDescriptor),
|
||||
).apply {
|
||||
metadata = MetadataSource.Function(it.descriptor)
|
||||
}
|
||||
}.buildWithScope { irConstructor ->
|
||||
generateValueParameterDeclarations(irConstructor, ktParametersElement, null)
|
||||
irConstructor.body = createBodyGenerator(irConstructor.symbol).generateBody()
|
||||
irConstructor.returnType = constructorDescriptor.returnType.toIrType()
|
||||
}
|
||||
}
|
||||
|
||||
fun generateSyntheticFunctionParameterDeclarations(irFunction: IrFunction) {
|
||||
val descriptor = irFunction.descriptor
|
||||
|
||||
+1
-1
@@ -150,7 +150,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassConstructorDescriptor, symbol: IrConstructorSymbol,
|
||||
defaultArgumentFactory: IrFunction.(ValueParameterDescriptor) -> IrExpressionBody? = { null }
|
||||
): IrConstructor {
|
||||
val irConstructor = IrConstructorImpl(startOffset, endOffset, origin, symbol, IrUninitializedType)
|
||||
val irConstructor = IrConstructorImpl(startOffset, endOffset, origin, symbol, IrUninitializedType, descriptor)
|
||||
irConstructor.metadata = MetadataSource.Function(descriptor)
|
||||
|
||||
symbolTable.withScope(descriptor) {
|
||||
|
||||
+15
-18
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ConstructorCarrier
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
@@ -32,13 +31,13 @@ class IrConstructorImpl(
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
override val symbol: IrConstructorSymbol,
|
||||
name: Name = symbol.descriptor.name,
|
||||
visibility: Visibility = symbol.descriptor.visibility,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
returnType: IrType,
|
||||
isInline: Boolean = symbol.descriptor.isInline,
|
||||
isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
|
||||
override val isPrimary: Boolean = symbol.descriptor.isPrimary,
|
||||
isExpect: Boolean = symbol.descriptor.isExpect
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isPrimary: Boolean,
|
||||
isExpect: Boolean
|
||||
) :
|
||||
IrFunctionBase<ConstructorCarrier>(
|
||||
startOffset, endOffset, origin, name,
|
||||
@@ -55,19 +54,17 @@ class IrConstructorImpl(
|
||||
origin: IrDeclarationOrigin,
|
||||
symbol: IrConstructorSymbol,
|
||||
returnType: IrType,
|
||||
body: IrBody? = null
|
||||
descriptor: ClassConstructorDescriptor,
|
||||
name: Name = descriptor.name
|
||||
) : this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name,
|
||||
symbol.descriptor.visibility,
|
||||
returnType,
|
||||
isInline = symbol.descriptor.isInline,
|
||||
isExternal = symbol.descriptor.isEffectivelyExternal(),
|
||||
isPrimary = symbol.descriptor.isPrimary,
|
||||
isExpect = symbol.descriptor.isExpect
|
||||
) {
|
||||
this.body = body
|
||||
}
|
||||
name = name, visibility = descriptor.visibility,
|
||||
returnType = returnType,
|
||||
isInline = descriptor.isInline,
|
||||
isExternal = descriptor.isEffectivelyExternal(),
|
||||
isPrimary = descriptor.isPrimary,
|
||||
isExpect = descriptor.isExpect
|
||||
)
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
|
||||
@@ -230,7 +230,7 @@ class DeclarationStubGenerator(
|
||||
|
||||
val origin = computeOrigin(descriptor)
|
||||
return symbolTable.declareConstructor(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor.original
|
||||
descriptor.original
|
||||
) {
|
||||
IrLazyConstructor(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
|
||||
|
||||
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
|
||||
interface IrProvider {
|
||||
@@ -436,19 +435,8 @@ open class SymbolTable(
|
||||
}
|
||||
|
||||
fun declareConstructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: ClassConstructorDescriptor,
|
||||
constructorFactory: (IrConstructorSymbol) -> IrConstructor = {
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, it,
|
||||
nameProvider.nameForDeclaration(descriptor),
|
||||
returnType = IrUninitializedType
|
||||
).apply {
|
||||
metadata = MetadataSource.Function(it.descriptor)
|
||||
}
|
||||
}
|
||||
constructorFactory: (IrConstructorSymbol) -> IrConstructor
|
||||
): IrConstructor =
|
||||
constructorSymbolTable.declare(
|
||||
descriptor,
|
||||
|
||||
Reference in New Issue
Block a user