IR: IrDelegatingConstructorCall.fromSymbolDescriptor
This commit is contained in:
+3
-1
@@ -58,7 +58,9 @@ private class JvmOverloadsAnnotationLowering(val context: JvmBackendContext) : C
|
|||||||
|
|
||||||
val call = when (target) {
|
val call = when (target) {
|
||||||
is IrConstructor ->
|
is IrConstructor ->
|
||||||
IrDelegatingConstructorCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol)
|
IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol
|
||||||
|
)
|
||||||
is IrSimpleFunction ->
|
is IrSimpleFunction ->
|
||||||
IrCallImpl.fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
|
IrCallImpl.fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
|
||||||
else ->
|
else ->
|
||||||
|
|||||||
+2
-2
@@ -279,7 +279,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createConstructorCall(accessor: IrConstructor, targetSymbol: IrConstructorSymbol) =
|
private fun createConstructorCall(accessor: IrConstructor, targetSymbol: IrConstructorSymbol) =
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
targetSymbol, targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
|
targetSymbol, targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
|
||||||
@@ -418,7 +418,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
accessorSymbol as IrSimpleFunctionSymbol, oldExpression.typeArgumentsCount,
|
accessorSymbol as IrSimpleFunctionSymbol, oldExpression.typeArgumentsCount,
|
||||||
origin = oldExpression.origin
|
origin = oldExpression.origin
|
||||||
)
|
)
|
||||||
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl(
|
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||||
oldExpression.startOffset, oldExpression.endOffset,
|
oldExpression.startOffset, oldExpression.endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
accessorSymbol as IrConstructorSymbol, oldExpression.typeArgumentsCount
|
accessorSymbol as IrConstructorSymbol, oldExpression.typeArgumentsCount
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ class BodyGenerator(
|
|||||||
private fun generateAnySuperConstructorCall(body: IrBlockBody, ktElement: KtPureElement) {
|
private fun generateAnySuperConstructorCall(body: IrBlockBody, ktElement: KtPureElement) {
|
||||||
val anyConstructor = context.builtIns.any.constructors.single()
|
val anyConstructor = context.builtIns.any.constructors.single()
|
||||||
body.statements.add(
|
body.statements.add(
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
ktElement.pureStartOffset, ktElement.pureEndOffset,
|
ktElement.pureStartOffset, ktElement.pureEndOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
context.symbolTable.referenceConstructor(anyConstructor)
|
context.symbolTable.referenceConstructor(anyConstructor)
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
val descriptor = call.descriptor as? ClassConstructorDescriptor
|
val descriptor = call.descriptor as? ClassConstructorDescriptor
|
||||||
?: throw AssertionError("Class constructor expected: ${call.descriptor}")
|
?: throw AssertionError("Class constructor expected: ${call.descriptor}")
|
||||||
val constructorSymbol = context.symbolTable.referenceConstructor(descriptor.original)
|
val constructorSymbol = context.symbolTable.referenceConstructor(descriptor.original)
|
||||||
val irCall = IrDelegatingConstructorCallImpl(
|
val irCall = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
constructorSymbol
|
constructorSymbol
|
||||||
|
|||||||
+22
-17
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|||||||
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
||||||
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.util.allTypeParameters
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
class IrDelegatingConstructorCallImpl(
|
class IrDelegatingConstructorCallImpl(
|
||||||
@@ -35,24 +36,28 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
override val origin: IrStatementOrigin?
|
override val origin: IrStatementOrigin?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
|
||||||
constructor(
|
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
type: IrType,
|
|
||||||
symbol: IrConstructorSymbol
|
|
||||||
) : this(startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size)
|
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
|
||||||
constructor(
|
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
type: IrType,
|
|
||||||
symbol: IrConstructorSymbol,
|
|
||||||
typeArgumentsCount: Int
|
|
||||||
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
|
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitDelegatingConstructorCall(this, data)
|
return visitor.visitDelegatingConstructorCall(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@ObsoleteDescriptorBasedAPI
|
||||||
|
fun fromSymbolDescriptor(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
type: IrType,
|
||||||
|
symbol: IrConstructorSymbol,
|
||||||
|
typeArgumentsCount: Int = symbol.descriptor.typeParametersCount,
|
||||||
|
valueArgumentsCount: Int = symbol.descriptor.valueParameters.size
|
||||||
|
) = IrDelegatingConstructorCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount)
|
||||||
|
|
||||||
|
fun fromSymbolOwner(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
type: IrType,
|
||||||
|
symbol: IrConstructorSymbol,
|
||||||
|
typeArgumentsCount: Int = symbol.owner.allTypeParameters.size,
|
||||||
|
valueArgumentsCount: Int = symbol.owner.valueParameters.size
|
||||||
|
) = IrDelegatingConstructorCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, valueArgumentsCount)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -210,7 +210,7 @@ interface IrBuilderExtension {
|
|||||||
fun IrBuilderWithScope.generateAnySuperConstructorCall(toBuilder: IrBlockBodyBuilder) {
|
fun IrBuilderWithScope.generateAnySuperConstructorCall(toBuilder: IrBlockBodyBuilder) {
|
||||||
val anyConstructor = compilerContext.irBuiltIns.anyClass.owner.declarations.single { it is IrConstructor } as IrConstructor
|
val anyConstructor = compilerContext.irBuiltIns.anyClass.owner.declarations.single { it is IrConstructor } as IrConstructor
|
||||||
with(toBuilder) {
|
with(toBuilder) {
|
||||||
+IrDelegatingConstructorCallImpl(
|
+IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
anyConstructor.symbol
|
anyConstructor.symbol
|
||||||
|
|||||||
+2
-2
@@ -121,7 +121,7 @@ class SerializableIrGenerator(
|
|||||||
?: error("Non-serializable parent of serializable $serializableDescriptor must have no arg constructor")
|
?: error("Non-serializable parent of serializable $serializableDescriptor must have no arg constructor")
|
||||||
|
|
||||||
|
|
||||||
val call = IrDelegatingConstructorCallImpl(
|
val call = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
@@ -153,7 +153,7 @@ class SerializableIrGenerator(
|
|||||||
val arguments = allValueParameters.subList(0, superSlots) +
|
val arguments = allValueParameters.subList(0, superSlots) +
|
||||||
allValueParameters.subList(propertiesStart, propertiesStart + superProperties.size) +
|
allValueParameters.subList(propertiesStart, propertiesStart + superProperties.size) +
|
||||||
allValueParameters.last() // SerializationConstructorMarker
|
allValueParameters.last() // SerializationConstructorMarker
|
||||||
val call = IrDelegatingConstructorCallImpl(
|
val call = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
|
|||||||
+1
-1
@@ -165,7 +165,7 @@ open class SerializerIrGenerator(val irClass: IrClass, final override val compil
|
|||||||
// generate call to primary ctor to init serialClassDesc and super()
|
// generate call to primary ctor to init serialClassDesc and super()
|
||||||
val primaryCtor = irClass.constructors.find { it.isPrimary }
|
val primaryCtor = irClass.constructors.find { it.isPrimary }
|
||||||
?: throw AssertionError("Serializer class must have primary constructor")
|
?: throw AssertionError("Serializer class must have primary constructor")
|
||||||
+IrDelegatingConstructorCallImpl(
|
+IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
|
|||||||
Reference in New Issue
Block a user