== A == class A { companion object } --------------------- L0: 1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == B == object B { val A.Companion.foo: X get() = X } --------------------- L0: 1 v(val A.Companion.foo: X get() = X) L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == X == object X --------------------- L0: 1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == C == object C { operator fun X.invoke() = println("Hello!") } --------------------- L0: 1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == invoke == operator fun X.invoke() = println("Hello!") --------------------- L0: 1 mark("Hello!") r("Hello!") -> mark(println("Hello!")) magic[UNRESOLVED_CALL](println("Hello!")|, !) -> ret(*|) L1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == with == inline fun with(receiver: T, block: T.() -> R): R = receiver.block() --------------------- L0: 1 v(receiver: T) magic[FAKE_INITIALIZER](receiver: T) -> w(receiver|) v(block: T.() -> R) magic[FAKE_INITIALIZER](block: T.() -> R) -> w(block|) mark(receiver.block()) r(block) -> r(receiver) -> mark(block()) call(block(), invoke|, ) -> ret(*|) L1 L1: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == use == fun use() = with(C) { with(B) { A.foo() } } --------------------- L0: 1 r(C) -> mark({ with(B) { A.foo() } }) jmp?(L2) NEXT:[r({ with(B) { A.foo() } }) -> , d({ with(B) { A.foo() } })] d({ with(B) { A.foo() } }) NEXT:[] L2 [after local declaration]: r({ with(B) { A.foo() } }) -> PREV:[jmp?(L2)] mark(with(C) { with(B) { A.foo() } }) call(with(C) { with(B) { A.foo() } }, with|, ) -> ret(*|) L1 L1: NEXT:[] error: PREV:[] sink: PREV:[, , d({ with(B) { A.foo() } })] ===================== == anonymous_0 == { with(B) { A.foo() } } --------------------- L3: 2 3 mark(with(B) { A.foo() }) r(B) -> mark({ A.foo() }) jmp?(L5) NEXT:[r({ A.foo() }) -> , d({ A.foo() })] d({ A.foo() }) NEXT:[] L5 [after local declaration]: r({ A.foo() }) -> PREV:[jmp?(L5)] mark(with(B) { A.foo() }) call(with(B) { A.foo() }, with|, ) -> 2 ret(*|) L4 L4: NEXT:[] error: PREV:[] sink: PREV:[, , d({ A.foo() })] ===================== == anonymous_1 == { A.foo() } --------------------- L6: 4 5 mark(A.foo()) mark(A.foo()) magic[IMPLICIT_RECEIVER](foo) -> mark(A) r(A, Companion) -> r(foo|, ) -> magic[IMPLICIT_RECEIVER](foo()) -> mark(foo()) call(foo(), invoke|, ) -> 4 ret(*|) L7 L7: NEXT:[] error: PREV:[] sink: PREV:[, ] =====================