== doSomething == fun Any?.doSomething() {} --------------------- L0: 1 2 mark({}) read (Unit) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == bar == fun bar(): Nothing = throw Exception() --------------------- L0: 1 mark(throw Exception()) mark(Exception()) call(Exception(), ) -> throw (throw Exception()|) NEXT:[] L1: NEXT:[] PREV:[] error: PREV:[throw (throw Exception()|)] sink: PREV:[, ] ===================== == foo == fun foo() { null!!.doSomething() bar().doSomething() } --------------------- L0: 1 2 mark({ null!!.doSomething() bar().doSomething() }) mark(null!!.doSomething()) r(null) -> magic[NOT_NULL_ASSERTION](null!!|) -> jmp(error) NEXT:[] - mark(doSomething()) PREV:[] - call(doSomething(), doSomething|) -> PREV:[] - mark(bar().doSomething()) PREV:[] - mark(bar()) PREV:[] - call(bar(), bar) -> PREV:[] - jmp(error) NEXT:[] PREV:[] - mark(doSomething()) PREV:[] - call(doSomething(), doSomething|) -> PREV:[] L1: 1 NEXT:[] PREV:[] error: PREV:[jmp(error)] sink: PREV:[, ] =====================