Supported empty vararg parameter in inline function call

This commit is contained in:
Igor Chevdar
2017-04-03 17:28:43 +03:00
parent 492187cb4c
commit 8d5ec79192
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeProjectionImpl import org.jetbrains.kotlin.types.TypeProjectionImpl
import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue
import org.jetbrains.kotlin.types.typeUtil.makeNullable import org.jetbrains.kotlin.types.typeUtil.makeNullable
//-----------------------------------------------------------------------------// //-----------------------------------------------------------------------------//
@@ -132,11 +133,17 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
descriptor.valueParameters.forEach { parameter -> descriptor.valueParameters.forEach { parameter ->
val argument = irCall.getValueArgument(parameter.index) val argument = irCall.getValueArgument(parameter.index)
if (argument != null) { when {
result += ArgumentWithValue(parameter, argument) argument != null -> result += ArgumentWithValue(parameter, argument)
} else { parameter.hasDefaultValue() -> {
val defaultArgument = declaration.getDefault(parameter)!!.expression val defaultArgument = declaration.getDefault(parameter)!!.expression
result += ArgumentWithValue(parameter, defaultArgument) result += ArgumentWithValue(parameter, defaultArgument)
}
parameter.varargElementType != null -> {
val emptyArray = IrVarargImpl(irCall.startOffset, irCall.endOffset, parameter.type, parameter.varargElementType!!)
result += ArgumentWithValue(parameter, emptyArray)
}
else -> throw Error("Incomplete expression: call to $descriptor has no argument at index ${parameter.index}")
} }
} }