Files
kotlin-fork/compiler/testData/codegen/box/reflection/call/valueClasses/functionsWithMfvcParameters.kt
T
Evgeniy.Zhelenskiy 88f293d4a9 [IR] Support reflection for MFVC
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>

#KT-1179
2023-03-07 21:44:43 +00:00

54 lines
1.6 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM_IR
// WITH_REFLECT
// LANGUAGE: +ValueClasses
import kotlin.test.assertEquals
@JvmInline
value class S(val value1: UInt, val value2: Int) {
operator fun plus(other: S): S = S(this.value1 + other.value1, this.value2 + other.value2)
}
class C {
fun member(x: S, y1: UInt, y2: Int, z: S?): S = x + S(y1, y2) + z!!
}
fun topLevel(x1: UInt, x2: Int, y: S, z: S?): S = S(x1, x2) + y + z!!
fun S.extension1(y: S, z: S?): S = this + y + z!!
fun S?.extension2(y: S, z: S?) = this!! + y + z!!
fun S.extension3_1(): UInt = value1
fun S.extension3_2(): Int = value2
fun S?.extension4_1(): UInt = this!!.value1
fun S?.extension4_2(): Int = this!!.value2
fun box(): String {
val zero = S(0U, 1000)
val one = S(1U, -1)
val two = S(2U, -2)
val four = S(4U, -4)
val seven = S(7U, -7)
assertEquals(seven, C::member.call(C(), one, 2U, -2, four))
assertEquals(seven, ::topLevel.call(1U, -1, two, four))
assertEquals(seven, S::extension1.call(one, two, four))
assertEquals(seven, S::extension2.call(one, two, four))
assertEquals(0U, S::extension3_1.call(zero))
assertEquals(1000, S::extension3_2.call(zero))
assertEquals(0U, S?::extension4_1.call(zero))
assertEquals(1000, S?::extension4_2.call(zero))
assertEquals(seven, C()::member.call(one, 2U, -2, four))
assertEquals(seven, one::extension1.call(two, four))
assertEquals(seven, one::extension2.call(two, four))
assertEquals(0U, zero::extension3_1.call())
assertEquals(1000, zero::extension3_2.call())
assertEquals(0U, zero::extension4_1.call())
assertEquals(1000, zero::extension4_2.call())
return "OK"
}