diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt index af38f47306e..9f256296e3c 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt @@ -253,7 +253,7 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map val valueParametersSymbols = receiverAsFirstArgument + irFunction.valueParameters.map { it.symbol } val valueArguments = (0 until expression.valueArgumentsCount).map { expression.getValueArgument(it) } - val defaultValues = expression.symbol.owner.valueParameters.map { it.defaultValue?.expression } + val defaultValues = irFunction.valueParameters.map { it.defaultValue?.expression } return stack.newFrame(asSubFrame = true, initPool = pool) { for (i in valueArguments.indices) { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index d4d2d3daf7d..30ea29049cd 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -181,6 +181,16 @@ internal fun getTypeArguments( ?.let { typeArguments.add(Variable(it.symbol, expression.type.getState())) } } + fun IrSimpleType.getArgumentsRecursive() { + val typeParameters = this.classOrNull?.owner?.typeParameters ?: return + typeParameters.zip(this.arguments).forEach { + it.second.typeOrNull?.classOrNull?.owner?.let { owner -> typeArguments.add(Variable(it.first.symbol, Common(owner))) } + } + this.classOrNull!!.superTypes().forEach { (it as? IrSimpleType)?.getArgumentsRecursive() } + } + + (container as? IrClass)?.superTypes?.forEach { (it as? IrSimpleType)?.getArgumentsRecursive() } + return typeArguments }