This was built to track decompiler and CFG progress.
Unexpected AstNode sub-type on stack. Expected Assignable.
{
"frames": [
{
"line": 282,
"function": "gbf_core::decompiler::function_decompiler_context::FunctionDecompilerContext::pop_assignable",
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler_context.rs"
},
{
"line": 33,
"file": ".\\gbf_core\\src\\decompiler\\handlers\\special_two_operand.rs",
"function": "gbf_core::decompiler::handlers::special_two_operand::impl$0::handle_instruction"
},
{
"line": 171,
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler_context.rs",
"function": "gbf_core::decompiler::function_decompiler_context::FunctionDecompilerContext::process_instruction"
},
{
"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": 16,
"block_type": "Normal",
"address": 3440
},
"current_ast_node_stack": [
{
"StandaloneNode": {
"Expression": {
"Assignable": {
"Identifier": {
"metadata": {
"properties": {},
"comments": []
},
"ptr": {
"ssa_version": 50,
"id": "gbf_new_obj"
},
"node_id": 64668
}
}
}
}
},
{
"StandaloneNode": {
"Expression": {
"Assignable": {
"Phi": {
"metadata": {
"properties": {},
"comments": []
},
"node_id": 64669,
"ptr": {
"index": 0,
"region_ids": [
[
{
"index": 14
},
"Fallthrough"
],
[
{
"index": 13
},
"Branch"
]
],
"ssa_version": null
}
}
}
}
}
},
{
"StandaloneNode": {
"Expression": {
"Assignable": {
"Identifier": {
"metadata": {
"properties": {},
"comments": []
},
"ptr": {
"ssa_version": 55,
"id": "extent"
},
"node_id": 64670
}
}
}
}
},
{
"BuildingArray": [
{
"Literal": {
"metadata": {
"properties": {},
"comments": []
},
"node_id": 64671,
"ptr": {
"Number": 20
}
}
}
]
}
],
"current_instruction": {
"opcode": "AccessMember",
"operand": null,
"address": 3460
}
}
function showAddScript(texttype#1, nextid#0)
{
temp.identity = timevar2#4;
lit#5 = "GuiRCAddScript_";
gbf_new_obj#6 = lit#5 @ temp.identity;
lit#7 = "GuiWindowCtrl";
new_node#8 = new lit#7(gbf_new_obj#6);
gbf_new_obj#9 = new_node#8;
// RegionId(0)
// RegionId(1)
with (gbf_new_obj#6)
{
lit#11 = "GuiRCWindowProfile";
profile#12 = lit#11;
// RegionId(1)
// RegionId(2)
if (remotecontrol.options.noexternalstyle)
{
lit#17 = "none";
}
// RegionId(3)
else
{
}
phi<idx=1, regions=()> = phi<idx=0, regions=()>;
lit#20 = "Add New ";
text#21 = lit#20;
lit#22 = "weapon";
// RegionId(4)
// RegionId(5)
if (texttype#1 == lit#22)
{
lit#23 = "Weapon";
text#24 = text#21 @ lit#23;
}
// RegionId(6)
else
{
lit#25 = "npc";
// RegionId(6)
// RegionId(7)
if (texttype#1 == lit#25)
{
lit#26 = "NPC";
text#27 = text#24 @ lit#26;
}
// RegionId(8)
else
{
lit#28 = "class";
// RegionId(8)
// RegionId(9)
if (texttype#1 == lit#28)
{
lit#29 = "Class";
text#30 = text#27 @ lit#29;
}
}
}
lit#32 = true;
isexternal#33 = lit#32;
lit#35 = true;
clientrelative#36 = lit#35;
lit#38 = "npc";
// RegionId(10)
// RegionId(11)
if (texttype#1 == lit#38)
{
lit#39 = 264;
lit#40 = 250;
}
// RegionId(12)
else
{
lit#41 = 96;
lit#42 = 250;
}
phi<idx=1, regions=()> = phi<idx=0, regions=()>;
lit#44 = true;
closequery#45 = lit#44;
lit#47 = false;
canresize#48 = lit#47;
lit#50 = false;
canmaximize#51 = lit#50;
lit#53 = false;
canminimize#54 = lit#53;
lit#56 = false;
visible#57 = lit#56;
lit#58 = "GuiRCAddScriptNameText_";
gbf_new_obj#59 = lit#58 @ temp.identity;
lit#60 = "GuiTextCtrl";
new_node#61 = new lit#60(gbf_new_obj#59);
gbf_new_obj#62 = new_node#61;
// RegionId(13)
// RegionId(14)
with (gbf_new_obj#59)
{
lit#63 = "GuiRCTextProfile";
profile#64 = lit#63;
lit#66 = 20;
lit#67 = 20;
position#68 = {lit#67, lit#66};
lit#69 = "Name:";
text#70 = lit#69;
}
fn_call#72 = addcontrol#71(phi<idx=0, regions=()>);
lit#73 = "GuiRCAddScriptNameTextEdit_";
gbf_new_obj#74 = lit#73 @ temp.identity;
lit#75 = "GuiTextEditCtrl";
new_node#76 = new lit#75(gbf_new_obj#74);
gbf_new_obj#77 = new_node#76;
// RegionId(15)
// RegionId(16)
with (gbf_new_obj#74)
{
lit#78 = "GuiRCTextEditProfile";
profile#79 = lit#78;
lit#80 = 20;
lit#81 = 72;
position#82 = {lit#81, lit#80};
lit#84 = 20;
lit#85 = "GuiRCAddScript_";
lit#86 = 0;
lit#87 = 0;
lit#88 = 20;
extent#89 = {((lit#85 @ temp.identity).clientextent[lit#86] - position#82[lit#87]) - lit#88, lit#84};
}
fn_call#90 = addcontrol#71(phi<idx=0, regions=()>);
lit#91 = "npc";
// RegionId(17)
// RegionId(18)
if (texttype#1 == lit#91)
{
lit#92 = "GuiRCAddScriptIDText_";
gbf_new_obj#93 = lit#92 @ temp.identity;
lit#94 = "GuiTextCtrl";
new_node#95 = new lit#94(gbf_new_obj#93);
gbf_new_obj#96 = new_node#95;
// RegionId(18)
// RegionId(19)
with (gbf_new_obj#93)
{
lit#97 = "GuiRCTextProfile";
profile#98 = lit#97;
lit#99 = 48;
lit#100 = 20;
position#101 = {lit#100, lit#99};
lit#102 = "ID:";
text#103 = lit#102;
}
fn_call#104 = addcontrol#71(phi<idx=0, regions=()>);
lit#105 = "GuiRCAddScriptIDTextEdit_";
gbf_new_obj#106 = lit#105 @ temp.identity;
lit#107 = "GuiTextEditCtrl";
new_node#108 = new lit#107(gbf_new_obj#106);
gbf_new_obj#109 = new_node#108;
// RegionId(20)
// RegionId(21)
with (gbf_new_obj#106)
{
lit#110 = "GuiRCTextEditProfile";
profile#111 = lit#110;
lit#113 = true;
useownprofile#114 = lit#113;
lit#116 = true;
profile.numbersonly = lit#116;
lit#117 = 48;
lit#118 = 72;
position#119 = {lit#118, lit#117};
lit#120 = 20;
lit#121 = "GuiRCAddScript_";
lit#122 = 0;
lit#123 = 0;
lit#124 = 20;
extent#125 = {((lit#121 @ temp.identity).clientextent[lit#122] - position#119[lit#123]) - lit#124, lit#120};
text#126 = nextid#0;
}
fn_call#127 = addcontrol#71(phi<idx=0, regions=()>);
lit#128 = "GuiRCAddScriptTypeText_";
gbf_new_obj#129 = lit#128 @ temp.identity;
lit#130 = "GuiTextCtrl";
new_node#131 = new lit#130(gbf_new_obj#129);
gbf_new_obj#132 = new_node#131;
// RegionId(22)
// RegionId(23)
with (gbf_new_obj#129)
{
lit#133 = "GuiRCTextProfile";
profile#134 = lit#133;
lit#135 = 76;
lit#136 = 20;
position#137 = {lit#136, lit#135};
lit#138 = "Type:";
text#139 = lit#138;
}
fn_call#140 = addcontrol#71(phi<idx=0, regions=()>);
lit#141 = "GuiRCAddScriptTypeTextEdit_";
gbf_new_obj#142 = lit#141 @ temp.identity;
lit#143 = "GuiTextEditCtrl";
new_node#144 = new lit#143(gbf_new_obj#142);
gbf_new_obj#145 = new_node#144;
// RegionId(24)
// RegionId(25)
with (gbf_new_obj#142)
{
lit#146 = "GuiRCTextEditProfile";
profile#147 = lit#146;
lit#148 = 76;
lit#149 = 72;
position#150 = {lit#149, lit#148};
lit#151 = 20;
lit#152 = "GuiRCAddScript_";
lit#153 = 0;
lit#154 = 0;
lit#155 = 20;
extent#156 = {((lit#152 @ temp.identity).clientextent[lit#153] - position#150[lit#154]) - lit#155, lit#151};
lit#157 = "OBJECT";
text#158 = lit#157;
}
fn_call#159 = addcontrol#71(phi<idx=0, regions=()>);
lit#160 = "GuiRCAddScriptScripterText_";
gbf_new_obj#161 = lit#160 @ temp.identity;
lit#162 = "GuiTextCtrl";
new_node#163 = new lit#162(gbf_new_obj#161);
gbf_new_obj#164 = new_node#163;
// RegionId(26)
// RegionId(27)
with (gbf_new_obj#161)
{
lit#165 = "GuiRCTextProfile";
profile#166 = lit#165;
lit#167 = 104;
lit#168 = 20;
position#169 = {lit#168, lit#167};
lit#170 = "Scripter:";
text#171 = lit#170;
}
fn_call#172 = addcontrol#71(phi<idx=0, regions=()>);
lit#173 = "GuiRCAddScriptScripterTextEdit_";
gbf_new_obj#174 = lit#173 @ temp.identity;
lit#175 = "GuiTextEditCtrl";
new_node#176 = new lit#175(gbf_new_obj#174);
gbf_new_obj#177 = new_node#176;
// RegionId(28)
// RegionId(29)
with (gbf_new_obj#174)
{
lit#178 = "GuiRCTextEditProfile";
profile#179 = lit#178;
lit#180 = 104;
lit#181 = 72;
position#182 = {lit#181, lit#180};
lit#183 = 20;
lit#184 = "GuiRCAddScript_";
lit#185 = 0;
lit#186 = 0;
lit#187 = 20;
extent#188 = {((lit#184 @ temp.identity).clientextent[lit#185] - position#182[lit#186]) - lit#187, lit#183};
text#191 = player.account;
}
fn_call#192 = addcontrol#71(phi<idx=0, regions=()>);
lit#193 = "GuiRCAddScriptLevelText_";
gbf_new_obj#194 = lit#193 @ temp.identity;
lit#195 = "GuiTextCtrl";
new_node#196 = new lit#195(gbf_new_obj#194);
gbf_new_obj#197 = new_node#196;
// RegionId(30)
// RegionId(31)
with (gbf_new_obj#194)
{
lit#198 = "GuiRCTextProfile";
profile#199 = lit#198;
lit#200 = 132;
lit#201 = 20;
position#202 = {lit#201, lit#200};
lit#203 = "Level:";
text#204 = lit#203;
}
fn_call#205 = addcontrol#71(phi<idx=0, regions=()>);
lit#206 = "GuiRCAddScriptLevelTextEdit_";
gbf_new_obj#207 = lit#206 @ temp.identity;
lit#208 = "GuiTextEditCtrl";
new_node#209 = new lit#208(gbf_new_obj#207);
gbf_new_obj#210 = new_node#209;
// RegionId(32)
// RegionId(33)
with (gbf_new_obj#207)
{
lit#211 = "GuiRCTextEditProfile";
profile#212 = lit#211;
lit#213 = 132;
lit#214 = 72;
position#215 = {lit#214, lit#213};
lit#216 = 20;
lit#217 = "GuiRCAddScript_";
lit#218 = 0;
lit#219 = 0;
lit#220 = 20;
extent#221 = {((lit#217 @ temp.identity).clientextent[lit#218] - position#215[lit#219]) - lit#220, lit#216};
lit#222 = "onlinestartlocal.nw";
text#223 = lit#222;
}
fn_call#224 = addcontrol#71(phi<idx=0, regions=()>);
lit#225 = "GuiRCAddScriptXText_";
gbf_new_obj#226 = lit#225 @ temp.identity;
lit#227 = "GuiTextCtrl";
new_node#228 = new lit#227(gbf_new_obj#226);
gbf_new_obj#229 = new_node#228;
// RegionId(34)
// RegionId(35)
with (gbf_new_obj#226)
{
lit#230 = "GuiRCTextProfile";
profile#231 = lit#230;
lit#232 = 160;
lit#233 = 20;
position#234 = {lit#233, lit#232};
lit#235 = "X:";
text#236 = lit#235;
}
fn_call#237 = addcontrol#71(phi<idx=0, regions=()>);
lit#238 = "GuiRCAddScriptXTextEdit_";
gbf_new_obj#239 = lit#238 @ temp.identity;
lit#240 = "GuiTextEditCtrl";
new_node#241 = new lit#240(gbf_new_obj#239);
gbf_new_obj#242 = new_node#241;
// RegionId(36)
// RegionId(37)
with (gbf_new_obj#239)
{
lit#243 = "GuiRCTextEditProfile";
profile#244 = lit#243;
lit#245 = true;
useownprofile#246 = lit#245;
lit#247 = true;
profile.numbersonly = lit#247;
lit#248 = 160;
lit#249 = 72;
position#250 = {lit#249, lit#248};
lit#251 = 20;
lit#252 = "GuiRCAddScript_";
lit#253 = 0;
lit#254 = 0;
lit#255 = 20;
extent#256 = {((lit#252 @ temp.identity).clientextent[lit#253] - position#250[lit#254]) - lit#255, lit#251};
lit#257 = "30";
text#258 = lit#257;
}
fn_call#259 = addcontrol#71(phi<idx=0, regions=()>);
lit#260 = "GuiRCAddScriptYText_";
gbf_new_obj#261 = lit#260 @ temp.identity;
lit#262 = "GuiTextCtrl";
new_node#263 = new lit#262(gbf_new_obj#261);
gbf_new_obj#264 = new_node#263;
// RegionId(38)
// RegionId(39)
with (gbf_new_obj#261)
{
lit#265 = "GuiRCTextProfile";
profile#266 = lit#265;
lit#267 = 188;
lit#268 = 20;
position#269 = {lit#268, lit#267};
lit#270 = "Y:";
text#271 = lit#270;
}
fn_call#272 = addcontrol#71(phi<idx=0, regions=()>);
lit#273 = "GuiRCAddScriptYTextEdit_";
gbf_new_obj#274 = lit#273 @ temp.identity;
lit#275 = "GuiTextEditCtrl";
new_node#276 = new lit#275(gbf_new_obj#274);
gbf_new_obj#277 = new_node#276;
// RegionId(40)
// RegionId(41)
with (gbf_new_obj#274)
{
lit#278 = "GuiRCTextEditProfile";
profile#279 = lit#278;
lit#280 = true;
useownprofile#281 = lit#280;
lit#282 = true;
profile.numbersonly = lit#282;
lit#283 = 188;
lit#284 = 72;
position#285 = {lit#284, lit#283};
lit#286 = 20;
lit#287 = "GuiRCAddScript_";
lit#288 = 0;
lit#289 = 0;
lit#290 = 20;
extent#291 = {((lit#287 @ temp.identity).clientextent[lit#288] - position#285[lit#289]) - lit#290, lit#286};
lit#292 = "30";
text#293 = lit#292;
}
fn_call#294 = addcontrol#71(phi<idx=0, regions=()>);
}
lit#295 = "GuiRCAddScriptAddButton_";
gbf_new_obj#296 = lit#295 @ temp.identity;
lit#297 = "GuiButtonCtrl";
new_node#298 = new lit#297(gbf_new_obj#296);
gbf_new_obj#299 = new_node#298;
// RegionId(43)
// RegionId(44)
with (gbf_new_obj#296)
{
lit#300 = "GuiRCButtonProfile";
profile#301 = lit#300;
lit#302 = 24;
lit#303 = 80;
extent#304 = {lit#303, lit#302};
lit#305 = "GuiRCAddScript_";
lit#306 = 1;
lit#307 = 1;
lit#308 = 20;
lit#309 = 20;
position#310 = {lit#309, ((lit#305 @ temp.identity).clientextent[lit#306] - extent#304[lit#307]) - lit#308};
lit#311 = "Add";
text#312 = lit#311;
lit#313 = "onGuiRCAddScriptAddButtonPressed";
lit#314 = "onAction";
fn_call#318 = thiso.catchevent(this#315, lit#314, lit#313);
}
fn_call#319 = addcontrol#71(phi<idx=0, regions=()>);
lit#320 = "GuiRCAddScriptCancelButton_";
gbf_new_obj#321 = lit#320 @ temp.identity;
lit#322 = "GuiButtonCtrl";
new_node#323 = new lit#322(gbf_new_obj#321);
gbf_new_obj#324 = new_node#323;
// RegionId(45)
// RegionId(46)
with (gbf_new_obj#321)
{
lit#325 = "GuiRCButtonProfile";
profile#326 = lit#325;
lit#327 = 24;
lit#328 = 80;
extent#329 = {lit#328, lit#327};
lit#330 = "GuiRCAddScript_";
lit#331 = 1;
lit#332 = 1;
lit#333 = 20;
lit#334 = 250;
lit#335 = 0;
lit#336 = 20;
position#337 = {(lit#334 - extent#329[lit#335]) - lit#336, ((lit#330 @ temp.identity).clientextent[lit#331] - extent#329[lit#332]) - lit#333};
lit#338 = "Cancel";
text#339 = lit#338;
lit#340 = "onGuiRCAddScriptCloseQuery";
lit#341 = "onAction";
fn_call#342 = thiso.catchevent(this#315, lit#341, lit#340);
}
fn_call#343 = addcontrol#71(phi<idx=0, regions=()>);
lit#344 = true;
visible#345 = lit#344;
fn_call#348 = getTitleByTextType#347(texttype#1);
temp.title = fn_call#348;
lit#350 = "GuiRC";
lit#351 = "ListTextList";
builtin_fn_call#353 = (lit#350 @ temp.title) @ lit#351.rows.size();
this.existingscripts = new [builtin_fn_call#353];
lit#355 = 0;
temp.i = lit#355;
builtin_fn_call#356 = this.existingscripts.size();
while (temp.i < builtin_fn_call#356)
{
lit#357 = "GuiRC";
lit#358 = "ListTextList";
this.existingscripts[temp.i] = (lit#357 @ temp.title) @ lit#358.rows[temp.i].text;
temp.i++;
}
lit#359 = "onRCAddScriptCloseQuery";
lit#360 = "onCloseQuery";
fn_call#361 = thiso.catchevent(this#315, lit#360, lit#359);
lit#362 = "onRCAddScriptCloseQuery";
lit#363 = "onHide";
fn_call#364 = thiso.catchevent(this#315, lit#363, lit#362);
}
fn_call#365 = addcontrol#71(phi<idx=0, regions=()>);
lit#366 = true;
lit#367 = "GuiRCAddScriptNameTextEdit_";
fn_call#369 = lit#367 @ temp.identity.makefirstresponder(lit#366);
lit#370 = "GuiRCAddScript_";
lit#370 @ temp.identity.texttype = texttype#1;
fn_call#371 = getTitleByTextType#347(texttype#1);
temp.title = fn_call#371;
lit#372 = "GuiRCAddScript_";
lit#375 = "GuiRCAddScript_";
lit#376 = 3;
lit#377 = "GuiRCAddScript_";
lit#378 = 2;
lit#379 = 0;
lit#380 = "GuiRC";
lit#381 = "List";
lit#382 = 1;
lit#383 = "GuiRC";
lit#384 = "List";
lit#385 = 3;
lit#386 = "GuiRCAddScript_";
lit#387 = 3;
lit#388 = 2;
builtin_fn_call#389 = max(lit#379, ((lit#380 @ temp.title) @ lit#381).externalwindow.bounds[lit#382] + ((((lit#383 @ temp.title) @ lit#384).externalwindow.bounds[lit#385] - (lit#386 @ temp.identity).externalwindow.bounds[lit#387]) / lit#388));
lit#390 = 0;
lit#391 = "GuiRC";
lit#392 = "List";
lit#393 = 0;
lit#394 = "GuiRC";
lit#395 = "List";
lit#396 = 2;
lit#397 = "GuiRCAddScript_";
lit#398 = 2;
lit#399 = 2;
builtin_fn_call#400 = max(lit#390, ((lit#391 @ temp.title) @ lit#392).externalwindow.bounds[lit#393] + ((((lit#394 @ temp.title) @ lit#395).externalwindow.bounds[lit#396] - (lit#397 @ temp.identity).externalwindow.bounds[lit#398]) / lit#399));
lit#372 @ temp.identity.externalwindow.bounds = {builtin_fn_call#400, builtin_fn_call#389, lit#377 @ temp.identity.externalwindow.bounds[lit#378], lit#375 @ temp.identity.externalwindow.bounds[lit#376]};
lit#401 = 0;
return lit#401;
}
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 95