// IGNORE_BACKEND: JS // SKIP_MANGLE_VERIFICATION interface C { fun foo(a: A): B companion object { inline fun inlinefun(crossinline fooParam: (A) -> B): C { return object : C { override fun foo(a: A) = fooParam(a) } } } } data class A(val s: String) { companion object : C by C.inlinefun( fooParam = { it.s } ) } class OtherB { var a: String? = null } data class B(val a: A?) { companion object : C by C.inlinefun( fooParam = { OtherB().apply { a = it.a?.let(A::foo) } } ) } fun box(): String { val b = B(A("OK")) return B.foo(b).a ?: "fail" }