== test == fun test(b: Boolean): (Int) -> Int { if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 } } --------------------- L0: 1 v(b: Boolean) magic[FAKE_INITIALIZER](b: Boolean) -> w(b|) 2 mark({ if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 } }) mark(if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 }) r(b) -> jf(L2|) NEXT:[mark({ fun(n: Int) = n - 1 }), mark({ fun(n: Int) = n + 1 })] 3 mark({ fun(n: Int) = n + 1 }) jmp?(L3) NEXT:[r(fun(n: Int) = n + 1) -> , d(fun(n: Int) = n + 1)] d(fun(n: Int) = n + 1) NEXT:[] L3 [after local declaration]: r(fun(n: Int) = n + 1) -> PREV:[jmp?(L3)] 2 jmp(L6) NEXT:[merge(if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 }|, ) -> ] L2 [else branch]: 3 mark({ fun(n: Int) = n - 1 }) PREV:[jf(L2|)] jmp?(L7) NEXT:[r(fun(n: Int) = n - 1) -> , d(fun(n: Int) = n - 1)] d(fun(n: Int) = n - 1) NEXT:[] L7 [after local declaration]: r(fun(n: Int) = n - 1) -> PREV:[jmp?(L7)] L6 ['if' expression result]: 2 merge(if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 }|, ) -> PREV:[jmp(L6), r(fun(n: Int) = n - 1) -> ] L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, , d(fun(n: Int) = n + 1), d(fun(n: Int) = n - 1)] ===================== == anonymous_0 == fun(n: Int) = n + 1 --------------------- L4: 4 v(n: Int) magic[FAKE_INITIALIZER](n: Int) -> w(n|) r(n) -> r(1) -> mark(n + 1) call(n + 1, plus|, ) -> ret(*|) L5 L5: NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == anonymous_1 == fun(n: Int) = n - 1 --------------------- L8: 4 v(n: Int) magic[FAKE_INITIALIZER](n: Int) -> w(n|) r(n) -> r(1) -> mark(n - 1) call(n - 1, minus|, ) -> ret(*|) L9 L9: NEXT:[] error: PREV:[] sink: PREV:[, ] =====================