Pseudocode: don't write full label name when jump on it
This commit is contained in:
@@ -44,27 +44,27 @@ L0:
|
||||
w(x|<v4>)
|
||||
mark(if (true) 1 else 2)
|
||||
r(true) -> <v5>
|
||||
jf(L2 [else branch]|<v5>) NEXT:[r(2) -> <v7>, r(1) -> <v6>]
|
||||
jf(L2|<v5>) NEXT:[r(2) -> <v7>, r(1) -> <v6>]
|
||||
r(1) -> <v6>
|
||||
jmp(L3 ['if' expression result]) NEXT:[merge(if (true) 1 else 2|<v6>, <v7>) -> <v8>]
|
||||
jmp(L3) NEXT:[merge(if (true) 1 else 2|<v6>, <v7>) -> <v8>]
|
||||
L2 [else branch]:
|
||||
r(2) -> <v7> PREV:[jf(L2 [else branch]|<v5>)]
|
||||
r(2) -> <v7> PREV:[jf(L2|<v5>)]
|
||||
L3 ['if' expression result]:
|
||||
merge(if (true) 1 else 2|<v6>, <v7>) -> <v8> PREV:[jmp(L3 ['if' expression result]), r(2) -> <v7>]
|
||||
merge(if (true) 1 else 2|<v6>, <v7>) -> <v8> PREV:[jmp(L3), r(2) -> <v7>]
|
||||
w(x|<v8>)
|
||||
v(val y = true && false)
|
||||
r(true) -> <v9>
|
||||
jf(L4 [result of boolean operation]|<v9>) NEXT:[magic[AND](true && false|<v9>, <v10>) -> <v11>, r(false) -> <v10>]
|
||||
jf(L4|<v9>) NEXT:[magic[AND](true && false|<v9>, <v10>) -> <v11>, r(false) -> <v10>]
|
||||
r(false) -> <v10>
|
||||
L4 [result of boolean operation]:
|
||||
magic[AND](true && false|<v9>, <v10>) -> <v11> PREV:[jf(L4 [result of boolean operation]|<v9>), r(false) -> <v10>]
|
||||
magic[AND](true && false|<v9>, <v10>) -> <v11> PREV:[jf(L4|<v9>), r(false) -> <v10>]
|
||||
w(y|<v11>)
|
||||
v(val z = false && true)
|
||||
r(false) -> <v12>
|
||||
jf(L5 [result of boolean operation]|<v12>) NEXT:[magic[AND](false && true|<v12>, <v13>) -> <v14>, r(true) -> <v13>]
|
||||
jf(L5|<v12>) NEXT:[magic[AND](false && true|<v12>, <v13>) -> <v14>, r(true) -> <v13>]
|
||||
r(true) -> <v13>
|
||||
L5 [result of boolean operation]:
|
||||
magic[AND](false && true|<v12>, <v13>) -> <v14> PREV:[jf(L5 [result of boolean operation]|<v12>), r(true) -> <v13>]
|
||||
magic[AND](false && true|<v12>, <v13>) -> <v14> PREV:[jf(L5|<v12>), r(true) -> <v13>]
|
||||
w(z|<v14>)
|
||||
v(val t = Test())
|
||||
mark(Test())
|
||||
|
||||
@@ -28,63 +28,63 @@ L0:
|
||||
2 mark({ if (a) { 1 } else { 2 } 3 if (a && b) 5 else 6 7 if (a || b) 8 else 9 10 if (a) 11 12 if (a) else 13 14 })
|
||||
mark(if (a) { 1 } else { 2 })
|
||||
r(a) -> <v2>
|
||||
jf(L2 [else branch]|<v2>) NEXT:[mark({ 2 }), mark({ 1 })]
|
||||
jf(L2|<v2>) NEXT:[mark({ 2 }), mark({ 1 })]
|
||||
3 mark({ 1 })
|
||||
r(1) -> <v3>
|
||||
2 jmp(L3 ['if' expression result]) NEXT:[merge(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5>]
|
||||
2 jmp(L3) NEXT:[merge(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5>]
|
||||
L2 [else branch]:
|
||||
3 mark({ 2 }) PREV:[jf(L2 [else branch]|<v2>)]
|
||||
3 mark({ 2 }) PREV:[jf(L2|<v2>)]
|
||||
r(2) -> <v4>
|
||||
L3 ['if' expression result]:
|
||||
2 merge(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5> PREV:[jmp(L3 ['if' expression result]), r(2) -> <v4>]
|
||||
2 merge(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5> PREV:[jmp(L3), r(2) -> <v4>]
|
||||
r(3) -> <v6>
|
||||
mark(if (a && b) 5 else 6)
|
||||
r(a) -> <v7>
|
||||
jf(L4 [result of boolean operation]|<v7>) NEXT:[magic[AND](a && b|<v7>, <v8>) -> <v9>, r(b) -> <v8>]
|
||||
jf(L4|<v7>) NEXT:[magic[AND](a && b|<v7>, <v8>) -> <v9>, r(b) -> <v8>]
|
||||
r(b) -> <v8>
|
||||
L4 [result of boolean operation]:
|
||||
magic[AND](a && b|<v7>, <v8>) -> <v9> PREV:[jf(L4 [result of boolean operation]|<v7>), r(b) -> <v8>]
|
||||
jf(L5 [else branch]|<v9>) NEXT:[r(6) -> <v11>, r(5) -> <v10>]
|
||||
magic[AND](a && b|<v7>, <v8>) -> <v9> PREV:[jf(L4|<v7>), r(b) -> <v8>]
|
||||
jf(L5|<v9>) NEXT:[r(6) -> <v11>, r(5) -> <v10>]
|
||||
r(5) -> <v10>
|
||||
jmp(L6 ['if' expression result]) NEXT:[merge(if (a && b) 5 else 6|<v10>, <v11>) -> <v12>]
|
||||
jmp(L6) NEXT:[merge(if (a && b) 5 else 6|<v10>, <v11>) -> <v12>]
|
||||
L5 [else branch]:
|
||||
r(6) -> <v11> PREV:[jf(L5 [else branch]|<v9>)]
|
||||
r(6) -> <v11> PREV:[jf(L5|<v9>)]
|
||||
L6 ['if' expression result]:
|
||||
merge(if (a && b) 5 else 6|<v10>, <v11>) -> <v12> PREV:[jmp(L6 ['if' expression result]), r(6) -> <v11>]
|
||||
merge(if (a && b) 5 else 6|<v10>, <v11>) -> <v12> PREV:[jmp(L6), r(6) -> <v11>]
|
||||
r(7) -> <v13>
|
||||
mark(if (a || b) 8 else 9)
|
||||
r(a) -> <v14>
|
||||
jt(L7 [result of boolean operation]|<v14>) NEXT:[r(b) -> <v15>, magic[OR](a || b|<v14>, <v15>) -> <v16>]
|
||||
jt(L7|<v14>) NEXT:[r(b) -> <v15>, magic[OR](a || b|<v14>, <v15>) -> <v16>]
|
||||
r(b) -> <v15>
|
||||
L7 [result of boolean operation]:
|
||||
magic[OR](a || b|<v14>, <v15>) -> <v16> PREV:[jt(L7 [result of boolean operation]|<v14>), r(b) -> <v15>]
|
||||
jf(L8 [else branch]|<v16>) NEXT:[r(9) -> <v18>, r(8) -> <v17>]
|
||||
magic[OR](a || b|<v14>, <v15>) -> <v16> PREV:[jt(L7|<v14>), r(b) -> <v15>]
|
||||
jf(L8|<v16>) NEXT:[r(9) -> <v18>, r(8) -> <v17>]
|
||||
r(8) -> <v17>
|
||||
jmp(L9 ['if' expression result]) NEXT:[merge(if (a || b) 8 else 9|<v17>, <v18>) -> <v19>]
|
||||
jmp(L9) NEXT:[merge(if (a || b) 8 else 9|<v17>, <v18>) -> <v19>]
|
||||
L8 [else branch]:
|
||||
r(9) -> <v18> PREV:[jf(L8 [else branch]|<v16>)]
|
||||
r(9) -> <v18> PREV:[jf(L8|<v16>)]
|
||||
L9 ['if' expression result]:
|
||||
merge(if (a || b) 8 else 9|<v17>, <v18>) -> <v19> PREV:[jmp(L9 ['if' expression result]), r(9) -> <v18>]
|
||||
merge(if (a || b) 8 else 9|<v17>, <v18>) -> <v19> PREV:[jmp(L9), r(9) -> <v18>]
|
||||
r(10) -> <v20>
|
||||
mark(if (a) 11)
|
||||
r(a) -> <v21>
|
||||
jf(L10 [else branch]|<v21>) NEXT:[read (Unit), r(11) -> <v22>]
|
||||
jf(L10|<v21>) NEXT:[read (Unit), r(11) -> <v22>]
|
||||
r(11) -> <v22>
|
||||
jmp(L11 ['if' expression result]) NEXT:[merge(if (a) 11|<v22>) -> <v23>]
|
||||
jmp(L11) NEXT:[merge(if (a) 11|<v22>) -> <v23>]
|
||||
L10 [else branch]:
|
||||
read (Unit) PREV:[jf(L10 [else branch]|<v21>)]
|
||||
read (Unit) PREV:[jf(L10|<v21>)]
|
||||
L11 ['if' expression result]:
|
||||
merge(if (a) 11|<v22>) -> <v23> PREV:[jmp(L11 ['if' expression result]), read (Unit)]
|
||||
merge(if (a) 11|<v22>) -> <v23> PREV:[jmp(L11), read (Unit)]
|
||||
r(12) -> <v24>
|
||||
mark(if (a) else 13)
|
||||
r(a) -> <v25>
|
||||
jf(L12 [else branch]|<v25>) NEXT:[r(13) -> <v26>, read (Unit)]
|
||||
jf(L12|<v25>) NEXT:[r(13) -> <v26>, read (Unit)]
|
||||
read (Unit)
|
||||
jmp(L13 ['if' expression result]) NEXT:[merge(if (a) else 13|<v26>) -> <v27>]
|
||||
jmp(L13) NEXT:[merge(if (a) else 13|<v26>) -> <v27>]
|
||||
L12 [else branch]:
|
||||
r(13) -> <v26> PREV:[jf(L12 [else branch]|<v25>)]
|
||||
r(13) -> <v26> PREV:[jf(L12|<v25>)]
|
||||
L13 ['if' expression result]:
|
||||
merge(if (a) else 13|<v26>) -> <v27> PREV:[jmp(L13 ['if' expression result]), r(13) -> <v26>]
|
||||
merge(if (a) else 13|<v26>) -> <v27> PREV:[jmp(L13), r(13) -> <v26>]
|
||||
r(14) -> <v28>
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
|
||||
@@ -7,12 +7,12 @@ L0:
|
||||
1 <START>
|
||||
2 mark({ false || (return false) })
|
||||
r(false) -> <v0>
|
||||
jt(L2 [result of boolean operation]|<v0>) NEXT:[mark((return false)), magic[OR](false || (return false)|<v0>, !<v2>) -> <v3>]
|
||||
jt(L2|<v0>) NEXT:[mark((return false)), magic[OR](false || (return false)|<v0>, !<v2>) -> <v3>]
|
||||
mark((return false))
|
||||
r(false) -> <v1>
|
||||
ret(*|<v1>) L1 NEXT:[<END>]
|
||||
L2 [result of boolean operation]:
|
||||
magic[OR](false || (return false)|<v0>, !<v2>) -> <v3> PREV:[jt(L2 [result of boolean operation]|<v0>)]
|
||||
magic[OR](false || (return false)|<v0>, !<v2>) -> <v3> PREV:[jt(L2|<v0>)]
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>] PREV:[ret(*|<v1>) L1, magic[OR](false || (return false)|<v0>, !<v2>) -> <v3>]
|
||||
error:
|
||||
|
||||
@@ -17,4 +17,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -26,4 +26,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -573,4 +573,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -19,4 +19,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -62,4 +62,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -55,4 +55,4 @@ error:
|
||||
<ERROR> PREV:[jmp(error)]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -49,10 +49,10 @@ L0:
|
||||
2 mark({ with(1) { "".(foo)() } })
|
||||
r(1) -> <v0>
|
||||
mark({ "".(foo)() })
|
||||
jmp?(L2 [after local declaration]) NEXT:[r({ "".(foo)() }) -> <v1>, d({ "".(foo)() })]
|
||||
jmp?(L2) NEXT:[r({ "".(foo)() }) -> <v1>, d({ "".(foo)() })]
|
||||
d({ "".(foo)() }) NEXT:[<SINK>]
|
||||
L2 [after local declaration]:
|
||||
r({ "".(foo)() }) -> <v1> PREV:[jmp?(L2 [after local declaration])]
|
||||
r({ "".(foo)() }) -> <v1> PREV:[jmp?(L2)]
|
||||
mark(with(1) { "".(foo)() })
|
||||
call(with(1) { "".(foo)() }, with|<v0>, <v1>) -> <v2>
|
||||
L1:
|
||||
|
||||
@@ -18,4 +18,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -18,4 +18,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -14,4 +14,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -21,4 +21,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -19,4 +19,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -15,4 +15,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
@@ -17,4 +17,4 @@ error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
=====================
|
||||
Reference in New Issue
Block a user