== t1 == fun t1(b: Boolean) { var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } --------------------- : Boolean NEW: magic[FAKE_INITIALIZER](b: Boolean) -> b : Boolean NEW: r(b) -> "s" : String NEW: r("s") -> u = "s" !: * { u = "s" } !: * COPY if (b) { u = "s" } : * NEW: merge(if (b) { u = "s" }|!) -> u : String NEW: r(u) -> doSmth(u) : * NEW: call(doSmth(u), doSmth|) -> b : Boolean NEW: r(b) -> "s" : String NEW: r("s") -> r = "s" !: * { r = "s" } !: * COPY "t" : String NEW: r("t") -> r = "t" !: * { r = "t" } !: * COPY if (b) { r = "s" } else { r = "t" } : * NEW: merge(if (b) { r = "s" } else { r = "t" }|!, !) -> r : String NEW: r(r) -> doSmth(r) : * NEW: call(doSmth(r), doSmth|) -> { var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } : * COPY ===================== == t2 == fun t2(b: Boolean) { val i = 3 if (b) { return; } doSmth(i) if (i is Int) { return; } } --------------------- : Boolean NEW: magic[FAKE_INITIALIZER](b: Boolean) -> 3 : Int NEW: r(3) -> b : Boolean NEW: r(b) -> return !: * { return; } !: * COPY if (b) { return; } : * NEW: merge(if (b) { return; }|!) -> i : String NEW: r(i) -> doSmth(i) : * NEW: call(doSmth(i), doSmth|) -> i : * NEW: r(i) -> i is Int : Boolean NEW: magic[IS](i is Int|) -> return !: * { return; } !: * COPY if (i is Int) { return; } : * NEW: merge(if (i is Int) { return; }|!) -> { val i = 3 if (b) { return; } doSmth(i) if (i is Int) { return; } } : * COPY ===================== == doSmth == fun doSmth(s: String) {} --------------------- : String NEW: magic[FAKE_INITIALIZER](s: String) -> =====================