Properly calculate shift for default args in enum constructor call
This commit is contained in:
+4
-1
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.ir.util.dump
|
|||||||
import org.jetbrains.kotlin.ir.util.render
|
import org.jetbrains.kotlin.ir.util.render
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumClass
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
|
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
|
||||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
||||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
||||||
@@ -231,6 +232,8 @@ class ExpressionCodegen(
|
|||||||
|
|
||||||
callGenerator.beforeValueParametersStart()
|
callGenerator.beforeValueParametersStart()
|
||||||
val defaultMask = DefaultCallArgs(callable.valueParameterTypes.size)
|
val defaultMask = DefaultCallArgs(callable.valueParameterTypes.size)
|
||||||
|
val enumConstructorDefaultArgsShift =
|
||||||
|
if (expression.descriptor is ConstructorDescriptor && isEnumClass(expression.descriptor.containingDeclaration)) 2 else 0
|
||||||
expression.descriptor.valueParameters.forEachIndexed { i, parameterDescriptor ->
|
expression.descriptor.valueParameters.forEachIndexed { i, parameterDescriptor ->
|
||||||
val arg = expression.getValueArgument(i)
|
val arg = expression.getValueArgument(i)
|
||||||
val parameterType = callable.valueParameterTypes[i]
|
val parameterType = callable.valueParameterTypes[i]
|
||||||
@@ -246,7 +249,7 @@ class ExpressionCodegen(
|
|||||||
i,
|
i,
|
||||||
this@ExpressionCodegen
|
this@ExpressionCodegen
|
||||||
)
|
)
|
||||||
defaultMask.mark(i)
|
defaultMask.mark(i - enumConstructorDefaultArgsShift/*TODO switch to separate lower*/)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
assert(parameterDescriptor.varargElementType != null)
|
assert(parameterDescriptor.varargElementType != null)
|
||||||
|
|||||||
Reference in New Issue
Block a user