mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-22 14:55:18 +00:00
60 lines
1.6 KiB
Plaintext
60 lines
1.6 KiB
Plaintext
digraph try_finally_flex {
|
|
label = "Try..Finally clause in Adobe Flex";
|
|
node[shape=rect];
|
|
|
|
start->before;
|
|
before->in_try;
|
|
try_f_begin->in_try;
|
|
try_c_begin->in_try;
|
|
in_try->pushbyteminusone;
|
|
try_c_end->pushbyteminusone;
|
|
in_catch->pushbyteminusone;
|
|
pushbyteminusone->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;
|
|
|
|
pushbyteminusone[label="pushbyte -1"];
|
|
catch_f[label="loc_E = exception;\lpushbyte 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(§§pop())"]
|
|
|
|
in_try->in_try_ret[label=return];
|
|
in_try_ret[label="loc_R = returnedValue;\lpushbyte 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="pushbyte 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 which uses value on stack..
|
|
Value -1 is pushed on stack after in_try and after catch bodies.
|
|
For every return/continue, there is also specific value pushed to stack.
|
|
Lookupswitch then decides what will happen.
|
|
*/
|
|
|
|
} |