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": 32,
      "file": ".\\gbf_core\\src\\decompiler\\handlers\\special_two_operand.rs",
      "function": "gbf_core::decompiler::handlers::special_two_operand::impl$0::handle_instruction"
    },
    {
      "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,
      "function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::decompile",
      "file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs"
    }
  ]
}

Context

{
  "current_block_id": {
    "index": 2,
    "address": 1222,
    "block_type": "Normal"
  },
  "current_ast_node_stack": [
    {
      "StandaloneNode": {
        "Expression": {
          "Assignable": {
            "MemberAccess": {
              "metadata": {
                "properties": {},
                "comments": []
              },
              "ptr": {
                "rhs": {
                  "Identifier": {
                    "metadata": {
                      "properties": {},
                      "comments": []
                    },
                    "node_id": 39175,
                    "ptr": {
                      "ssa_version": null,
                      "id": "button"
                    }
                  }
                },
                "lhs": {
                  "Identifier": {
                    "metadata": {
                      "properties": {},
                      "comments": []
                    },
                    "node_id": 39174,
                    "ptr": {
                      "ssa_version": null,
                      "id": "temp"
                    }
                  }
                },
                "ssa_version": 2
              },
              "node_id": 39176
            }
          }
        }
      }
    },
    {
      "StandaloneNode": {
        "Expression": {
          "Assignable": {
            "MemberAccess": {
              "metadata": {
                "properties": {},
                "comments": []
              },
              "node_id": 39179,
              "ptr": {
                "rhs": {
                  "Identifier": {
                    "metadata": {
                      "properties": {},
                      "comments": []
                    },
                    "node_id": 39178,
                    "ptr": {
                      "ssa_version": null,
                      "id": "bitmaps"
                    }
                  }
                },
                "lhs": {
                  "Identifier": {
                    "metadata": {
                      "properties": {},
                      "comments": []
                    },
                    "node_id": 39177,
                    "ptr": {
                      "ssa_version": null,
                      "id": "temp"
                    }
                  }
                },
                "ssa_version": 6
              }
            }
          }
        }
      }
    }
  ],
  "current_instruction": {
    "opcode": "AccessMember",
    "operand": null,
    "address": 1235
  }
}
function public.updateGuiProfiles()
{
    lit#7 = "TStaticVar";
    new_node#8 = new lit#7(unknown_object#6);
    temp.bitmaps = new_node#8;
    fn_call#13 = temp.bitmaps.loadvarsfromarray(remotecontrol.options.guibitmapsprofile);
    lit#14 = "GUIScripts";
    lit#15 = "ClassList";
    lit#16 = "WeaponList";
    lit#17 = "NPCList";
    lit#18 = "ServerOptions";
    lit#19 = "FolderOptions";
    lit#20 = "ServerFlags";
    lit#21 = "Options";
    lit#22 = "Accounts";
    lit#23 = "FileBrowser";
    lit#24 = "PlayerList";
    temp.buttons = {lit#24, lit#23, lit#22, lit#21, lit#20, lit#19, lit#18, lit#17, lit#16, lit#15, lit#14};
    lit#25 = 0;
    for (phi<idx=0, regions=()> : phi<idx=1, regions=()>) 
    {
        lit#26 = "icon";
        fn_call#28 = lowercase#27(temp.button);
        lit#29 = null;
        // RegionId(2)
        // RegionId(3)
        if (temp.bitmaps.(lit#26 @ fn_call#28) == lit#29) 
        {
            lit#30 = "icon";
            fn_call#31 = lowercase#27(temp.button);
            lit#32 = "rc_";
            fn_call#33 = lowercase#27(temp.button);
            lit#34 = "_normal.png";
            temp.bitmaps.lit#30 @ fn_call#31 = (lit#32 @ fn_call#33) @ lit#34;
        }
        lit#35 = "icon";
        fn_call#36 = lowercase#27(temp.button);
        lit#37 = "pressed";
        lit#38 = null;
        // RegionId(4)
        // RegionId(5)
        if (temp.bitmaps.((lit#35 @ fn_call#36) @ lit#37) == lit#38) 
        {
            lit#39 = "icon";
            fn_call#40 = lowercase#27(temp.button);
            lit#41 = "pressed";
            lit#42 = "rc_";
            fn_call#43 = lowercase#27(temp.button);
            lit#44 = "_pressed.png";
            temp.bitmaps.(lit#39 @ fn_call#40) @ lit#41 = (lit#42 @ fn_call#43) @ lit#44;
        }
        fn_call#45 = this.isOpen();
        // RegionId(6)
        // RegionId(7)
        if (fn_call#45) 
        {
            lit#46 = "GuiRC";
            lit#47 = "Button";
            lit#49 = "GuiRC";
            lit#50 = "Button";
            lit#52 = "icon";
            fn_call#53 = lowercase#27(temp.button);
            (lit#49 @ temp.button) @ lit#50.normalbitmap = temp.bitmaps.lit#52 @ fn_call#53;
            (lit#46 @ temp.button) @ lit#47.mouseoverbitmap = (lit#49 @ temp.button) @ lit#50.normalbitmap;
            lit#54 = "GuiRC";
            lit#55 = "Button";
            lit#57 = "icon";
            fn_call#58 = lowercase#27(temp.button);
            lit#59 = "pressed";
            (lit#54 @ temp.button) @ lit#55.pressedbitmap = temp.bitmaps.(lit#57 @ fn_call#58) @ lit#59;
        }
        phi<idx=0, regions=()>++;
    }
    lit#61 = null;
    // RegionId(9)
    // RegionId(10)
    if (temp.bitmaps.background == lit#61) 
    {
        lit#62 = "rc_graalonline.jpg";
        temp.bitmaps.background = lit#62;
    }
    fn_call#63 = this.isOpen();
    // RegionId(11)
    // RegionId(12)
    if (fn_call#63) 
    {
        GuiRCBitmap.bitmap = temp.bitmaps.background;
    }
    lit#66 = true;
    fn_call#68 = temp.bitmaps.savevarstoarray(lit#66);
    remotecontrol.options.guibitmapsprofile = fn_call#68;
    lit#69 = "GuiRCWindowProfile";
    gbf_new_obj#70 = lit#69;
    lit#71 = "GuiBlueWindowProfile";
    new_node#72 = new lit#71(gbf_new_obj#70);
    gbf_new_obj#73 = new_node#72;
    // RegionId(13)
    // RegionId(14)
    with (gbf_new_obj#70) 
    {
        fn_call#75 = this.loadvarsfromarray(remotecontrol.options.guiwindowprofile);
    }
    fn_call#77 = addcontrol#76(phi<idx=0, regions=()>);
    lit#78 = "GuiRCTextProfile";
    gbf_new_obj#79 = lit#78;
    lit#80 = "GuiBlueTextProfile";
    new_node#81 = new lit#80(gbf_new_obj#79);
    gbf_new_obj#82 = new_node#81;
    // RegionId(15)
    // RegionId(16)
    with (gbf_new_obj#79) 
    {
        lit#84 = 14;
        fontsize#85 = lit#84;
        fn_call#87 = this.loadvarsfromarray(remotecontrol.options.guitextprofile);
    }
    fn_call#88 = addcontrol#76(phi<idx=0, regions=()>);
    lit#89 = "GuiRCGreenTextProfile";
    gbf_new_obj#90 = lit#89;
    lit#91 = "GuiBlueTextProfile";
    new_node#92 = new lit#91(gbf_new_obj#90);
    gbf_new_obj#93 = new_node#92;
    // RegionId(17)
    // RegionId(18)
    with (gbf_new_obj#90) 
    {
        lit#95 = 0;
        lit#96 = 255;
        lit#97 = 0;
        fontcolor#98 = {lit#97, lit#96, lit#95};
        lit#100 = "b";
        fontstyle#101 = lit#100;
        lit#102 = 18;
        fontsize#103 = lit#102;
        lit#105 = true;
        textshadow#106 = lit#105;
        lit#108 = 1;
        lit#109 = 1;
        shadowoffset#110 = {lit#109, lit#108};
        lit#112 = 0;
        lit#113 = 0;
        lit#114 = 0;
        shadowcolor#115 = {lit#114, lit#113, lit#112};
        fn_call#117 = this.loadvarsfromarray(remotecontrol.options.guigreentextprofile);
    }
    fn_call#118 = addcontrol#76(phi<idx=0, regions=()>);
    lit#119 = "GuiRCTabProfile";
    gbf_new_obj#120 = lit#119;
    lit#121 = "GuiBlueTabProfile";
    new_node#122 = new lit#121(gbf_new_obj#120);
    gbf_new_obj#123 = new_node#122;
    // RegionId(19)
    // RegionId(20)
    with (gbf_new_obj#120) 
    {
        fn_call#125 = this.loadvarsfromarray(remotecontrol.options.guitabprofile);
    }
    fn_call#126 = addcontrol#76(phi<idx=0, regions=()>);
    lit#127 = "GuiRCScrollProfile";
    gbf_new_obj#128 = lit#127;
    lit#129 = "GuiBlueScrollProfile";
    new_node#130 = new lit#129(gbf_new_obj#128);
    gbf_new_obj#131 = new_node#130;
    // RegionId(21)
    // RegionId(22)
    with (gbf_new_obj#128) 
    {
        fn_call#133 = this.loadvarsfromarray(remotecontrol.options.guiscrollprofile);
    }
    fn_call#134 = addcontrol#76(phi<idx=0, regions=()>);
    lit#135 = "GuiRCMLTextProfile";
    gbf_new_obj#136 = lit#135;
    lit#137 = "GuiBlueMLTextProfile";
    new_node#138 = new lit#137(gbf_new_obj#136);
    gbf_new_obj#139 = new_node#138;
    // RegionId(23)
    // RegionId(24)
    with (gbf_new_obj#136) 
    {
        fontsize#141 = remotecontrol.options.consolefontsize;
        fn_call#143 = this.loadvarsfromarray(remotecontrol.options.guimltextprofile);
    }
    fn_call#144 = addcontrol#76(phi<idx=0, regions=()>);
    lit#145 = "GuiRCMLTextEditProfile";
    gbf_new_obj#146 = lit#145;
    lit#147 = "GuiBlueMLTextProfile";
    new_node#148 = new lit#147(gbf_new_obj#146);
    gbf_new_obj#149 = new_node#148;
    // RegionId(25)
    // RegionId(26)
    with (gbf_new_obj#146) 
    {
        lit#151 = "DejaVuSansMono.ttf";
        fn_call#153 = fileexists#152(lit#151);
        // RegionId(26)
        // RegionId(27)
        if (fn_call#153) 
        {
            lit#154 = "DejaVuSansMono";
        }
        // RegionId(28)
        else
        {
            lit#155 = "Courier";
        }
        phi<idx=1, regions=()> = phi<idx=0, regions=()>;
        lit#156 = 14;
        fontsize#157 = lit#156;
        lit#159 = 0;
        lit#160 = 0;
        lit#161 = 0;
        cursorcolor#162 = {lit#161, lit#160, lit#159};
        lit#164 = 0;
        lit#165 = 255;
        lit#166 = 255;
        fillcolorhl#167 = {lit#166, lit#165, lit#164};
        lit#168 = 0;
        lit#169 = 0;
        lit#170 = 0;
        fontcolor#171 = {lit#170, lit#169, lit#168};
        lit#173 = 0;
        lit#174 = 0;
        lit#175 = 192;
        fontcolorhl#176 = {lit#175, lit#174, lit#173};
        lit#178 = 0;
        lit#179 = 16;
        lit#180 = 0;
        fontcolorsel#181 = {lit#180, lit#179, lit#178};
        lit#183 = 192;
        lit#184 = 0;
        lit#185 = 192;
        fontcolorlink#186 = {lit#185, lit#184, lit#183};
        lit#188 = 255;
        lit#189 = 0;
        lit#190 = 0;
        fontcolorlinkhl#191 = {lit#190, lit#189, lit#188};
        fn_call#193 = this.loadvarsfromarray(remotecontrol.options.guimltexteditprofile);
    }
    fn_call#194 = addcontrol#76(phi<idx=0, regions=()>);
    lit#195 = "GuiRCTextEditProfile";
    gbf_new_obj#196 = lit#195;
    lit#197 = "GuiBlueTextEditProfile";
    new_node#198 = new lit#197(gbf_new_obj#196);
    gbf_new_obj#199 = new_node#198;
    // RegionId(30)
    // RegionId(31)
    with (gbf_new_obj#196) 
    {
        lit#201 = 0;
        lit#202 = 96;
        lit#203 = 0;
        fillcolor#204 = {lit#203, lit#202, lit#201};
        lit#205 = 0;
        lit#206 = 255;
        lit#207 = 0;
        fontcolor#208 = {lit#207, lit#206, lit#205};
        lit#209 = 14;
        fontsize#210 = lit#209;
        fn_call#212 = this.loadvarsfromarray(remotecontrol.options.guitexteditprofile);
    }
    fn_call#213 = addcontrol#76(phi<idx=0, regions=()>);
    lit#214 = "GuiRCTextListProfile";
    gbf_new_obj#215 = lit#214;
    lit#216 = "GuiBlueTextListProfile";
    new_node#217 = new lit#216(gbf_new_obj#215);
    gbf_new_obj#218 = new_node#217;
    // RegionId(32)
    // RegionId(33)
    with (gbf_new_obj#215) 
    {
        lit#219 = 2;
        lit#220 = 32;
        lit#221 = 1;
        lit#222 = 32;
        lit#223 = 0;
        lit#224 = 32;
        fillcolorhl#225 = {fillcolorhl#167[lit#223] + lit#224, fillcolorhl#167[lit#221] + lit#222, fillcolorhl#167[lit#219] + lit#220};
        lit#227 = 2;
        lit#228 = 64;
        lit#229 = 1;
        lit#230 = 64;
        lit#231 = 0;
        lit#232 = 64;
        fillcolorna#233 = {fillcolorna#226[lit#231] + lit#232, fillcolorna#226[lit#229] + lit#230, fillcolorna#226[lit#227] + lit#228};
        fn_call#235 = this.loadvarsfromarray(remotecontrol.options.guitextlistprofile);
    }
    fn_call#236 = addcontrol#76(phi<idx=0, regions=()>);
    lit#237 = "GuiRCTreeViewProfile";
    gbf_new_obj#238 = lit#237;
    lit#239 = "GuiBlueTreeViewProfile";
    new_node#240 = new lit#239(gbf_new_obj#238);
    gbf_new_obj#241 = new_node#240;
    // RegionId(34)
    // RegionId(35)
    with (gbf_new_obj#238) 
    {
        fn_call#243 = this.loadvarsfromarray(remotecontrol.options.guitreeviewprofile);
    }
    fn_call#244 = addcontrol#76(phi<idx=0, regions=()>);
    lit#245 = "GuiRCCheckBoxProfile";
    gbf_new_obj#246 = lit#245;
    lit#247 = "GuiBlueCheckBoxProfile";
    new_node#248 = new lit#247(gbf_new_obj#246);
    gbf_new_obj#249 = new_node#248;
    // RegionId(36)
    // RegionId(37)
    with (gbf_new_obj#246) 
    {
        fn_call#251 = this.loadvarsfromarray(remotecontrol.options.guicheckboxprofile);
    }
    fn_call#252 = addcontrol#76(phi<idx=0, regions=()>);
    lit#253 = "GuiRCButtonProfile";
    gbf_new_obj#254 = lit#253;
    lit#255 = "GuiBlueButtonProfile";
    new_node#256 = new lit#255(gbf_new_obj#254);
    gbf_new_obj#257 = new_node#256;
    // RegionId(38)
    // RegionId(39)
    with (gbf_new_obj#254) 
    {
        fn_call#259 = this.loadvarsfromarray(remotecontrol.options.guibuttonprofile);
    }
    fn_call#260 = addcontrol#76(phi<idx=0, regions=()>);
    lit#261 = "GuiRCPopUpMenuProfile";
    gbf_new_obj#262 = lit#261;
    lit#263 = "GuiBluePopUpMenuProfile";
    new_node#264 = new lit#263(gbf_new_obj#262);
    gbf_new_obj#265 = new_node#264;
    // RegionId(40)
    // RegionId(41)
    with (gbf_new_obj#262) 
    {
        fn_call#267 = this.loadvarsfromarray(remotecontrol.options.guipopupmenuprofile);
    }
    fn_call#268 = addcontrol#76(phi<idx=0, regions=()>);
    lit#269 = 0;
    return lit#269;
}