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:
Svetlana Isakova
2014-06-12 12:58:57 +04:00
parent 6e622f2301
commit 9480907514
39 changed files with 181 additions and 178 deletions
@@ -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({})