210 lines
3.8 KiB
Kotlin
Vendored
210 lines
3.8 KiB
Kotlin
Vendored
// WITH_STDLIB
|
|
// WORKS_WHEN_VALUE_CLASS
|
|
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class SingleInitBlock<T: String>(val s: T) {
|
|
init {
|
|
res = s
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class MultipleInitBlocks<T>(val a: T) {
|
|
init {
|
|
res = "O"
|
|
}
|
|
init {
|
|
res += "K"
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class MultipleInitBlocks2<T: Any>(val a: T?) {
|
|
init {
|
|
res = "O"
|
|
}
|
|
init {
|
|
res += "K"
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class Lambda<T: String>(val s: T) {
|
|
init {
|
|
val lambda = { res = s }
|
|
lambda()
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class FunLiteral<T: String>(val s: T) {
|
|
init {
|
|
val funLiteral = fun() {
|
|
res = s
|
|
}
|
|
funLiteral()
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class ObjectLiteral<T: String>(val s: T) {
|
|
init {
|
|
val objectLiteral = object {
|
|
fun run() {
|
|
res = s
|
|
}
|
|
}
|
|
objectLiteral.run()
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class LocalFunction<T: String>(val s: T) {
|
|
init {
|
|
fun local() {
|
|
res = s
|
|
}
|
|
local()
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class LocalClass<T: String>(val s: T) {
|
|
init {
|
|
class Local {
|
|
fun run() {
|
|
res = s
|
|
}
|
|
}
|
|
Local().run()
|
|
}
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class Getter<T: String>(val s: T) {
|
|
init {
|
|
res = ok
|
|
}
|
|
|
|
val ok: String
|
|
get() = s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class GetterThis<T: String>(val s: T) {
|
|
init {
|
|
res = this.ok
|
|
}
|
|
|
|
val ok: String
|
|
get() = s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class Method<T: String>(val s: T) {
|
|
init {
|
|
res = ok(this)
|
|
}
|
|
|
|
fun ok(m: Method<T>): String = m.s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class MethodThis<T: String>(val s: T) {
|
|
init {
|
|
res = this.ok(this)
|
|
}
|
|
|
|
fun ok(m: MethodThis<T>): String = m.s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class InlineFun<T: String>(val s: T) {
|
|
init {
|
|
res = ok()
|
|
}
|
|
|
|
inline fun ok(): String = s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class InlineFunThis<T: String>(val s: T) {
|
|
init {
|
|
res = this.ok()
|
|
}
|
|
|
|
inline fun ok(): String = s
|
|
}
|
|
|
|
OPTIONAL_JVM_INLINE_ANNOTATION
|
|
value class InlineClass<T: String>(val s: T) {
|
|
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 22"
|
|
MultipleInitBlocks2(null)
|
|
if (res != "OK") return "FAIL 221: $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"
|
|
} |