IrDelegatingConstructorCall should have substituted descriptor

This commit is contained in:
Dmitry Petrov
2017-04-21 12:10:38 +03:00
parent 6e79709ef1
commit 6f2c8140cf
5 changed files with 13 additions and 4 deletions
@@ -239,6 +239,7 @@ class BodyGenerator(
IrDelegatingConstructorCallImpl(
ktElement.startOffset, ktElement.endOffset,
context.symbolTable.referenceConstructor(anyConstructor),
anyConstructor,
null
)
)
@@ -103,7 +103,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
val descriptor = call.descriptor as? ClassConstructorDescriptor
?: throw AssertionError("Class constructor expected: ${call.descriptor}")
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.extensionReceiver = extensionReceiver?.load()
addParametersToCall(startOffset, endOffset, call, irCall, descriptor.builtIns.unitType)
@@ -29,6 +29,7 @@ class IrDelegatingConstructorCallImpl(
startOffset: Int,
endOffset: Int,
override val symbol: IrConstructorSymbol,
override val descriptor: ClassConstructorDescriptor,
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
) : IrDelegatingConstructorCall,
IrCallWithIndexedArgumentsBase(
@@ -46,10 +47,9 @@ class IrDelegatingConstructorCallImpl(
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
) : this(startOffset, endOffset,
IrConstructorSymbolImpl(constructorDescriptor),
constructorDescriptor,
typeArguments)
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitDelegatingConstructorCall(this, data)
}
@@ -356,6 +356,7 @@ class DeepCopyIrTree(private val symbolsRemapper: DeepCopySymbolsRemapper) : IrE
IrDelegatingConstructorCallImpl(
expression.startOffset, expression.endOffset,
symbolsRemapper.getReferencedConstructor(expression.symbol),
expression.descriptor,
expression.getTypeArgumentsMap()
).transformValueArguments(expression)
@@ -1,6 +1,9 @@
FILE /typeAliasCtorForGenericClass.kt
CLASS CLASS A
$new: VALUE_PARAMETER this@A: A<Q>
TYPE_PARAMETER <Q>
CONSTRUCTOR public constructor A<Q>(q: Q)
VALUE_PARAMETER value-parameter q: Q
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
INSTANCE_INITIALIZER_CALL classDescriptor='A'
@@ -9,10 +12,14 @@ FILE /typeAliasCtorForGenericClass.kt
EXPRESSION_BODY
GET_VAR 'value-parameter q: Q' type=Q origin=INITIALIZE_PROPERTY_FROM_PARAMETER
FUN DEFAULT_PROPERTY_ACCESSOR public final fun <get-q>(): Q
$this: VALUE_PARAMETER this@A: A<Q>
BLOCK_BODY
RETURN type=kotlin.Nothing from='<get-q>(): Q'
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 B2 = A<A<T>> type=A<A<T>>
FUN public fun bar(): kotlin.Unit