| // WITH_STDLIB | |
| // WORKS_WHEN_VALUE_CLASS | |
| // NO_CHECK_LAMBDA_INLINING | |
| // FILE: lib.kt | |
| 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" | |
| // FILE: main.kt | |
| 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" | |
| } |