Welcome to the GBF Test Portal

This was built to track decompiler and CFG progress.

Decompiler Output

Backtrace

{
  "frames": [
    {
      "line": 282,
      "file": ".\\gbf_core\\src\\decompiler\\function_decompiler_context.rs",
      "function": "gbf_core::decompiler::function_decompiler_context::FunctionDecompilerContext::pop_assignable"
    },
    {
      "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"
    }
  ]
}

Context

{
  "current_block_id": {
    "index": 6,
    "address": 6907,
    "block_type": "Normal"
  },
  "current_ast_node_stack": [
    {
      "StandaloneNode": {
        "Expression": {
          "Assignable": {
            "Identifier": {
              "metadata": {
                "properties": {},
                "comments": []
              },
              "node_id": 72223,
              "ptr": {
                "ssa_version": 40,
                "id": "gbf_new_obj"
              }
            }
          }
        }
      }
    },
    {
      "StandaloneNode": {
        "Expression": {
          "Assignable": {
            "Identifier": {
              "metadata": {
                "properties": {},
                "comments": []
              },
              "ptr": {
                "ssa_version": 18,
                "id": "gbf_new_obj"
              },
              "node_id": 72224
            }
          }
        }
      }
    },
    {
      "StandaloneNode": {
        "Expression": {
          "Assignable": {
            "Identifier": {
              "metadata": {
                "properties": {},
                "comments": []
              },
              "node_id": 72225,
              "ptr": {
                "ssa_version": 29,
                "id": "extent"
              }
            }
          }
        }
      }
    },
    {
      "BuildingArray": []
    }
  ],
  "current_instruction": {
    "opcode": "AccessMember",
    "operand": null,
    "address": 6924
  }
}
function joinTab(tab#0)
{
    fn_call#5 = GuiRCTabs.findtext(tab#0);
    lit#6 = 0;
    // RegionId(1)
    if (fn_call#5 >= lit#6) 
    {
        lit#7 = 0;
        return lit#7;
    }
    // RegionId(2)
    else
    {
        fn_call#9 = GuiRCTabs.rowcount();
        fn_call#11 = GuiRCTabs.addrow(fn_call#9, tab#0);
        fn_call#12 = GuiRCTabs.rowcount();
        lit#13 = 1;
        // RegionId(2)
        // RegionId(3)
        if (fn_call#12 == lit#13) 
        {
            lit#14 = 0;
            fn_call#16 = GuiRCTabs.setselectedrow(lit#14);
        }
        lit#17 = "GuiRCConsoleScroll_Tab_";
        gbf_new_obj#18 = lit#17 @ tab#0;
        lit#19 = "GuiScrollCtrl";
        new_node#20 = new lit#19(gbf_new_obj#18);
        gbf_new_obj#21 = new_node#20;
        // RegionId(4)
        // RegionId(5)
        with (gbf_new_obj#18) 
        {
            lit#23 = "GuiRCScrollProfile";
            profile#24 = lit#23;
            lit#28 = 22;
            extent#30 = {GuiRCConsole.clientwidth, GuiRCConsole.clientheight - lit#28};
            lit#32 = "alwaysOff";
            hscrollbar#33 = lit#32;
            lit#35 = "alwaysOn";
            vscrollbar#36 = lit#35;
            lit#38 = "width";
            horizsizing#39 = lit#38;
            lit#41 = "height";
            vertsizing#42 = lit#41;
            lit#44 = false;
            visible#45 = lit#44;
            lit#46 = "GuiRCConsoleMLText_Tab_";
            gbf_new_obj#47 = lit#46 @ tab#0;
            lit#48 = "GuiMLTextCtrl";
            new_node#49 = new lit#48(gbf_new_obj#47);
            gbf_new_obj#50 = new_node#49;
            // RegionId(5)
            // RegionId(6)
            with (gbf_new_obj#47) 
            {
                lit#51 = "GuiRCMLTextProfile";
                profile#52 = lit#51;
                lit#54 = 0;
                lit#55 = 4;
                position#56 = {lit#55, lit#54};
                lit#57 = "GuiRCConsoleScroll_Tab_";
                lit#58 = "GuiRCConsoleScroll_Tab_";
                lit#59 = 0;
                lit#60 = 20;
                extent#61 = {((lit#58 @ tab#0).clientwidth - position#56[lit#59]) - lit#60, lit#57 @ tab#0.clientheight};
                lit#62 = "width";
                horizsizing#63 = lit#62;
                lit#64 = "height";
                vertsizing#65 = lit#64;
                lit#67 = "b";
                lit#68 = "a";
                lit#69 = "font";
                allowedtags#70 = {lit#69, lit#68, lit#67};
                lit#72 = true;
                htmllinks#73 = lit#72;
                fn_call#75 = scrolltobottom#74();
            }
            fn_call#77 = addcontrol#76(phi<idx=0, regions=()>);
        }
        fn_call#78 = addcontrol#76(phi<idx=0, regions=()>);
        lit#79 = "GuiRCConsoleScroll_Tab_";
        fn_call#80 = GuiRCConsole.addcontrol(lit#79 @ tab#0);
        lit#81 = 0;
        temp.i = lit#81;
        fn_call#82 = GuiRCTabs.rowcount();
        while (temp.i < fn_call#82) 
        {
            lit#83 = "GuiRCConsoleScroll_Tab_";
            fn_call#86 = GuiRCTabs.rows[temp.i].gettext();
            fn_call#88 = GuiRCTabs.isrowselected(temp.i);
            lit#83 @ fn_call#86.visible = fn_call#88;
            temp.i++;
        }
        lit#89 = 0;
        return lit#89;
    }
}