mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-09 08:31:29 +00:00
93 lines
2.9 KiB
Kotlin
Vendored
93 lines
2.9 KiB
Kotlin
Vendored
// IGNORE_BACKEND: JVM_IR
|
|
// TODO KT-36814 Support optimized delegated properties in JVM_IR
|
|
|
|
// MODULE: lib
|
|
// FILE: lib.kt
|
|
package lib
|
|
|
|
class Provider<T>(val _value: T) {
|
|
inline operator fun provideDelegate(thisRef: Any?, kProperty: Any?) =
|
|
Mut(_value)
|
|
}
|
|
|
|
class Mut<T>(var _value: T) {
|
|
|
|
inline operator fun getValue(thisRef: Any?, kProperty: Any?) = _value
|
|
|
|
inline operator fun setValue(thisRef: Any?, kProperty: Any?, newValue: T) {
|
|
_value = newValue
|
|
}
|
|
}
|
|
|
|
// MODULE: main(lib)(lib)
|
|
// FILE: main.kt
|
|
import lib.*
|
|
|
|
class C {
|
|
val delegatedVal by Mut(1)
|
|
var delegatedVar by Mut(2)
|
|
val delegatedValByProvider by Provider(1)
|
|
var delegatedVarByProvider by Provider(2)
|
|
}
|
|
|
|
val topLevelDelegatedVal by Mut(1)
|
|
var topLevelDelegatedVar by Mut(2)
|
|
val topLevelDelegatedValByProvider by Provider(1)
|
|
var topLevelDelegatedVarByProvider by Provider(2)
|
|
|
|
fun box(): String {
|
|
val localDelegatedVal by Mut(1)
|
|
var localDelegatedVar by Mut(2)
|
|
val localDelegatedValByProvider by Provider(1)
|
|
var localDelegatedVarByProvider by Provider(1)
|
|
|
|
val x = C()
|
|
if (x.delegatedVal != 1) throw AssertionError()
|
|
if (x.delegatedVar != 2) throw AssertionError()
|
|
x.delegatedVar = 3
|
|
if (x.delegatedVar != 3) throw AssertionError()
|
|
|
|
if (x.delegatedValByProvider != 1) throw AssertionError()
|
|
if (x.delegatedVarByProvider != 2) throw AssertionError()
|
|
x.delegatedVarByProvider = 3
|
|
if (x.delegatedVarByProvider != 3) throw AssertionError()
|
|
|
|
if (topLevelDelegatedVal != 1) throw AssertionError()
|
|
if (topLevelDelegatedVar != 2) throw AssertionError()
|
|
topLevelDelegatedVar = 3
|
|
if (topLevelDelegatedVar != 3) throw AssertionError()
|
|
|
|
if (topLevelDelegatedValByProvider != 1) throw AssertionError()
|
|
if (topLevelDelegatedVarByProvider != 2) throw AssertionError()
|
|
topLevelDelegatedVarByProvider = 3
|
|
if (topLevelDelegatedVarByProvider != 3) throw AssertionError()
|
|
|
|
if (localDelegatedVal != 1) throw AssertionError()
|
|
if (localDelegatedVar != 2) throw AssertionError()
|
|
localDelegatedVar = 3
|
|
if (localDelegatedVar != 3) throw AssertionError()
|
|
|
|
if (localDelegatedValByProvider != 1) throw AssertionError()
|
|
if (localDelegatedVarByProvider != 2) throw AssertionError()
|
|
localDelegatedVarByProvider = 3
|
|
if (localDelegatedVarByProvider != 3) throw AssertionError()
|
|
|
|
return "OK"
|
|
}
|
|
|
|
// @MainKt.class:
|
|
// 0 \$\$delegatedProperties
|
|
// 0 ANEWARRAY
|
|
// 0 kotlin/reflect/KProperty
|
|
// 0 final static synthetic \[Lkotlin/reflect/KProperty; \$\$delegatedProperties
|
|
// 0 kotlin/jvm/internal/PropertyReference0Impl\.\<init\>
|
|
// 0 kotlin/jvm/internal/MutablePropertyReference0Impl\.\<init\>
|
|
|
|
// @C.class:
|
|
// 0 \$\$delegatedProperties
|
|
// 0 ANEWARRAY
|
|
// 0 kotlin/reflect/KProperty
|
|
// 0 final static synthetic \[Lkotlin/reflect/KProperty; \$\$delegatedProperties
|
|
// 0 kotlin/jvm/internal/PropertyReference0Impl\.\<init\>
|
|
// 0 kotlin/jvm/internal/MutablePropertyReference0Impl\.\<init\>
|