Welcome to the GBF Test Portal

This was built to track decompiler and CFG progress.

Decompiler Output

Backtrace

{
  "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"
    }
  ]
}

Context

{
  "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;
}