diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 66966251dcb..07a0edfcd82 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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(""), constructor.visibility, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 7e0369aaa15..c34e032998d 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -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 diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt index fce09fc1a99..0be3befeb7c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt @@ -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) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index b0eeadf4414..74b733827ab 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -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( 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) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index c530539fe8f..2656903e9a1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -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, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index c96cb55864b..485e5f214f2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -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,