Properly calculate shift for default args in enum constructor call

This commit is contained in:
Mikhael Bogdanov
2018-06-04 12:09:31 +02:00
parent 4b8d906e45
commit a53fa4f6f8
@@ -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)