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,
"function": "gbf_core::decompiler::handlers::special_two_operand::impl$0::handle_instruction",
"file": ".\\gbf_core\\src\\decompiler\\handlers\\special_two_operand.rs"
},
{
"line": 171,
"function": "gbf_core::decompiler::function_decompiler_context::FunctionDecompilerContext::process_instruction",
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler_context.rs"
},
{
"line": 467,
"function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::process_regions",
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs"
},
{
"line": 286,
"file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs",
"function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::decompile"
}
]
}
{
"current_block_id": {
"index": 1,
"block_type": "Normal",
"address": 2568
},
"current_ast_node_stack": [
{
"BuildingArray": []
}
],
"current_instruction": {
"opcode": "AccessMember",
"operand": null,
"address": 2577
}
}
function showList(title#2, items#1, buttons#0)
{
lit#3 = "GuiRC";
lit#4 = "List";
fn_call#6 = isobject#5((lit#3 @ title#2) @ lit#4);
// RegionId(0)
// RegionId(1)
if (fn_call#6)
{
lit#7 = "GuiRC";
lit#8 = "List";
fn_call#10 = (lit#7 @ title#2) @ lit#8.destroy();
}
lit#11 = "GuiRC";
lit#12 = "List";
gbf_new_obj#13 = (lit#11 @ title#2) @ lit#12;
lit#14 = "GuiWindowCtrl";
new_node#15 = new lit#14(gbf_new_obj#13);
gbf_new_obj#16 = new_node#15;
// RegionId(2)
// RegionId(3)
with (gbf_new_obj#13)
{
text#18 = title#2;
lit#20 = "GuiRCWindowProfile";
profile#21 = lit#20;
// RegionId(3)
// RegionId(4)
if (remotecontrol.options.noexternalstyle)
{
lit#26 = "none";
}
// RegionId(5)
else
{
}
phi<idx=1, regions=()> = phi<idx=0, regions=()>;
lit#29 = true;
clientrelative#30 = lit#29;
lit#32 = true;
closequery#33 = lit#32;
lit#35 = true;
isexternal#36 = lit#35;
lit#38 = 350;
lit#39 = 500;
clientextent#40 = {lit#39, lit#38};
lit#42 = false;
visible#43 = lit#42;
lit#44 = "GuiRC";
lit#45 = "ListScroll";
gbf_new_obj#46 = (lit#44 @ title#2) @ lit#45;
lit#47 = "GuiScrollCtrl";
new_node#48 = new lit#47(gbf_new_obj#46);
gbf_new_obj#49 = new_node#48;
// RegionId(6)
// RegionId(7)
with (gbf_new_obj#46)
{
lit#50 = "GuiRCScrollProfile";
profile#51 = lit#50;
lit#53 = 326;
lit#54 = 500;
extent#55 = {lit#54, lit#53};
lit#57 = "alwaysOff";
hscrollbar#58 = lit#57;
lit#60 = "alwaysOn";
vscrollbar#61 = lit#60;
lit#63 = "width";
horizsizing#64 = lit#63;
lit#66 = "height";
vertsizing#67 = lit#66;
lit#68 = "GuiRC";
lit#69 = "ListTextList";
gbf_new_obj#70 = (lit#68 @ title#2) @ lit#69;
lit#71 = "GuiTextListCtrl";
new_node#72 = new lit#71(gbf_new_obj#70);
gbf_new_obj#73 = new_node#72;
// RegionId(7)
// RegionId(8)
with (gbf_new_obj#70)
{
lit#74 = "GuiRCTextListProfile";
profile#75 = lit#74;
lit#77 = 474;
width#78 = lit#77;
lit#79 = "width";
horizsizing#80 = lit#79;
lit#82 = false;
allowmultipleselections#83 = lit#82;
lit#86 = 0;
temp.i = lit#86;
builtin_fn_call#87 = items#1.size();
while (temp.i < builtin_fn_call#87)
{
fn_call#89 = addrow#88(temp.i, items#1[temp.i]);
temp.i++;
}
fn_call#91 = sort#90();
lit#92 = "onGuiRCListEditButtonPressed";
lit#93 = "onDblClick";
fn_call#97 = thiso.catchevent(this#94, lit#93, lit#92);
lit#98 = "onGuiRCListOpenMenu";
lit#99 = "onOpenMenu";
fn_call#100 = thiso.catchevent(this#94, lit#99, lit#98);
lit#101 = "onGuiRCListKeyDown";
lit#102 = "onKeyDown";
fn_call#103 = thiso.catchevent(this#94, lit#102, lit#101);
}
fn_call#105 = addcontrol#104(phi<idx=0, regions=()>);
}
fn_call#106 = addcontrol#104(phi<idx=0, regions=()>);
lit#107 = 0;
temp.i = lit#107;
builtin_fn_call#108 = buttons#0.size();
while (temp.i < builtin_fn_call#108)
{
lit#109 = "GuiRC";
lit#110 = "List";
lit#111 = "Button";
gbf_new_obj#112 = (((lit#109 @ title#2) @ lit#110) @ buttons#0[temp.i]) @ lit#111;
lit#113 = "GuiButtonCtrl";
new_node#114 = new lit#113(gbf_new_obj#112);
gbf_new_obj#115 = new_node#114;
// RegionId(15)
// RegionId(16)
with (gbf_new_obj#112)
{
lit#116 = "GuiRCButtonProfile";
profile#117 = lit#116;
lit#118 = 24;
lit#119 = 80;
extent#120 = {lit#119, lit#118};
lit#122 = 350;
lit#123 = 1;
lit#124 = 500;
lit#125 = 0;
builtin_fn_call#126 = buttons#0.size();
position#127 = {lit#124 - (extent#120[lit#125] * (builtin_fn_call#126 - temp.i)), lit#122 - extent#120[lit#123]};
lit#128 = "left";
horizsizing#129 = lit#128;
lit#130 = "top";
vertsizing#131 = lit#130;
text#132 = buttons#0[temp.i];
lit#133 = "onGuiRCList";
lit#134 = "ButtonPressed";
lit#135 = "onAction";
fn_call#136 = thiso.catchevent(this#94, lit#135, (lit#133 @ buttons#0[temp.i]) @ lit#134);
}
fn_call#137 = addcontrol#104(phi<idx=0, regions=()>);
temp.i++;
}
lit#138 = true;
visible#139 = lit#138;
lit#140 = "onGuiRCListCloseQuery";
lit#141 = "onCloseQuery";
fn_call#142 = thiso.catchevent(this#94, lit#141, lit#140);
lit#143 = "onGuiRCListCloseQuery";
lit#144 = "onHide";
fn_call#145 = thiso.catchevent(this#94, lit#144, lit#143);
}
fn_call#146 = addcontrol#104(phi<idx=0, regions=()>);
lit#147 = true;
lit#148 = "GuiRC";
lit#149 = "ListTextList";
fn_call#151 = (lit#148 @ title#2) @ lit#149.makefirstresponder(lit#147);
lit#152 = "GuiRC";
lit#153 = "List";
lit#156 = "GuiRC";
lit#157 = "List";
lit#158 = 3;
lit#159 = "GuiRC";
lit#160 = "List";
lit#161 = 2;
lit#163 = 1;
lit#164 = 32;
lit#165 = 0;
lit#166 = 32;
(lit#152 @ title#2) @ lit#153.externalwindow.bounds = {GuiRC.externalwindow.bounds[lit#165] + lit#166, GuiRC.externalwindow.bounds[lit#163] + lit#164, (lit#159 @ title#2) @ lit#160.externalwindow.bounds[lit#161], (lit#156 @ title#2) @ lit#157.externalwindow.bounds[lit#158]};
lit#167 = 0;
return lit#167;
}
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 37