// LANGUAGE: +ContextReceivers
// TARGET_BACKEND: JVM_IR
// WITH_STDLIB
// WITH_COROUTINES
// JVM_ABI_K1_K2_DIFF: different order of function annotations

class InContext
class MyReciever {
    public suspend fun MyOutput.innerFun(): Int = 123
}
class MyOutput

// 2 - Declare the caller that calls the suspended function in a context
public fun caller(block: suspend context(InContext) MyReciever.() -> Int): MyOutput = MyOutput()

fun box(): String {
    val out1 = caller {  MyOutput().innerFun() }
    val out2 = with (InContext()) { caller {  MyOutput().innerFun() } }
    val out3 = caller { with (InContext()) { MyOutput().innerFun() } }
    return "OK"
}