// ISSUE: KT-66148
// FILE: test.kt
class Controller<E>

fun <E1> generate(block: Controller<E1>.() -> Unit) {
    block(Controller())
}

class A(val r: String)

fun foo(c: Controller<String>): A = A("OK")

fun bar(
    propertyForInvoke: A.() -> Unit,
) {
    generate {
        foo(this).propertyForInvoke()
    }
}

fun box(): String {
    var result = "fail"
    bar {
        result = r
    }

    return result
}

// EXPECTATIONS JVM_IR
// test.kt:22 box
// test.kt:23 box
// test.kt:16 bar
// test.kt:6 generate
// test.kt:3 <init>
// test.kt:6 generate
// EXPECTATIONS ClassicFrontend JVM_IR
// test.kt:17 invoke
// EXPECTATIONS FIR JVM_IR
// test.kt:17 bar$lambda$0
// EXPECTATIONS JVM_IR
// test.kt:11 foo
// test.kt:9 <init>
// test.kt:11 foo
// EXPECTATIONS ClassicFrontend JVM_IR
// test.kt:17 invoke
// test.kt:24 invoke
// EXPECTATIONS FIR JVM_IR
// test.kt:17 bar$lambda$0
// test.kt:24 box$lambda$0
// EXPECTATIONS JVM_IR
// test.kt:9 getR
// EXPECTATIONS ClassicFrontend JVM_IR
// test.kt:24 invoke
// test.kt:25 invoke
// test.kt:17 invoke
// test.kt:18 invoke
// EXPECTATIONS FIR JVM_IR
// test.kt:24 box$lambda$0
// test.kt:25 box$lambda$0
// test.kt:17 bar$lambda$0
// test.kt:18 bar$lambda$0
// EXPECTATIONS JVM_IR
// test.kt:6 generate
// test.kt:7 generate
// test.kt:19 bar
// test.kt:27 box

// EXPECTATIONS JS_IR
// test.kt:22 box
// test.kt:23 box
// test.kt:23 box$lambda
// test.kt:23 box
// test.kt:16 bar
// test.kt:16 bar$lambda
// test.kt:16 bar
// test.kt:6 generate
// test.kt:3 <init>
// test.kt:6 generate
// test.kt:17 bar$lambda$lambda
// test.kt:11 foo
// test.kt:9 <init>
// test.kt:9 <init>
// test.kt:17 bar$lambda$lambda
// test.kt:24 box$lambda$lambda
// test.kt:25 box$lambda$lambda
// test.kt:18 bar$lambda$lambda
// test.kt:7 generate
// test.kt:19 bar
// test.kt:27 box

// EXPECTATIONS WASM
// test.kt:22 $box (17)
// test.kt:23 $box (8, 4)
// test.kt:16 $bar (13, 4)
// test.kt:6 $generate (4, 10)
// test.kt:3 $Controller.<init> (19)
// test.kt:6 $generate (4)
// test.kt:17 $bar$lambda.invoke (18, 12, 8)
// test.kt:11 $foo (36, 38, 36)
// test.kt:9 $A.<init> (8, 22)
// test.kt:11 $foo (43)
// test.kt:17 $bar$lambda.invoke (18)
// test.kt:24 $box$lambda.invoke (8, 17, 8, 18)
// test.kt:25 $box$lambda.invoke (5)
// test.kt:17 $bar$lambda.invoke (18, 37)
// test.kt:18 $bar$lambda.invoke (5)
// test.kt:6 $generate (4)
// test.kt:7 $generate (1)
// test.kt:19 $bar (1)
// test.kt:27 $box (11, 4)
