Update test data for rendered CFA results after optimizations
This commit is contained in:
+74
-74
@@ -11,9 +11,9 @@ L0:
|
||||
L1:
|
||||
1 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> INIT: in: {obj=I?} out: {obj=I?} USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo0 ==
|
||||
class Demo0 {
|
||||
@@ -31,9 +31,9 @@ L0:
|
||||
v(private val some = object { fun foo() { println(state) // Ok } }) INIT: in: {} out: {some=D}
|
||||
mark(object { fun foo() { println(state) // Ok } }) INIT: in: {some=D} out: {some=D}
|
||||
jmp?(L2)
|
||||
d(fun foo() { println(state) // Ok }) INIT: in: {some=I?} out: {some=I?} USE: in: {state=READ} out: {state=READ}
|
||||
d(fun foo() { println(state) // Ok }) USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r(object { fun foo() { println(state) // Ok } }) -> <v0> INIT: in: {some=D} out: {some=D}
|
||||
r(object { fun foo() { println(state) // Ok } }) -> <v0>
|
||||
w(some|<v0>) INIT: in: {some=D} out: {some=ID}
|
||||
v(private var state: Boolean = true) INIT: in: {some=ID} out: {some=ID, state=D}
|
||||
r(true) -> <v1> INIT: in: {some=ID, state=D} out: {some=ID, state=D}
|
||||
@@ -41,9 +41,9 @@ L2 [after local declaration]:
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo() {
|
||||
@@ -53,16 +53,16 @@ fun foo() {
|
||||
L3:
|
||||
2 <START> INIT: in: {some=D} out: {some=D}
|
||||
3 mark({ println(state) // Ok })
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v0>) -> <v1> USE: in: {} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v0>) -> <v1> USE: in: {} out: {state=READ}
|
||||
mark(println(state))
|
||||
call(println(state), println|<v1>) -> <v2>
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?} out: {some=I?} USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo1 ==
|
||||
class Demo1 {
|
||||
@@ -83,7 +83,7 @@ L0:
|
||||
v(private val some = object { fun foo() { if (state) state = true println(state) // must be initialized } }) INIT: in: {} out: {some=D}
|
||||
mark(object { fun foo() { if (state) state = true println(state) // must be initialized } }) INIT: in: {some=D} out: {some=D}
|
||||
jmp?(L2)
|
||||
d(fun foo() { if (state) state = true println(state) // must be initialized }) INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
d(fun foo() { if (state) state = true println(state) // must be initialized }) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r(object { fun foo() { if (state) state = true println(state) // must be initialized } }) -> <v0> INIT: in: {some=D} out: {some=D}
|
||||
w(some|<v0>) INIT: in: {some=D} out: {some=ID}
|
||||
@@ -93,9 +93,9 @@ L2 [after local declaration]:
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo() {
|
||||
@@ -111,25 +111,25 @@ L3:
|
||||
mark(if (state) state = true)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0>
|
||||
r(state|<v0>) -> <v1>
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v2>
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L6) INIT: in: {some=D, state=I} out: {some=D, state=I}
|
||||
L5 [else branch]:
|
||||
read (Unit) INIT: in: {some=D} out: {some=D}
|
||||
L6 ['if' expression result]:
|
||||
merge(if (state) state = true|!<v4>) -> <v5> INIT: in: {some=D, state=I} out: {some=D, state=I}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
mark(println(state))
|
||||
call(println(state), println|<v7>) -> <v8>
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=D} out: {some=D}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo1A ==
|
||||
class Demo1A {
|
||||
@@ -169,25 +169,25 @@ L0:
|
||||
mark(if (state) state = true)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0>
|
||||
r(state|<v0>) -> <v1>
|
||||
jf(L2|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
jf(L2|<v1>)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v2>
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {} out: {state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L3) INIT: in: {state=I} out: {state=I}
|
||||
r(true) -> <v3>
|
||||
w(state|<v2>, <v3>)
|
||||
jmp(L3)
|
||||
L2 [else branch]:
|
||||
read (Unit) INIT: in: {} out: {}
|
||||
read (Unit)
|
||||
L3 ['if' expression result]:
|
||||
merge(if (state) state = true|!<v4>) -> <v5> INIT: in: {state=I} out: {state=I}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
merge(if (state) state = true|!<v4>) -> <v5>
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6>
|
||||
r(state|<v6>) -> <v7>
|
||||
mark(println(state))
|
||||
call(println(state), println|<v7>) -> <v8>
|
||||
L1:
|
||||
1 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> INIT: in: {state=I} out: {state=I} USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo2 ==
|
||||
class Demo2 {
|
||||
@@ -210,7 +210,7 @@ L0:
|
||||
v(private val some = object { fun foo() { if (state) state = true else state = false println(state) // OK } }) INIT: in: {} out: {some=D}
|
||||
mark(object { fun foo() { if (state) state = true else state = false println(state) // OK } }) INIT: in: {some=D} out: {some=D}
|
||||
jmp?(L2)
|
||||
d(fun foo() { if (state) state = true else state = false println(state) // OK }) INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
d(fun foo() { if (state) state = true else state = false println(state) // OK }) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r(object { fun foo() { if (state) state = true else state = false println(state) // OK } }) -> <v0> INIT: in: {some=D} out: {some=D}
|
||||
w(some|<v0>) INIT: in: {some=D} out: {some=ID}
|
||||
@@ -220,9 +220,9 @@ L2 [after local declaration]:
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo() {
|
||||
@@ -238,29 +238,29 @@ L3:
|
||||
2 <START> INIT: in: {some=D} out: {some=D}
|
||||
3 mark({ if (state) state = true else state = false println(state) // OK })
|
||||
mark(if (state) state = true else state = false)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v0>) -> <v1> USE: in: {state=WRITTEN_AFTER_READ} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v0>) -> <v1> USE: in: {state=WRITTEN_AFTER_READ} out: {state=READ}
|
||||
jf(L5|<v1>)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v2>
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L6) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L6) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
L5 [else branch]:
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v4> INIT: in: {some=D} out: {some=D}
|
||||
r(false) -> <v5> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v4>, <v5>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
r(false) -> <v5> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v4>, <v5>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
L6 ['if' expression result]:
|
||||
merge(if (state) state = true else state = false|!<v6>, !<v7>) -> <v8> INIT: in: {some=D, state=I} out: {some=D, state=I}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v9> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v9>) -> <v10> USE: in: {} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v9> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v9>) -> <v10> USE: in: {} out: {state=READ}
|
||||
mark(println(state))
|
||||
call(println(state), println|<v10>) -> <v11>
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=D} out: {some=D}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo3 ==
|
||||
class Demo3 {
|
||||
@@ -280,9 +280,9 @@ L0:
|
||||
magic[IMPLICIT_RECEIVER](run { if (state) state = true println(state) // OK }) -> <v0> INIT: in: {some=D} out: {some=D}
|
||||
mark({ if (state) state = true println(state) // OK })
|
||||
jmp?(L2)
|
||||
d({ if (state) state = true println(state) // OK }) INIT: in: {some=I?} out: {some=I?} USE: in: {state=READ} out: {state=READ}
|
||||
d({ if (state) state = true println(state) // OK }) USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r({ if (state) state = true println(state) // OK }) -> <v1> INIT: in: {some=D} out: {some=D}
|
||||
r({ if (state) state = true println(state) // OK }) -> <v1>
|
||||
mark(run { if (state) state = true println(state) // OK })
|
||||
call(run { if (state) state = true println(state) // OK }, run|<v0>, <v1>) -> <v2>
|
||||
w(some|<v2>) INIT: in: {some=D} out: {some=ID}
|
||||
@@ -292,9 +292,9 @@ L2 [after local declaration]:
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== anonymous_0 ==
|
||||
{
|
||||
@@ -310,25 +310,25 @@ L3:
|
||||
mark(if (state) state = true)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0>
|
||||
r(state|<v0>) -> <v1>
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v2>
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L6)
|
||||
L5 [else branch]:
|
||||
read (Unit)
|
||||
L6 ['if' expression result]:
|
||||
merge(if (state) state = true|!<v4>) -> <v5>
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
mark(println(state))
|
||||
call(println(state), println|<v7>) -> <v8>
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?} out: {some=I?} USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== exec ==
|
||||
fun <T> exec(f: () -> T): T = f()
|
||||
@@ -337,17 +337,17 @@ L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(f: () -> T) INIT: in: {} out: {f=D}
|
||||
magic[FAKE_INITIALIZER](f: () -> T) -> <v0> INIT: in: {f=D} out: {f=D}
|
||||
w(f|<v0>) INIT: in: {f=D} out: {f=ID} USE: in: {f=READ} out: {f=READ}
|
||||
r(f) -> <v1> INIT: in: {f=ID} out: {f=ID} USE: in: {} out: {f=READ}
|
||||
w(f|<v0>) INIT: in: {f=D} out: {f=ID}
|
||||
r(f) -> <v1> INIT: in: {f=ID} out: {f=ID}
|
||||
mark(f())
|
||||
call(f(), invoke|<v1>) -> <v2>
|
||||
ret(*|<v2>) L1
|
||||
L1:
|
||||
<END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> INIT: in: {f=I?} out: {f=I?} USE: in: {} out: {}
|
||||
<SINK> USE: in: {f=READ} out: {f=READ}
|
||||
=====================
|
||||
== Demo4 ==
|
||||
class Demo4 {
|
||||
@@ -366,7 +366,7 @@ L0:
|
||||
v(private val some = exec { if (state) state = true println(state) // must be initialized }) INIT: in: {} out: {some=D}
|
||||
mark({ if (state) state = true println(state) // must be initialized }) INIT: in: {some=D} out: {some=D}
|
||||
jmp?(L2)
|
||||
d({ if (state) state = true println(state) // must be initialized }) INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
d({ if (state) state = true println(state) // must be initialized }) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r({ if (state) state = true println(state) // must be initialized }) -> <v0> INIT: in: {some=D} out: {some=D}
|
||||
mark(exec { if (state) state = true println(state) // must be initialized })
|
||||
@@ -378,9 +378,9 @@ L2 [after local declaration]:
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== anonymous_1 ==
|
||||
{
|
||||
@@ -396,25 +396,25 @@ L3:
|
||||
mark(if (state) state = true)
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v0>
|
||||
r(state|<v0>) -> <v1>
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
jf(L5|<v1>) USE: in: {state=READ} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v2>
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
r(true) -> <v3> USE: in: {state=WRITTEN_AFTER_READ} out: {state=WRITTEN_AFTER_READ}
|
||||
w(state|<v2>, <v3>) INIT: in: {some=D} out: {some=D, state=I} USE: in: {state=READ} out: {state=WRITTEN_AFTER_READ}
|
||||
jmp(L6) INIT: in: {some=D, state=I} out: {some=D, state=I}
|
||||
L5 [else branch]:
|
||||
read (Unit) INIT: in: {some=D} out: {some=D}
|
||||
L6 ['if' expression result]:
|
||||
merge(if (state) state = true|!<v4>) -> <v5> INIT: in: {some=D, state=I} out: {some=D, state=I}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
magic[IMPLICIT_RECEIVER](state) -> <v6> USE: in: {state=READ} out: {state=READ}
|
||||
r(state|<v6>) -> <v7> USE: in: {} out: {state=READ}
|
||||
mark(println(state))
|
||||
call(println(state), println|<v7>) -> <v8>
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=D} out: {some=D}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {} out: {}
|
||||
=====================
|
||||
== Demo5 ==
|
||||
class Demo5 {
|
||||
@@ -438,16 +438,16 @@ L0:
|
||||
v(private val some = object { fun foo() { if (state) state = true println(state) // OK } }) INIT: in: {state=ID} out: {some=D, state=ID}
|
||||
mark(object { fun foo() { if (state) state = true println(state) // OK } }) INIT: in: {some=D, state=ID} out: {some=D, state=ID}
|
||||
jmp?(L2)
|
||||
d(fun foo() { if (state) state = true println(state) // OK }) INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
d(fun foo() { if (state) state = true println(state) // OK }) INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {state=READ} out: {state=READ}
|
||||
L2 [after local declaration]:
|
||||
r(object { fun foo() { if (state) state = true println(state) // OK } }) -> <v1> INIT: in: {some=D, state=ID} out: {some=D, state=ID}
|
||||
w(some|<v1>) INIT: in: {some=D, state=ID} out: {some=ID, state=ID}
|
||||
L1:
|
||||
<END> INIT: in: {some=ID, state=ID} out: {some=ID, state=ID}
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=ID} out: {some=ID}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I?} out: {some=I?, state=I?} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=ID, state=I?} out: {some=ID, state=I?} USE: in: {} out: {}
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo() {
|
||||
@@ -479,7 +479,7 @@ L6 ['if' expression result]:
|
||||
L4:
|
||||
2 <END>
|
||||
error:
|
||||
<ERROR> INIT: in: {} out: {}
|
||||
<ERROR> INIT: in: {some=D} out: {some=D}
|
||||
sink:
|
||||
<SINK> INIT: in: {some=I?, state=I} out: {some=I?, state=I} USE: in: {} out: {}
|
||||
<SINK> INIT: in: {some=D, state=I} out: {some=D, state=I} USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
Reference in New Issue
Block a user