| // FILE: 1.kt | |
| package test | |
| interface Run { | |
| fun run(): String | |
| } | |
| inline fun i2(crossinline s: () -> String): Run { | |
| return i1 { | |
| object : Run { | |
| override fun run(): String { | |
| return s() | |
| } | |
| }.run() | |
| } | |
| } | |
| inline fun i1(crossinline s: () -> String): Run { | |
| return object : Run { | |
| override fun run(): String { | |
| return s() | |
| } | |
| } | |
| } | |
| // FILE: 2.kt | |
| import test.* | |
| inline fun i4(crossinline s: () -> String): Run { | |
| return i3 { | |
| object : Run { | |
| override fun run(): String { | |
| return s() | |
| } | |
| }.run() | |
| } | |
| } | |
| inline fun i3(crossinline s: () -> String): Run { | |
| return i2 { | |
| object : Run { | |
| override fun run(): String { | |
| return s() | |
| } | |
| }.run() | |
| } | |
| } | |
| fun box(): String { | |
| val i4 = i4 { "OK" } | |
| return i4.run() | |
| } |