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