// FILE: test.kt
class A {
    val z
    by
    Delegate {
        23
    }
}

class Delegate(
    val f: () -> Int
) {
    operator fun getValue(thisRef: Any?, property: Any): Int {
        return f()
    }
}

fun box() {
    val z0 = A().z
}

// EXPECTATIONS ClassicFrontend JVM_IR
// test.kt:19 box
// test.kt:2 <init>
// test.kt:5 <init>
// test.kt:10 <init>
// test.kt:11 <init>
// test.kt:10 <init>
// test.kt:5 <init>
// test.kt:2 <init>
// test.kt:19 box
// test.kt:4 getZ
// test.kt:1 getZ
// test.kt:4 getZ
// test.kt:5 getZ
// test.kt:14 getValue
// test.kt:6 invoke
// test.kt:14 getValue
// test.kt:5 getZ
// test.kt:19 box
// test.kt:20 box

// EXPECTATIONS FIR JVM_IR
// test.kt:19 box
// test.kt:2 <init>
// test.kt:5 <init>
// test.kt:10 <init>
// test.kt:11 <init>
// test.kt:10 <init>
// test.kt:5 <init>
// test.kt:2 <init>
// test.kt:19 box
// test.kt:5 getZ
// test.kt:14 getValue
// test.kt:6 z_delegate$lambda$0
// test.kt:14 getValue
// test.kt:5 getZ
// test.kt:19 box
// test.kt:20 box

// EXPECTATIONS JS_IR
// test.kt:19 box
// test.kt:5 <init>
// test.kt:5 <init>
// test.kt:11 <init>
// test.kt:10 <init>
// test.kt:2 <init>
// test.kt:19 box
// EXPECTATIONS ClassicFrontend JS_IR
// test.kt:4 <get-z>
// EXPECTATIONS FIR JS_IR
// test.kt:5 <get-z>
// EXPECTATIONS JS_IR
// test.kt:5 <get-z>
// test.kt:5 <get-z>
// test.kt:14 getValue
// test.kt:6 A$z$delegate$lambda
// test.kt:20 box

// EXPECTATIONS WASM
// test.kt:19 $box (13)
// test.kt:5 $A.<init> (4)
// test.kt:11 $Delegate.<init> (4)
// test.kt:12 $Delegate.<init> (1)
// test.kt:5 $A.<init> (4)
// test.kt:8 $A.<init> (1)
// test.kt:19 $box (17)
// test.kt:14 $Delegate.getValue (15)
// test.kt:6 $A$z$delegate$lambda.invoke (8, 10)
// test.kt:14 $Delegate.getValue (15, 8)
// test.kt:19 $box (17)
// test.kt:20 $box (1)
