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) {
|
||||
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 ->
|
||||
IrCallImpl.fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
|
||||
else ->
|
||||
|
||||
+2
-2
@@ -279,7 +279,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
||||
}
|
||||
|
||||
private fun createConstructorCall(accessor: IrConstructor, targetSymbol: IrConstructorSymbol) =
|
||||
IrDelegatingConstructorCallImpl(
|
||||
IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||
context.irBuiltIns.unitType,
|
||||
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,
|
||||
origin = oldExpression.origin
|
||||
)
|
||||
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl(
|
||||
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl.fromSymbolOwner(
|
||||
oldExpression.startOffset, oldExpression.endOffset,
|
||||
context.irBuiltIns.unitType,
|
||||
accessorSymbol as IrConstructorSymbol, oldExpression.typeArgumentsCount
|
||||
|
||||
@@ -258,7 +258,7 @@ class BodyGenerator(
|
||||
private fun generateAnySuperConstructorCall(body: IrBlockBody, ktElement: KtPureElement) {
|
||||
val anyConstructor = context.builtIns.any.constructors.single()
|
||||
body.statements.add(
|
||||
IrDelegatingConstructorCallImpl(
|
||||
IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
ktElement.pureStartOffset, ktElement.pureEndOffset,
|
||||
context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceConstructor(anyConstructor)
|
||||
|
||||
@@ -136,7 +136,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
||||
val descriptor = call.descriptor as? ClassConstructorDescriptor
|
||||
?: throw AssertionError("Class constructor expected: ${call.descriptor}")
|
||||
val constructorSymbol = context.symbolTable.referenceConstructor(descriptor.original)
|
||||
val irCall = IrDelegatingConstructorCallImpl(
|
||||
val irCall = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
startOffset, endOffset,
|
||||
context.irBuiltIns.unitType,
|
||||
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.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.allTypeParameters
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
class IrDelegatingConstructorCallImpl(
|
||||
@@ -35,24 +36,28 @@ class IrDelegatingConstructorCallImpl(
|
||||
override val origin: IrStatementOrigin?
|
||||
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 {
|
||||
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) {
|
||||
val anyConstructor = compilerContext.irBuiltIns.anyClass.owner.declarations.single { it is IrConstructor } as IrConstructor
|
||||
with(toBuilder) {
|
||||
+IrDelegatingConstructorCallImpl(
|
||||
+IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
startOffset, endOffset,
|
||||
compilerContext.irBuiltIns.unitType,
|
||||
anyConstructor.symbol
|
||||
|
||||
+2
-2
@@ -121,7 +121,7 @@ class SerializableIrGenerator(
|
||||
?: error("Non-serializable parent of serializable $serializableDescriptor must have no arg constructor")
|
||||
|
||||
|
||||
val call = IrDelegatingConstructorCallImpl(
|
||||
val call = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
startOffset,
|
||||
endOffset,
|
||||
compilerContext.irBuiltIns.unitType,
|
||||
@@ -153,7 +153,7 @@ class SerializableIrGenerator(
|
||||
val arguments = allValueParameters.subList(0, superSlots) +
|
||||
allValueParameters.subList(propertiesStart, propertiesStart + superProperties.size) +
|
||||
allValueParameters.last() // SerializationConstructorMarker
|
||||
val call = IrDelegatingConstructorCallImpl(
|
||||
val call = IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
startOffset,
|
||||
endOffset,
|
||||
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()
|
||||
val primaryCtor = irClass.constructors.find { it.isPrimary }
|
||||
?: throw AssertionError("Serializer class must have primary constructor")
|
||||
+IrDelegatingConstructorCallImpl(
|
||||
+IrDelegatingConstructorCallImpl.fromSymbolDescriptor(
|
||||
startOffset,
|
||||
endOffset,
|
||||
compilerContext.irBuiltIns.unitType,
|
||||
|
||||
Reference in New Issue
Block a user