// CHECK_BYTECODE_LISTING // WITH_STDLIB // TARGET_BACKEND: JVM_IR // WORKS_WHEN_VALUE_CLASS // LANGUAGE: +ValueClasses @JvmInline value class A(val x: List) @JvmInline value class B(val x: UInt) @JvmInline value class C(val x: Int, val y: B, val z: String = "3") @JvmInline value class D(val x: C) { constructor(x: Int, y: UInt, z: Int) : this(C(x, B(y), z.toString())) init { println(x.x) } } inline fun inlined(x: Int, y: UInt, z: Int): D { return D(C(x, B(y), z.toString())) } fun notInlined(x: Int, y: UInt, z: Int) = D(C(x, B(y), z.toString())) @JvmInline value class E(val x: D) { var withNonTrivialSetters: D get() = TODO() set(_) = TODO() } interface Base3 { val z: E } @JvmInline value class R(val x: Int, val y: UInt, override val z: E, val t: A): Base1, Base3 fun > f(r: R) { println(r) println(r.x) println(r.y) println(r.z) println(r.t) println(r.t.x) println(r.z.x) println(r.z.x.x) println(r.z.x.x.x) println(r.z.x.x.y) println(r.z.x.x.z) println(r.z.x.x.y.x) } fun g(e: E) { } fun > h(r: R) { g(r.z) f(r) r C(2, B(3U), "") // todo fix box D(C(2, B(3U), "")) val x = D(C(2, B(3U), "")) var y = D(C(4, B(5U), "1")) println(y) y = D(C(6, B(7U), "2")) y = D(6, 7U, 2) y = inlined(6, 7U, 2) y = notInlined(6, 7U, 2) println(y) } fun h1() { var y = inlined(1, 2U, 3) // todo fix box println(y) y = inlined(4, 5U, 6) println(y) } interface Base1 { val fakeOverrideMFVC: R> get() = TODO() val fakeOverrideRegular: Int get() = TODO() } interface Base2 { var l: R> } interface Base4 { var l: T } class NotInlined(override var l: R>, var y: Int): Base1, Base2, Base4>> { override fun toString(): String = l.toString() + l.z.x.x.z init { l = l } fun trySetter() { l = l } var withNonTrivialSetters: R> get() = TODO() set(_) = TODO() var withNonTrivialSettersWithBF: R> = l get() { println("1") field field.t field == field return field } set(value) { println("3") field = value field = field println("4") } val withNonTrivialGettersWithBF: R> = l get() { println("1") field field.t field == field return field } } fun testVars(x: NotInlined) { x.l.toString() var y = x.l y.toString() y = x.l println(y) x.l = x.l x.l = R>(x.l.x, x.l.y, x.l.z, x.l.t) } fun reuseBoxed(list: MutableList>>) { list.add(list.last()) } // todo add default parameters fun box() = "bad"//.also { h(R(1, 2U, E(D(C(3, B(4U), "5"))), A(listOf(listOf(6))))) }