| // WITH_STDLIB |
| // WORKS_WHEN_VALUE_CLASS |
| // LANGUAGE: +ValueClasses |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class SingleInitBlock(val s: String) { |
| init { |
| res = s |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class MultipleInitBlocks(val a: Any?) { |
| init { |
| res = "O" |
| } |
| init { |
| res += "K" |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class Lambda(val s: String) { |
| init { |
| val lambda = { res = s } |
| lambda() |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class FunLiteral(val s: String) { |
| init { |
| val funLiteral = fun() { |
| res = s |
| } |
| funLiteral() |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class ObjectLiteral(val s: String) { |
| init { |
| val objectLiteral = object { |
| fun run() { |
| res = s |
| } |
| } |
| objectLiteral.run() |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class LocalFunction(val s: String) { |
| init { |
| fun local() { |
| res = s |
| } |
| local() |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class LocalClass(val s: String) { |
| init { |
| class Local { |
| fun run() { |
| res = s |
| } |
| } |
| Local().run() |
| } |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class Getter(val s: String) { |
| init { |
| res = ok |
| } |
| |
| val ok: String |
| get() = s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class GetterThis(val s: String) { |
| init { |
| res = this.ok |
| } |
| |
| val ok: String |
| get() = s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class Method(val s: String) { |
| init { |
| res = ok(this) |
| } |
| |
| fun ok(m: Method): String = m.s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class MethodThis(val s: String) { |
| init { |
| res = this.ok(this) |
| } |
| |
| fun ok(m: MethodThis): String = m.s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class InlineFun(val s: String) { |
| init { |
| res = ok() |
| } |
| |
| inline fun ok(): String = s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class InlineFunThis(val s: String) { |
| init { |
| res = this.ok() |
| } |
| |
| inline fun ok(): String = s |
| } |
| |
| OPTIONAL_JVM_INLINE_ANNOTATION |
| value class InlineClass(val s: String) { |
| init { |
| SingleInitBlock(s) |
| } |
| } |
| |
| var res: String = "FAIL" |
| |
| fun box(): String { |
| SingleInitBlock("OK") |
| if (res != "OK") return "FAIL 1: $res" |
| |
| res = "FAIL 2" |
| MultipleInitBlocks(null) |
| if (res != "OK") return "FAIL 21: $res" |
| |
| res = "FAIL 3" |
| Lambda("OK") |
| if (res != "OK") return "FAIL 31: $res" |
| |
| res = "FAIL 4" |
| FunLiteral("OK") |
| if (res != "OK") return "FAIL 41: $res" |
| |
| res = "FAIL 5" |
| ObjectLiteral("OK") |
| if (res != "OK") return "FAIL 51: $res" |
| |
| res = "FAIL 6" |
| LocalFunction("OK") |
| if (res != "OK") return "FAIL 61: $res" |
| |
| res = "FAIL 7" |
| LocalClass("OK") |
| if (res != "OK") return "FAIL 71: $res" |
| |
| res = "FAIL 8" |
| Getter("OK") |
| if (res != "OK") return "FAIL 81: $res" |
| |
| res = "FAIL 9" |
| GetterThis("OK") |
| if (res != "OK") return "FAIL 91: $res" |
| |
| res = "FAIL 10" |
| Method("OK") |
| if (res != "OK") return "FAIL 101: $res" |
| |
| res = "FAIL 11" |
| MethodThis("OK") |
| if (res != "OK") return "FAIL 111: $res" |
| |
| res = "FAIL 12" |
| InlineFun("OK") |
| if (res != "OK") return "FAIL 121: $res" |
| |
| res = "FAIL 13" |
| InlineFunThis("OK") |
| if (res != "OK") return "FAIL 131: $res" |
| |
| res = "FAIL 14" |
| InlineClass("OK") |
| if (res != "OK") return "FAIL 141: $res" |
| |
| return "OK" |
| } |