| // LANGUAGE: +FullValueClasses |
| // CHECK_BYTECODE_LISTING |
| // WORKS_WHEN_VALUE_CLASS |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class InnerInline(val x: Int) { |
| fun f(z: InnerInline) {} |
| fun g(t: FullValue) {} |
| fun h(t1: OuterInline) {} |
| } |
| |
| value class FullValue(val x: InnerInline, val y: InnerInline) { |
| fun f(z: InnerInline) {} |
| fun g(t: FullValue) {} |
| fun h(t1: OuterInline) {} |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class OuterInline(val x: FullValue) { |
| fun f(z: InnerInline) {} |
| fun g(t: FullValue) {} |
| fun h(t1: OuterInline) {} |
| } |
| |
| fun box(): String { |
| val inner1 = InnerInline(1) |
| val inner2 = InnerInline(2) |
| require(inner1.x == 1) |
| require(inner2.x == 2) |
| |
| val full = FullValue(inner1, inner2) |
| require(full.x == inner1) |
| require(full.y == inner2) |
| |
| val outer = OuterInline(full) |
| require(outer.x == full) |
| |
| return "OK" |
| } |