== t1 == fun t1() { try { 1 } finally { 2 } } --------------------- 1 : * NEW: r(1) -> { 1 } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 } finally { 2 } : * NEW: merge(try { 1 } finally { 2 }|) -> { try { 1 } finally { 2 } } : * COPY ===================== == t2 == fun t2() { try { 1 if (2 > 3) { return } } finally { 2 } } --------------------- 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> return !: * { return } !: * COPY if (2 > 3) { return } : * NEW: merge(if (2 > 3) { return }|!) -> { 1 if (2 > 3) { return } } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 if (2 > 3) { return } } finally { 2 } : * NEW: merge(try { 1 if (2 > 3) { return } } finally { 2 }|) -> { try { 1 if (2 > 3) { return } } finally { 2 } } : * COPY ===================== == t3 == fun t3() { try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } --------------------- 1 : * NEW: r(1) -> { () -> if (2 > 3) { return@l } } : * NEW: r({ () -> if (2 > 3) { return@l } }) -> @l{ () -> if (2 > 3) { return@l } } : * COPY { 1 @l{ () -> if (2 > 3) { return@l } } } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } : * NEW: merge(try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 }|) -> { try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } : * COPY ===================== == anonymous_0 == { () -> if (2 > 3) { return@l } } --------------------- 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> return@l !: * { return@l } !: * COPY if (2 > 3) { return@l } : * NEW: merge(if (2 > 3) { return@l }|!) -> if (2 > 3) { return@l } : * COPY ===================== == t4 == fun t4() { @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } --------------------- { () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } : * NEW: r({ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } }) -> @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } : * COPY { @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } : * COPY ===================== == anonymous_1 == { () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } --------------------- 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> return@l !: * { return@l } !: * COPY if (2 > 3) { return@l } : * NEW: merge(if (2 > 3) { return@l }|!) -> { 1 if (2 > 3) { return@l } } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 if (2 > 3) { return@l } } finally { 2 } : * NEW: merge(try { 1 if (2 > 3) { return@l } } finally { 2 }|) -> try { 1 if (2 > 3) { return@l } } finally { 2 } : * COPY ===================== == t5 == fun t5() { @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } } --------------------- : * NEW: magic[VALUE_CONSUMER](true|) -> true : Boolean NEW: r(true) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> break @l !: * { break @l } !: * COPY if (2 > 3) { break @l } : * NEW: merge(if (2 > 3) { break @l }|!) -> { 1 if (2 > 3) { break @l } } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 if (2 > 3) { break @l } } finally { 2 } : * NEW: merge(try { 1 if (2 > 3) { break @l } } finally { 2 }|) -> { try { 1 if (2 > 3) { break @l } } finally { 2 } } : * COPY while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !: * @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } !: * COPY { @l while(true) { try { 1 if (2 > 3) { break @l } } finally { 2 } } } !: * COPY ===================== == t6 == fun t6() { try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } --------------------- : * NEW: magic[VALUE_CONSUMER](true|) -> true : Boolean NEW: r(true) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> break @l !: * { break @l } !: * COPY if (2 > 3) { break @l } : * NEW: merge(if (2 > 3) { break @l }|!) -> { 1 if (2 > 3) { break @l } } : * COPY while(true) { 1 if (2 > 3) { break @l } } !: * @l while(true) { 1 if (2 > 3) { break @l } } !: * COPY 5 : * NEW: r(5) -> { @l while(true) { 1 if (2 > 3) { break @l } } 5 } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } : * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 }|) -> { try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } : * COPY ===================== == t7 == fun t7() { try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } } --------------------- : * NEW: magic[VALUE_CONSUMER](true|) -> true : Boolean NEW: r(true) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> break @l !: * { break @l } !: * COPY if (2 > 3) { break @l } : * NEW: merge(if (2 > 3) { break @l }|!) -> { 1 if (2 > 3) { break @l } } : * COPY while(true) { 1 if (2 > 3) { break @l } } !: * @l while(true) { 1 if (2 > 3) { break @l } } !: * COPY { @l while(true) { 1 if (2 > 3) { break @l } } } !: * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } : * NEW: merge(try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 }|!) -> { try { @l while(true) { 1 if (2 > 3) { break @l } } } finally { 2 } } : * COPY ===================== == t8 == fun t8(a : Int) { @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } } --------------------- : Int NEW: magic[FAKE_INITIALIZER](a : Int) -> : Int NEW: magic[LOOP_RANGE_ITERATION](1..a|) -> 1 : Int NEW: r(1) -> a : Int NEW: r(a) -> 1..a : {<: Iterable} NEW: call(1..a, rangeTo|, ) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> continue @l !: * { continue @l } !: * COPY if (2 > 3) { continue @l } : * NEW: merge(if (2 > 3) { continue @l }|!) -> { 1 if (2 > 3) { continue @l } } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { 1 if (2 > 3) { continue @l } } finally { 2 } : * NEW: merge(try { 1 if (2 > 3) { continue @l } } finally { 2 }|) -> { try { 1 if (2 > 3) { continue @l } } finally { 2 } } : * COPY for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !: * @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } !: * COPY { @l for (i in 1..a) { try { 1 if (2 > 3) { continue @l } } finally { 2 } } } !: * COPY ===================== == t9 == fun t9(a : Int) { try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } --------------------- : Int NEW: magic[FAKE_INITIALIZER](a : Int) -> : Int NEW: magic[LOOP_RANGE_ITERATION](1..a|) -> 1 : Int NEW: r(1) -> a : Int NEW: r(a) -> 1..a : {<: Iterable} NEW: call(1..a, rangeTo|, ) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> continue @l !: * { continue @l } !: * COPY if (2 > 3) { continue @l } : * NEW: merge(if (2 > 3) { continue @l }|!) -> { 1 if (2 > 3) { continue @l } } : * COPY for (i in 1..a) { 1 if (2 > 3) { continue @l } } !: * @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !: * COPY 5 : * NEW: r(5) -> { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } : * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } : * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 }|) -> { try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } : * COPY ===================== == t10 == fun t10(a : Int) { try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } } --------------------- : Int NEW: magic[FAKE_INITIALIZER](a : Int) -> : Int NEW: magic[LOOP_RANGE_ITERATION](1..a|) -> 1 : Int NEW: r(1) -> a : Int NEW: r(a) -> 1..a : {<: Iterable} NEW: call(1..a, rangeTo|, ) -> 1 : * NEW: r(1) -> 2 : {<: Comparable} NEW: r(2) -> 3 : Int NEW: r(3) -> 2 > 3 : Boolean NEW: call(2 > 3, compareTo|, ) -> continue @l !: * { continue @l } !: * COPY if (2 > 3) { continue @l } : * NEW: merge(if (2 > 3) { continue @l }|!) -> { 1 if (2 > 3) { continue @l } } : * COPY for (i in 1..a) { 1 if (2 > 3) { continue @l } } !: * @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } !: * COPY { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } !: * COPY 2 : * NEW: r(2) -> { 2 } : * COPY try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } : * NEW: merge(try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 }|!) -> { try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } } finally { 2 } } : * COPY ===================== == t11 == fun t11() { try { return 1 } finally { return 2 } } --------------------- 1 : Unit NEW: r(1) -> return 1 !: * { return 1 } !: * COPY 2 : Unit NEW: r(2) -> return 2 !: * { return 2 } !: * COPY try { return 1 } finally { return 2 } : * NEW: merge(try { return 1 } finally { return 2 }|!) -> { try { return 1 } finally { return 2 } } : * COPY ===================== == t12 == fun t12() : Int { try { return 1 } finally { doSmth(3) } } --------------------- 1 : Int NEW: r(1) -> return 1 !: * { return 1 } !: * COPY 3 : Int NEW: r(3) -> doSmth(3) : * NEW: call(doSmth(3), doSmth|) -> { doSmth(3) } : * COPY try { return 1 } finally { doSmth(3) } : * NEW: merge(try { return 1 } finally { doSmth(3) }|!) -> { try { return 1 } finally { doSmth(3) } } : * COPY ===================== == t13 == fun t13() : Int { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } --------------------- : {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> 1 : Int NEW: r(1) -> return 1 !: * { return 1 } !: * COPY 2 : Int NEW: r(2) -> doSmth(2) : * NEW: call(doSmth(2), doSmth|) -> { doSmth(2) } : * COPY 3 : Int NEW: r(3) -> doSmth(3) : * NEW: call(doSmth(3), doSmth|) -> { doSmth(3) } : * COPY try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } : * NEW: merge(try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) }|!, ) -> { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } : * COPY ===================== == t14 == fun t14() : Int { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } --------------------- : {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> 1 : Int NEW: r(1) -> return 1 !: * { return 1 } !: * COPY 2 : Int NEW: r(2) -> doSmth(2) : * NEW: call(doSmth(2), doSmth|) -> { doSmth(2) } : * COPY try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } : * NEW: merge(try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) }|!, ) -> { try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } : * COPY ===================== == t15 == fun t15() : Int { try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } --------------------- : {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> 1 : Int NEW: r(1) -> return 1 !: * { return 1 } !: * COPY 2 : Int NEW: r(2) -> return 2 !: * { return 2 } !: * COPY 3 : Int NEW: r(3) -> doSmth(3) : * NEW: call(doSmth(3), doSmth|) -> { doSmth(3) } : * COPY try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } : * NEW: merge(try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) }|!, !) -> { try { return 1 } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } : * COPY ===================== == t16 == fun t16() : Int { try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } --------------------- : {<: UnsupportedOperationException} NEW: magic[FAKE_INITIALIZER](e: UnsupportedOperationException) -> 1 : Int NEW: r(1) -> doSmth(1) : * NEW: call(doSmth(1), doSmth|) -> { doSmth(1) } : * COPY 2 : Int NEW: r(2) -> return 2 !: * { return 2 } !: * COPY 3 : Int NEW: r(3) -> doSmth(3) : * NEW: call(doSmth(3), doSmth|) -> { doSmth(3) } : * COPY try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } : * NEW: merge(try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) }|, !) -> { try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } : * COPY ===================== == doSmth == fun doSmth(i: Int) { } --------------------- : Int NEW: magic[FAKE_INITIALIZER](i: Int) -> =====================