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.visitors.IrElementVisitor
|
||||
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.inline.InlineUtil
|
||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
||||
@@ -231,6 +232,8 @@ class ExpressionCodegen(
|
||||
|
||||
callGenerator.beforeValueParametersStart()
|
||||
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 ->
|
||||
val arg = expression.getValueArgument(i)
|
||||
val parameterType = callable.valueParameterTypes[i]
|
||||
@@ -246,7 +249,7 @@ class ExpressionCodegen(
|
||||
i,
|
||||
this@ExpressionCodegen
|
||||
)
|
||||
defaultMask.mark(i)
|
||||
defaultMask.mark(i - enumConstructorDefaultArgsShift/*TODO switch to separate lower*/)
|
||||
}
|
||||
else -> {
|
||||
assert(parameterDescriptor.varargElementType != null)
|
||||
|
||||
Reference in New Issue
Block a user