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,
    "address": 4547,
    "block_type": "Normal"
  },
  "current_ast_node_stack": [
    {
      "BuildingArray": []
    }
  ],
  "current_instruction": {
    "opcode": "AccessMember",
    "operand": null,
    "address": 4554
  }
}
function showDeleteScript(texttype#1, textoptions#0)
{
    lit#4 = "_";
    temp.identity = (texttype#1 @ lit#4) @ textoptions#0;
    lit#5 = "GuiRCDeleteScript_";
    fn_call#7 = isobject#6(lit#5 @ temp.identity);
    // RegionId(0)
    // RegionId(1)
    if (fn_call#7) 
    {
        lit#8 = "GuiRCDeleteScript_";
        fn_call#10 = lit#8 @ temp.identity.destroy();
    }
    lit#11 = "GuiRCDeleteScript_";
    gbf_new_obj#12 = lit#11 @ temp.identity;
    lit#13 = "GuiWindowCtrl";
    new_node#14 = new lit#13(gbf_new_obj#12);
    gbf_new_obj#15 = new_node#14;
    // RegionId(2)
    // RegionId(3)
    with (gbf_new_obj#12) 
    {
        lit#17 = "GuiRCWindowProfile";
        profile#18 = lit#17;
        // RegionId(3)
        // RegionId(4)
        if (remotecontrol.options.noexternalstyle) 
        {
            lit#23 = "none";
        }
        // RegionId(5)
        else
        {
        }
        phi<idx=1, regions=()> = phi<idx=0, regions=()>;
        lit#26 = "Confirm Delete";
        text#27 = lit#26;
        lit#29 = true;
        isexternal#30 = lit#29;
        lit#32 = true;
        clientrelative#33 = lit#32;
        lit#35 = 96;
        lit#36 = 250;
        clientextent#37 = {lit#36, lit#35};
        lit#39 = true;
        closequery#40 = lit#39;
        lit#42 = false;
        canresize#43 = lit#42;
        lit#45 = false;
        canmaximize#46 = lit#45;
        lit#48 = false;
        canminimize#49 = lit#48;
        lit#51 = false;
        visible#52 = lit#51;
        lit#53 = "GuiRCDeleteScriptText_";
        gbf_new_obj#54 = lit#53 @ temp.identity;
        lit#55 = "GuiTextCtrl";
        new_node#56 = new lit#55(gbf_new_obj#54);
        gbf_new_obj#57 = new_node#56;
        // RegionId(6)
        // RegionId(7)
        with (gbf_new_obj#54) 
        {
            lit#58 = "GuiRCTextProfile";
            profile#59 = lit#58;
            lit#61 = 20;
            lit#62 = 20;
            position#63 = {lit#62, lit#61};
            lit#64 = "Delete ";
            lit#65 = " ";
            lit#66 = "?";
            text#67 = (((lit#64 @ texttype#1) @ lit#65) @ textoptions#0) @ lit#66;
        }
        fn_call#69 = addcontrol#68(phi<idx=0, regions=()>);
        lit#70 = "GuiRCDeleteScriptDeleteButton_";
        gbf_new_obj#71 = lit#70 @ temp.identity;
        lit#72 = "GuiButtonCtrl";
        new_node#73 = new lit#72(gbf_new_obj#71);
        gbf_new_obj#74 = new_node#73;
        // RegionId(8)
        // RegionId(9)
        with (gbf_new_obj#71) 
        {
            lit#75 = "GuiRCButtonProfile";
            profile#76 = lit#75;
            lit#78 = 24;
            lit#79 = 80;
            extent#80 = {lit#79, lit#78};
            lit#81 = 96;
            lit#82 = 1;
            lit#83 = 20;
            lit#84 = 20;
            position#85 = {lit#84, (lit#81 - extent#80[lit#82]) - lit#83};
            lit#86 = "Delete";
            text#87 = lit#86;
            lit#88 = "onGuiRCDeleteScriptDeleteButtonPressed";
            lit#89 = "onAction";
            fn_call#93 = thiso.catchevent(this#90, lit#89, lit#88);
        }
        fn_call#94 = addcontrol#68(phi<idx=0, regions=()>);
        lit#95 = "GuiRCDeleteScriptCancelButton_";
        gbf_new_obj#96 = lit#95 @ temp.identity;
        lit#97 = "GuiButtonCtrl";
        new_node#98 = new lit#97(gbf_new_obj#96);
        gbf_new_obj#99 = new_node#98;
        // RegionId(10)
        // RegionId(11)
        with (gbf_new_obj#96) 
        {
            lit#100 = "GuiRCButtonProfile";
            profile#101 = lit#100;
            lit#102 = 24;
            lit#103 = 80;
            extent#104 = {lit#103, lit#102};
            lit#105 = 96;
            lit#106 = 1;
            lit#107 = 20;
            lit#108 = 250;
            lit#109 = 0;
            lit#110 = 20;
            position#111 = {(lit#108 - extent#104[lit#109]) - lit#110, (lit#105 - extent#104[lit#106]) - lit#107};
            lit#112 = "Cancel";
            text#113 = lit#112;
            lit#114 = "onGuiRCDeleteScriptCloseQuery";
            lit#115 = "onAction";
            fn_call#116 = thiso.catchevent(this#90, lit#115, lit#114);
        }
        fn_call#117 = addcontrol#68(phi<idx=0, regions=()>);
        lit#118 = true;
        visible#119 = lit#118;
        lit#120 = "onGuiRCDeleteScriptCloseQuery";
        lit#121 = "onCloseQuery";
        fn_call#122 = thiso.catchevent(this#90, lit#121, lit#120);
        lit#123 = "onGuiRCDeleteScriptCloseQuery";
        lit#124 = "onHide";
        fn_call#125 = thiso.catchevent(this#90, lit#124, lit#123);
    }
    fn_call#126 = addcontrol#68(phi<idx=0, regions=()>);
    fn_call#129 = getTitleByTextType#128(texttype#1);
    temp.title = fn_call#129;
    lit#130 = "GuiRCDeleteScript_";
    lit#133 = "GuiRCDeleteScript_";
    lit#134 = 3;
    lit#135 = "GuiRCDeleteScript_";
    lit#136 = 2;
    lit#137 = 0;
    lit#138 = "GuiRC";
    lit#139 = "List";
    lit#140 = 1;
    lit#141 = "GuiRC";
    lit#142 = "List";
    lit#143 = 3;
    lit#144 = "GuiRCDeleteScript_";
    lit#145 = 3;
    lit#146 = 2;
    builtin_fn_call#147 = max(lit#137, ((lit#138 @ temp.title) @ lit#139).externalwindow.bounds[lit#140] + ((((lit#141 @ temp.title) @ lit#142).externalwindow.bounds[lit#143] - (lit#144 @ temp.identity).externalwindow.bounds[lit#145]) / lit#146));
    lit#148 = 0;
    lit#149 = "GuiRC";
    lit#150 = "List";
    lit#151 = 0;
    lit#152 = "GuiRC";
    lit#153 = "List";
    lit#154 = 2;
    lit#155 = "GuiRCDeleteScript_";
    lit#156 = 2;
    lit#157 = 2;
    builtin_fn_call#158 = max(lit#148, ((lit#149 @ temp.title) @ lit#150).externalwindow.bounds[lit#151] + ((((lit#152 @ temp.title) @ lit#153).externalwindow.bounds[lit#154] - (lit#155 @ temp.identity).externalwindow.bounds[lit#156]) / lit#157));
    lit#130 @ temp.identity.externalwindow.bounds = {builtin_fn_call#158, builtin_fn_call#147, lit#135 @ temp.identity.externalwindow.bounds[lit#136], lit#133 @ temp.identity.externalwindow.bounds[lit#134]};
    lit#159 = 0;
    return lit#159;
}