| // NO_CHECK_LAMBDA_INLINING | |
| // KJS_WITH_FULL_RUNTIME | |
| // See KT-11711 | |
| // FILE: lib.kt | |
| package foo | |
| import kotlin.test.* | |
| inline fun <T> buzz(x: T): T { | |
| log("buzz($x)") | |
| return x | |
| } | |
| // CHECK_NOT_CALLED: buzz | |
| private var LOG = "" | |
| fun log(string: String) { | |
| LOG += "$string;" | |
| } | |
| fun pullLog(): String { | |
| val string = LOG | |
| LOG = "" | |
| return string | |
| } | |
| val g: Any? | |
| get() { | |
| log("g.get") | |
| return "c" | |
| } | |
| inline fun foo(): Any? { | |
| log("foo()") | |
| return g; | |
| } | |
| inline fun bar(): Any? { | |
| return g; | |
| } | |
| inline fun baz(): Any? { | |
| return log("baz()"); | |
| } | |
| inline fun boo(a: Any?): Any? { | |
| return log("boo()"); | |
| } | |
| // FILE: main.kt | |
| package foo | |
| import kotlin.test.* | |
| // CHECK_NOT_CALLED: buzz | |
| fun <T> fizz(x: T): T { | |
| log("fizz($x)") | |
| return x | |
| } | |
| interface A { | |
| val b: B | |
| } | |
| interface B { | |
| fun c(a: Any?) | |
| } | |
| val a: A | |
| get() { | |
| log("a.get") | |
| return object : A { | |
| override val b: B | |
| get() { | |
| log("b.get") | |
| return object : B { | |
| override fun c(a: Any?) { | |
| log("c()") | |
| } | |
| } | |
| } | |
| } | |
| } | |
| fun box(): String { | |
| log("--1--") | |
| a.b.c(g) | |
| log("--2--") | |
| a.b.c(foo()) | |
| log("--3--") | |
| a.b.c(bar()) | |
| log("--4--") | |
| a.b.c(baz()) | |
| log("--5--") | |
| a.b.c(boo(g)) | |
| assertEquals("""--1-- | |
| a.get | |
| b.get | |
| g.get | |
| c() | |
| --2-- | |
| a.get | |
| b.get | |
| foo() | |
| g.get | |
| c() | |
| --3-- | |
| a.get | |
| b.get | |
| g.get | |
| c() | |
| --4-- | |
| a.get | |
| b.get | |
| baz() | |
| c() | |
| --5-- | |
| a.get | |
| b.get | |
| g.get | |
| boo() | |
| c() | |
| """, pullLog().replace(';', '\n')) | |
| return "OK" | |
| } |