IrDelegatingConstructorCall should have substituted descriptor
This commit is contained in:
@@ -239,6 +239,7 @@ class BodyGenerator(
|
|||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
ktElement.startOffset, ktElement.endOffset,
|
ktElement.startOffset, ktElement.endOffset,
|
||||||
context.symbolTable.referenceConstructor(anyConstructor),
|
context.symbolTable.referenceConstructor(anyConstructor),
|
||||||
|
anyConstructor,
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
|||||||
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(startOffset, endOffset, constructorSymbol, getTypeArguments(call.original))
|
val irCall = IrDelegatingConstructorCallImpl(startOffset, endOffset, constructorSymbol, descriptor, getTypeArguments(call.original))
|
||||||
irCall.dispatchReceiver = dispatchReceiver?.load()
|
irCall.dispatchReceiver = dispatchReceiver?.load()
|
||||||
irCall.extensionReceiver = extensionReceiver?.load()
|
irCall.extensionReceiver = extensionReceiver?.load()
|
||||||
addParametersToCall(startOffset, endOffset, call, irCall, descriptor.builtIns.unitType)
|
addParametersToCall(startOffset, endOffset, call, irCall, descriptor.builtIns.unitType)
|
||||||
|
|||||||
+2
-2
@@ -29,6 +29,7 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
|
override val descriptor: ClassConstructorDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||||
) : IrDelegatingConstructorCall,
|
) : IrDelegatingConstructorCall,
|
||||||
IrCallWithIndexedArgumentsBase(
|
IrCallWithIndexedArgumentsBase(
|
||||||
@@ -46,10 +47,9 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||||
) : this(startOffset, endOffset,
|
) : this(startOffset, endOffset,
|
||||||
IrConstructorSymbolImpl(constructorDescriptor),
|
IrConstructorSymbolImpl(constructorDescriptor),
|
||||||
|
constructorDescriptor,
|
||||||
typeArguments)
|
typeArguments)
|
||||||
|
|
||||||
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
|
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -356,6 +356,7 @@ class DeepCopyIrTree(private val symbolsRemapper: DeepCopySymbolsRemapper) : IrE
|
|||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
symbolsRemapper.getReferencedConstructor(expression.symbol),
|
symbolsRemapper.getReferencedConstructor(expression.symbol),
|
||||||
|
expression.descriptor,
|
||||||
expression.getTypeArgumentsMap()
|
expression.getTypeArgumentsMap()
|
||||||
).transformValueArguments(expression)
|
).transformValueArguments(expression)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
FILE /typeAliasCtorForGenericClass.kt
|
FILE /typeAliasCtorForGenericClass.kt
|
||||||
CLASS CLASS A
|
CLASS CLASS A
|
||||||
|
$new: VALUE_PARAMETER this@A: A<Q>
|
||||||
|
TYPE_PARAMETER <Q>
|
||||||
CONSTRUCTOR public constructor A<Q>(q: Q)
|
CONSTRUCTOR public constructor A<Q>(q: Q)
|
||||||
|
VALUE_PARAMETER value-parameter q: Q
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
|
DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='A'
|
INSTANCE_INITIALIZER_CALL classDescriptor='A'
|
||||||
@@ -9,10 +12,14 @@ FILE /typeAliasCtorForGenericClass.kt
|
|||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
GET_VAR 'value-parameter q: Q' type=Q origin=INITIALIZE_PROPERTY_FROM_PARAMETER
|
GET_VAR 'value-parameter q: Q' type=Q origin=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR public final fun <get-q>(): Q
|
FUN DEFAULT_PROPERTY_ACCESSOR public final fun <get-q>(): Q
|
||||||
|
$this: VALUE_PARAMETER this@A: A<Q>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='<get-q>(): Q'
|
RETURN type=kotlin.Nothing from='<get-q>(): Q'
|
||||||
GET_FIELD 'q: Q' type=Q origin=null
|
GET_FIELD 'q: Q' type=Q origin=null
|
||||||
receiver: GET_VAR '<receiver: A>' type=A<Q> origin=null
|
receiver: GET_VAR 'this@A: A<Q>' type=A<Q> origin=null
|
||||||
|
FUN FAKE_OVERRIDE public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||||
|
FUN FAKE_OVERRIDE public open override fun hashCode(): kotlin.Int
|
||||||
|
FUN FAKE_OVERRIDE public open override fun toString(): kotlin.String
|
||||||
TYPEALIAS typealias B = A<X> type=A<X>
|
TYPEALIAS typealias B = A<X> type=A<X>
|
||||||
TYPEALIAS typealias B2 = A<A<T>> type=A<A<T>>
|
TYPEALIAS typealias B2 = A<A<T>> type=A<A<T>>
|
||||||
FUN public fun bar(): kotlin.Unit
|
FUN public fun bar(): kotlin.Unit
|
||||||
|
|||||||
Reference in New Issue
Block a user