This was built to track decompiler and CFG progress.
Unimplemented Opcode: NewArray
{
"frames": [
{
"line": 165,
"function": "gbf_core::decompiler::function_decompiler_context::FunctionDecompilerContext::process_instruction",
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler_context.rs"
},
{
"line": 467,
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs",
"function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::process_regions"
},
{
"line": 286,
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs",
"function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::decompile"
}
]
}
{
"current_block_id": {
"index": 11,
"block_type": "Normal",
"address": 5117
},
"current_ast_node_stack": [
{
"StandaloneNode": {
"Expression": {
"Assignable": {
"MemberAccess": {
"metadata": {
"properties": {},
"comments": []
},
"node_id": 66557,
"ptr": {
"rhs": {
"Identifier": {
"metadata": {
"properties": {},
"comments": []
},
"ptr": {
"ssa_version": null,
"id": "buttons"
},
"node_id": 66556
}
},
"ssa_version": 2,
"lhs": {
"Identifier": {
"metadata": {
"properties": {},
"comments": []
},
"node_id": 66555,
"ptr": {
"ssa_version": null,
"id": "temp"
}
}
}
}
}
}
}
}
},
{
"StandaloneNode": {
"Expression": {
"Literal": {
"metadata": {
"properties": {},
"comments": []
},
"ptr": {
"Number": 13
},
"node_id": 66558
}
}
}
}
],
"current_instruction": {
"opcode": "NewArray",
"operand": null,
"address": 5132
}
}
function showRC()
{
fn_call#6 = this.isOpen();
// RegionId(1)
if (fn_call#6)
{
fn_call#8 = GuiRC.showtop();
lit#9 = 0;
return lit#9;
}
// RegionId(2)
else
{
lit#10 = 1;
fn_call#12 = settimer#11(lit#10);
lit#13 = "GuiRC";
gbf_new_obj#14 = lit#13;
fn_call#16 = getRCGuiControlType#15();
new_node#17 = new fn_call#16(gbf_new_obj#14);
gbf_new_obj#18 = new_node#17;
// RegionId(2)
// RegionId(3)
with (gbf_new_obj#14)
{
fn_call#20 = this.objecttype();
lit#21 = "GuiWindowCtrl";
// RegionId(3)
// RegionId(4)
if (fn_call#20 == lit#21)
{
lit#23 = 117;
fn_call#25 = keyname2#24(lit#23);
lit#26 = "2014/09/26";
lit#27 = "Remote Control %s (%s)";
builtin_fn_call#28 = format(lit#27, lit#26, fn_call#25);
text#29 = builtin_fn_call#28;
lit#31 = "GuiRCWindowProfile";
profile#32 = lit#31;
// RegionId(4)
// RegionId(5)
if (remotecontrol.options.noexternalstyle)
{
lit#37 = "none";
}
// RegionId(6)
else
{
}
phi<idx=1, regions=()> = phi<idx=0, regions=()>;
lit#40 = true;
clientrelative#41 = lit#40;
lit#43 = true;
closequery#44 = lit#43;
lit#46 = true;
isexternal#47 = lit#46;
}
lit#49 = 350;
lit#50 = 500;
clientextent#51 = {lit#50, lit#49};
lit#53 = false;
visible#54 = lit#53;
}
fn_call#56 = addcontrol#55(phi<idx=0, regions=()>);
lit#57 = "GuiRCBitmap";
gbf_new_obj#58 = lit#57;
lit#59 = "GuiBitmapCtrl";
new_node#60 = new lit#59(gbf_new_obj#58);
gbf_new_obj#61 = new_node#60;
// RegionId(9)
// RegionId(10)
with (gbf_new_obj#58)
{
lit#63 = 160;
extent#65 = {GuiRC.clientwidth, lit#63};
lit#67 = "rc_graalonline.jpg";
bitmap#68 = lit#67;
lit#70 = "width";
horizsizing#71 = lit#70;
}
fn_call#72 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#73 = GuiRC.addcontrol(GuiRCBitmap#3);
lit#74 = 13;
temp.buttons = new [lit#74];
lit#75 = 0;
lit#76 = "PlayerList";
temp.buttons[lit#75] = lit#76;
lit#77 = 0;
lit#79 = "Player List";
temp.buttons[lit#77].hint = lit#79;
lit#80 = 0;
lit#82 = 15;
lit#83 = 5;
temp.buttons[lit#80].position = {lit#83, lit#82};
lit#84 = 0;
lit#85 = "right";
temp.buttons[lit#84].horizsizing = lit#85;
lit#86 = 0;
phi<idx=0, regions=()> = this.function_357_2;
lit#89 = 1;
lit#90 = "FileBrowser";
temp.buttons[lit#89] = lit#90;
lit#91 = 1;
lit#92 = "File Browser";
temp.buttons[lit#91].hint = lit#92;
lit#93 = 1;
lit#94 = 0;
lit#95 = 1;
lit#96 = 33;
lit#97 = 5;
temp.buttons[lit#93].position = {lit#97, temp.buttons[lit#94].position[lit#95] + lit#96};
lit#98 = 1;
lit#99 = "right";
temp.buttons[lit#98].horizsizing = lit#99;
lit#100 = 1;
lit#101 = "folders";
temp.buttons[lit#100].action = lit#101;
lit#102 = 2;
lit#103 = "Accounts";
temp.buttons[lit#102] = lit#103;
lit#104 = 2;
lit#105 = "Account List";
temp.buttons[lit#104].hint = lit#105;
lit#106 = 2;
lit#107 = 15;
lit#108 = 0;
lit#109 = 0;
lit#110 = 33;
temp.buttons[lit#106].position = {temp.buttons[lit#108].position[lit#109] + lit#110, lit#107};
lit#111 = 2;
lit#112 = "right";
temp.buttons[lit#111].horizsizing = lit#112;
lit#113 = 2;
lit#116 = "Xor";
lit#117 = "unixmad";
temp.buttons[lit#113].visible = player.account in {lit#117, lit#116};
lit#118 = 2;
phi<idx=0, regions=()> = this.function_357_3;
lit#120 = 3;
lit#121 = "ToAlls";
temp.buttons[lit#120] = lit#121;
lit#122 = 3;
lit#123 = "To Alls";
temp.buttons[lit#122].hint = lit#123;
lit#124 = 3;
lit#125 = 15;
lit#126 = 2;
lit#127 = 0;
lit#128 = 33;
temp.buttons[lit#124].position = {temp.buttons[lit#126].position[lit#127] + lit#128, lit#125};
lit#129 = 3;
lit#130 = "right";
temp.buttons[lit#129].horizsizing = lit#130;
lit#131 = 3;
phi<idx=0, regions=()> = this.function_357_4;
lit#133 = 3;
lit#134 = false;
temp.buttons[lit#133].visible = lit#134;
lit#135 = 4;
lit#136 = "FolderOptions";
temp.buttons[lit#135] = lit#136;
lit#137 = 4;
lit#138 = "Folder Options";
temp.buttons[lit#137].hint = lit#138;
lit#139 = 4;
lit#140 = 15;
lit#141 = 40;
temp.buttons[lit#139].position = {GuiRCBitmap.clientwidth - lit#141, lit#140};
lit#142 = 4;
lit#143 = "left";
temp.buttons[lit#142].horizsizing = lit#143;
lit#144 = 4;
lit#145 = "folderconfig";
temp.buttons[lit#144].action = lit#145;
lit#146 = 5;
lit#147 = "ServerFlags";
temp.buttons[lit#146] = lit#147;
lit#148 = 5;
lit#149 = "Server Flags";
temp.buttons[lit#148].hint = lit#149;
lit#150 = 5;
lit#151 = 15;
lit#152 = 4;
lit#153 = 0;
lit#154 = 33;
temp.buttons[lit#150].position = {temp.buttons[lit#152].position[lit#153] - lit#154, lit#151};
lit#155 = 5;
lit#156 = "left";
temp.buttons[lit#155].horizsizing = lit#156;
lit#157 = 5;
lit#158 = "serverflags";
temp.buttons[lit#157].action = lit#158;
lit#159 = 6;
lit#160 = "Options";
temp.buttons[lit#159] = lit#160;
lit#161 = 6;
lit#162 = "RC Options";
temp.buttons[lit#161].hint = lit#162;
lit#163 = 6;
lit#164 = 15;
lit#165 = 5;
lit#166 = 0;
lit#167 = 33;
temp.buttons[lit#163].position = {temp.buttons[lit#165].position[lit#166] - lit#167, lit#164};
lit#168 = 6;
lit#169 = "left";
temp.buttons[lit#168].horizsizing = lit#169;
lit#170 = 6;
phi<idx=0, regions=()> = this.function_357_5;
lit#172 = 7;
lit#173 = "ServerOptions";
temp.buttons[lit#172] = lit#173;
lit#174 = 7;
lit#175 = "Server Options";
temp.buttons[lit#174].hint = lit#175;
lit#176 = 7;
lit#177 = 4;
lit#178 = 1;
lit#179 = 33;
lit#180 = 40;
temp.buttons[lit#176].position = {GuiRCBitmap.clientwidth - lit#180, temp.buttons[lit#177].position[lit#178] + lit#179};
lit#181 = 7;
lit#182 = "left";
temp.buttons[lit#181].horizsizing = lit#182;
lit#183 = 7;
lit#184 = "options";
temp.buttons[lit#183].action = lit#184;
lit#185 = 8;
lit#186 = "LocalNPCs";
temp.buttons[lit#185] = lit#186;
lit#187 = 8;
lit#188 = "Local NPCs";
temp.buttons[lit#187].hint = lit#188;
lit#189 = 8;
lit#190 = 7;
lit#191 = 1;
lit#192 = 33;
lit#193 = 40;
temp.buttons[lit#189].position = {GuiRCBitmap.clientwidth - lit#193, temp.buttons[lit#190].position[lit#191] + lit#192};
lit#194 = 8;
lit#195 = "left";
temp.buttons[lit#194].horizsizing = lit#195;
lit#196 = 8;
lit#197 = false;
temp.buttons[lit#196].visible = lit#197;
lit#198 = 9;
lit#199 = "ClassList";
temp.buttons[lit#198] = lit#199;
lit#200 = 9;
lit#201 = "Classes";
temp.buttons[lit#200].hint = lit#201;
lit#202 = 9;
lit#203 = 8;
lit#204 = 1;
lit#205 = 33;
lit#206 = 40;
temp.buttons[lit#202].position = {GuiRCBitmap.clientwidth - lit#206, temp.buttons[lit#203].position[lit#204] + lit#205};
lit#207 = 9;
lit#208 = "left";
temp.buttons[lit#207].horizsizing = lit#208;
lit#209 = 9;
lit#210 = "classlist";
temp.buttons[lit#209].action = lit#210;
lit#211 = 10;
lit#212 = "WeaponList";
temp.buttons[lit#211] = lit#212;
lit#213 = 10;
lit#214 = "Weapons";
temp.buttons[lit#213].hint = lit#214;
lit#215 = 10;
lit#216 = 9;
lit#217 = 1;
lit#218 = 9;
lit#219 = 0;
lit#220 = 33;
temp.buttons[lit#215].position = {temp.buttons[lit#218].position[lit#219] - lit#220, temp.buttons[lit#216].position[lit#217]};
lit#221 = 10;
lit#222 = "left";
temp.buttons[lit#221].horizsizing = lit#222;
lit#223 = 10;
lit#224 = "weaponlist";
temp.buttons[lit#223].action = lit#224;
lit#225 = 11;
lit#226 = "NPCList";
temp.buttons[lit#225] = lit#226;
lit#227 = 11;
lit#228 = "NPCs";
temp.buttons[lit#227].hint = lit#228;
lit#229 = 11;
lit#230 = 9;
lit#231 = 1;
lit#232 = 10;
lit#233 = 0;
lit#234 = 33;
temp.buttons[lit#229].position = {temp.buttons[lit#232].position[lit#233] - lit#234, temp.buttons[lit#230].position[lit#231]};
lit#235 = 11;
lit#236 = "left";
temp.buttons[lit#235].horizsizing = lit#236;
lit#237 = 11;
lit#238 = "npclist";
temp.buttons[lit#237].action = lit#238;
lit#239 = 12;
lit#240 = "GUIScripts";
temp.buttons[lit#239] = lit#240;
lit#241 = 12;
lit#242 = "NPCs";
temp.buttons[lit#241].hint = lit#242;
lit#243 = 12;
lit#244 = 9;
lit#245 = 1;
lit#246 = 11;
lit#247 = 0;
lit#248 = 33;
temp.buttons[lit#243].position = {temp.buttons[lit#246].position[lit#247] - lit#248, temp.buttons[lit#244].position[lit#245]};
lit#249 = 12;
lit#250 = "left";
temp.buttons[lit#249].horizsizing = lit#250;
lit#251 = 12;
phi<idx=0, regions=()> = this.function_357_6;
// RegionId(16)
// RegionId(17)
with (GuiRCBitmap#3)
{
lit#254 = 0;
temp.i = lit#254;
builtin_fn_call#255 = temp.buttons.size();
while (temp.i < builtin_fn_call#255)
{
lit#256 = "GuiRC";
lit#257 = "Button";
gbf_new_obj#258 = (lit#256 @ temp.buttons[temp.i]) @ lit#257;
lit#259 = "GuiBitmapButtonCtrl";
new_node#260 = new lit#259(gbf_new_obj#258);
gbf_new_obj#261 = new_node#260;
// RegionId(19)
// RegionId(20)
with (gbf_new_obj#258)
{
lit#262 = 32;
lit#263 = 32;
extent#264 = {lit#263, lit#262};
lit#267 = "rc_";
lit#268 = "_normal.png";
normalbitmap#269 = (lit#267 @ temp.buttons[temp.i]) @ lit#268;
mouseoverbitmap#270 = normalbitmap#266;
lit#272 = "rc_";
lit#273 = "_pressed.png";
pressedbitmap#274 = (lit#272 @ temp.buttons[temp.i]) @ lit#273;
fn_call#277 = temp.buttons[temp.i].getdynamicvarnames();
lit#278 = 0;
for (phi<idx=0, regions=()> : phi<idx=1, regions=()>)
{
this.temp.varname = temp.buttons[temp.i].temp.varname;
phi<idx=0, regions=()>++;
}
lit#279 = "onGuiRCButtonPressed";
lit#280 = "onAction";
fn_call#283 = thiso.catchevent(this#4, lit#280, lit#279);
}
fn_call#284 = addcontrol#55(phi<idx=0, regions=()>);
temp.i++;
}
}
lit#285 = "GuiRCServerText";
gbf_new_obj#286 = lit#285;
lit#287 = "GuiTextCtrl";
new_node#288 = new lit#287(gbf_new_obj#286);
gbf_new_obj#289 = new_node#288;
// RegionId(26)
// RegionId(27)
with (gbf_new_obj#286)
{
lit#290 = "GuiRCGreenTextProfile";
profile#291 = lit#290;
lit#292 = 87;
lit#293 = 11;
position#294 = {lit#293, lit#292};
lit#295 = "none";
style#296 = lit#295;
lit#297 = "Server: ";
text#299 = lit#297 @ servername#298;
}
fn_call#300 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#302 = GuiRCBitmap.addcontrol(GuiRCServerText#301);
lit#303 = "GuiRCPlayersText";
gbf_new_obj#304 = lit#303;
lit#305 = "GuiTextCtrl";
new_node#306 = new lit#305(gbf_new_obj#304);
gbf_new_obj#307 = new_node#306;
// RegionId(28)
// RegionId(29)
with (gbf_new_obj#304)
{
lit#308 = "GuiRCGreenTextProfile";
profile#309 = lit#308;
lit#310 = 107;
lit#311 = 11;
position#312 = {lit#311, lit#310};
lit#313 = "none";
style#314 = lit#313;
}
fn_call#315 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#317 = GuiRCBitmap.addcontrol(GuiRCPlayersText#316);
lit#318 = "GuiRCTabs";
gbf_new_obj#319 = lit#318;
lit#320 = "GuiTabCtrl";
new_node#321 = new lit#320(gbf_new_obj#319);
gbf_new_obj#322 = new_node#321;
// RegionId(30)
// RegionId(31)
with (gbf_new_obj#319)
{
lit#323 = "GuiRCTabProfile";
profile#324 = lit#323;
lit#325 = 24;
extent#326 = {GuiRCBitmap.clientwidth, lit#325};
lit#328 = 1;
lit#329 = 0;
position#330 = {lit#329, GuiRCBitmap.clientheight - extent#326[lit#328]};
lit#332 = 64;
tabwidth#333 = lit#332;
lit#334 = "width";
horizsizing#335 = lit#334;
lit#336 = 0;
fn_call#338 = setselectedrow#337(lit#336);
}
fn_call#339 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#341 = GuiRCBitmap.addcontrol(GuiRCTabs#340);
fn_call#343 = GuiRCTabs.pushtoback();
lit#344 = "GuiRCConsole";
gbf_new_obj#345 = lit#344;
lit#346 = "GuiControl";
new_node#347 = new lit#346(gbf_new_obj#345);
gbf_new_obj#348 = new_node#347;
// RegionId(32)
// RegionId(33)
with (gbf_new_obj#345)
{
lit#350 = 0;
position#351 = {lit#350, GuiRCBitmap.height};
extent#352 = {GuiRC.clientwidth, GuiRC.clientheight - GuiRCBitmap.height};
lit#353 = "width";
horizsizing#354 = lit#353;
lit#356 = "height";
vertsizing#357 = lit#356;
}
fn_call#358 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#360 = GuiRC.addcontrol(GuiRCConsole#359);
lit#361 = "GuiRCConsoleTextEdit";
gbf_new_obj#362 = lit#361;
lit#363 = "GuiTextEditCtrl";
new_node#364 = new lit#363(gbf_new_obj#362);
gbf_new_obj#365 = new_node#364;
// RegionId(34)
// RegionId(35)
with (gbf_new_obj#362)
{
lit#366 = "GuiRCTextEditProfile";
profile#367 = lit#366;
lit#368 = 22;
extent#369 = {GuiRCConsole.clientwidth, lit#368};
lit#370 = 22;
lit#371 = 0;
position#372 = {lit#371, GuiRCConsole.clientheight - lit#370};
lit#373 = "none";
style#374 = lit#373;
lit#375 = "width";
horizsizing#376 = lit#375;
lit#377 = "top";
vertsizing#378 = lit#377;
}
fn_call#379 = addcontrol#55(phi<idx=0, regions=()>);
fn_call#381 = GuiRCConsole.addcontrol(GuiRCConsoleTextEdit#380);
fn_call#383 = updateGuiProfiles#382();
lit#384 = true;
GuiRC.visible = lit#384;
lit#385 = true;
fn_call#387 = GuiRCConsoleTextEdit.makefirstresponder(lit#385);
// RegionId(36)
// RegionId(37)
if (GuiRC.isexternal)
{
lit#390 = 3;
lit#391 = 2;
lit#393 = 3;
lit#394 = 2;
lit#396 = 2;
lit#397 = 2;
GuiRC.externalwindow.bounds = {(GuiRC.externalwindow.screenwidth - GuiRC.externalwindow.bounds[lit#396]) / lit#397, (GuiRC.externalwindow.screenheight - GuiRC.externalwindow.bounds[lit#393]) / lit#394, GuiRC.externalwindow.bounds[lit#391], GuiRC.externalwindow.bounds[lit#390]};
}
lit#398 = "RC Chat";
lit#399 = "join";
fn_call#401 = handleTabCommand#400(lit#399, {lit#398});
lit#402 = "Welcome to ";
fn_call#404 = getservername#403();
lit#405 = " RC. Type /help for a list of available commands.";
lit#406 = "RC Chat";
lit#407 = "";
lit#408 = "privmsg";
fn_call#409 = handleTabCommand#400(lit#408, {lit#407, lit#406, (lit#402 @ fn_call#404) @ lit#405});
lit#410 = 0;
return lit#410;
}
}
Use the mouse wheel + shift to zoom in and out, and click and drag to pan.
Use the mouse wheel + shift to zoom in and out, and click and drag to pan.
Step 1 of 72