Mark some expressions after processing their components
when it's semantically correct Expressions: calls, 'for' loops, elvis operators It's significant for reporting 'unreachable code' correctly
This commit is contained in:
@@ -14,9 +14,9 @@ L0:
|
||||
w(b|<v1>)
|
||||
2 mark({ if (a == b) { } })
|
||||
mark(if (a == b) { })
|
||||
mark(a == b)
|
||||
r(a) -> <v2>
|
||||
r(b) -> <v3>
|
||||
mark(a == b)
|
||||
call(==, equals|<v2>, <v3>) -> <v4>
|
||||
jf(L2|<v4>) NEXT:[read (Unit), mark({ })]
|
||||
3 mark({ })
|
||||
|
||||
@@ -10,8 +10,8 @@ L0:
|
||||
v(var i = 1)
|
||||
r(1) -> <v0>
|
||||
w(i|<v0>)
|
||||
mark(i++)
|
||||
r(i) -> <v1>
|
||||
mark(i++)
|
||||
call(++, inc|<v1>) -> <v2>
|
||||
w(i|<v2>)
|
||||
L1:
|
||||
|
||||
@@ -9,8 +9,8 @@ L0:
|
||||
magic(f: () -> Unit) -> <v0>
|
||||
w(f|<v0>)
|
||||
2 mark({ f() })
|
||||
mark(f())
|
||||
r(f) -> <v1>
|
||||
mark(f())
|
||||
call(f, invoke|<v1>) -> <v2>
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
|
||||
@@ -13,9 +13,9 @@ L0:
|
||||
w(b|<v1>)
|
||||
2 mark({ if (a != b) {} })
|
||||
mark(if (a != b) {})
|
||||
mark(a != b)
|
||||
r(a) -> <v2>
|
||||
r(b) -> <v3>
|
||||
mark(a != b)
|
||||
call(!=, equals|<v2>, <v3>) -> <v4>
|
||||
jf(L2|<v4>) NEXT:[read (Unit), mark({})]
|
||||
3 mark({})
|
||||
|
||||
Reference in New Issue
Block a user