| // 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\> |