| // MODULE: m1 |
| // FILE: m1.kt |
| |
| fun interface I { |
| fun f(): String |
| } |
| |
| fun rn(i: I) = i.f() |
| |
| inline fun rnInline(i: I) = i.f() |
| |
| inline fun rnInlineCtor(s: String) = I { s + ".m1" } |
| |
| // MODULE: m2(m1) |
| // FILE: m2.kt |
| |
| fun rn2(f: () -> String) = rn(f) |
| |
| inline fun rn2Inline(noinline f: () -> String) = rnInline(f) |
| |
| inline fun rnInlineCtorProxy(s: String) = rnInlineCtor(s + ".m2").f() |
| |
| fun interface II { |
| fun f(): String |
| } |
| |
| // MODULE: main(m2) |
| // FILE: main.kt |
| |
| fun id(i: II) = i |
| |
| fun box(): String { |
| |
| if (id { "1" }.f() != "1") return "fail 1" |
| |
| if (II { "2" }.f() != "2") return "fail 2" |
| |
| if (rnInlineCtorProxy("3") != "3.m2.m1") return "fail 3" |
| |
| if (rn2Inline { "inline" } != "inline") return "fail 4" |
| |
| return rn2 { "OK" } |
| } |