Files
jpexs-decompiler/libsrc/ffdec_lib/graphviz/try_finally_asc2.gv
2021-02-08 20:15:19 +01:00

60 lines
1.5 KiB
Plaintext

digraph try_finally_asc2 {
label = "Try..Finally clause in ASC2";
node[shape=rect];
start->before;
before->finally_init->in_try;
try_f_begin->in_try;
try_c_begin->in_try;
in_try->finally;
try_c_end->finally;
in_catch->finally;
try_c_target->in_catch;
try_f_end->finally;
try_f_target->catch_f->finally:ne;
finally->lookupswitch;
lookupswitch->after;
lookupswitch->finally_throw[label="X"];
after->end;
finally_init[label="loc_N=0;"];
catch_f[label="loc_E = exception;\lloc_N = X;\l"];
finally_throw[label="throw loc_E;"];
try_c_target[shape=ellipse];
try_c_begin[shape=ellipse];
try_c_end[shape=ellipse];
try_f_target[shape=ellipse];
try_f_begin[shape=ellipse];
try_f_end[shape=ellipse];
start[shape=ellipse];
end[shape=ellipse];
lookupswitch[label="lookupswitch(loc_N)"]
in_try->in_try_ret[label=return];
in_try_ret[label="loc_R = returnedValue;\lloc_N = Y;\l"]
in_try_ret->finally;
lookupswitch->finally_return[label="Y"];
finally_return[label="return loc_R;"];
in_try->in_try_continue[label=continue];
in_try_continue[label="loc_N = Z;"]
in_try_continue->finally;
lookupswitch->finally_continue[label="Z"];
finally_continue[label="continue label;"];
/*
All ways go through finally clause. There is also lookupswitch with getlocal.
Local register is set before entering in_try block.
For every return/continue, there is local register set to specific value.
Lookupswitch then decides what will happen.
*/
}