| // FILE: 1.kt |
| |
| class My(val value: Int) |
| |
| inline fun <T, R> T.perform(job: (T)-> R) : R { |
| return job(this) |
| } |
| |
| // FILE: 2.kt |
| |
| fun test1() : Int { |
| val inlineX = My(111) |
| |
| return inlineX.perform<My, Int>{ |
| |
| val outX = My(1111111) |
| outX.perform<My, Int>( |
| {inlineX.value} |
| ) |
| } |
| } |
| |
| inline fun My.execute(): Int { |
| return perform { this.value } |
| } |
| |
| fun test2(): Int { |
| val inlineX = My(11) |
| |
| return inlineX.execute() |
| } |
| |
| fun box(): String { |
| if (test1() != 111) return "test1: ${test1()}" |
| if (test2() != 11) return "test2: ${test2()}" |
| |
| return "OK" |
| } |