Welcome to the GBF Test Portal

This was built to track decompiler and CFG progress.

Decompiler Output

Backtrace

{
  "frames": []
}

Context

{
  "current_block_id": {
    "index": 4,
    "address": 16755,
    "block_type": "Normal"
  },
  "current_ast_node_stack": [],
  "current_instruction": {
    "opcode": "Jne",
    "operand": {
      "Number": 16765
    },
    "address": 16754
  }
}
function public.showTextEditor(texttype#4, textoptions#3, textlines#2, temp.settext)
{
    // RegionId(1)
    if (!temp.texttype) 
    {
        lit#7 = 0;
        return lit#7;
    }
    // RegionId(2)
    else
    {
        lit#9 = "TStaticVar";
        new_node#10 = new lit#9(unknown_object#8);
        this.titles = new_node#10;
        lit#12 = "Weapons of player %s";
        this.titles.playerweapons = lit#12;
        lit#14 = "Flags of player %s";
        this.titles.playerflags = lit#14;
        lit#16 = "Server flags";
        this.titles.serverflags = lit#16;
        lit#18 = "Server options for ";
        this.titles.options = lit#18 @ servername#19;
        lit#21 = "Comments of player %s";
        this.titles.comments = lit#21;
        lit#23 = "Global staff activity of player %s";
        this.titles.staffactivity = lit#23;
        lit#25 = "Global ban history of player %s";
        this.titles.banhistory = lit#25;
        lit#27 = "Chests of player %s";
        this.titles.playerchests = lit#27;
        lit#29 = "Script of class %s";
        this.titles.class = lit#29;
        lit#31 = "Script of weapon %s";
        this.titles.weapon = lit#31;
        lit#33 = "Documentation for %s";
        this.titles.scripthelp = lit#33;
        lit#35 = "File %s";
        this.titles.editastext = lit#35;
        this.texteditors++;
        lit#37 = "ScriptedRCTextEditor_Window";
        gbf_new_obj#38 = lit#37 @ this.texteditors;
        lit#39 = "GuiWindowCtrl";
        new_node#40 = new lit#39(gbf_new_obj#38);
        gbf_new_obj#41 = new_node#40;
        // RegionId(2)
        // RegionId(3)
        with (gbf_new_obj#38) 
        {
            this.tags = {temp.texttype, temp.textoptions, temp.textlines};
            this.windowid = thiso.texteditors;
            lit#46 = 60;
            lit#47 = 60;
            position#48 = {lit#47, lit#46};
            lit#50 = 0;
            lit#51 = null;
            // RegionId(3)
            // RegionId(4)
            if (thiso.titles.temp.texttype != lit#51) 
            {
            }
            // RegionId(5)
            else
            {
                lit#52 = "%s ";
            }
            builtin_fn_call#53 = phi<idx=0, regions=()>.trim();
            builtin_fn_call#54 = phi_fn_call({format, builtin_fn_call#53, ...phi<idx=1, regions=()>});
            phi<idx=2, regions=()> = builtin_fn_call#54;
            lit#56 = "GuiBlueWindowProfile";
            profile#57 = lit#56;
            lit#59 = true;
            useOwnProfile#60 = lit#59;
            fn_call#63 = getGUIStyle#62();
            style#64 = fn_call#63;
            lit#66 = true;
            clientrelative#67 = lit#66;
            lit#69 = 282;
            lit#70 = 440;
            clientextent#71 = {lit#70, lit#69};
            lit#73 = true;
            visible#74 = lit#73;
            lit#76 = true;
            isexternal#77 = lit#76;
            fn_call#79 = bringToFront#78();
            lit#81 = true;
            closequery#82 = lit#81;
            lit#83 = "onTextEditorCloseQuery";
            lit#84 = "onCloseQuery";
            fn_call#86 = thiso.catchevent(this#5, lit#84, lit#83);
            lit#87 = "ScriptedRCTextEditor_Scroll";
            gbf_new_obj#88 = lit#87 @ thiso.texteditors;
            lit#89 = "GuiScrollCtrl";
            new_node#90 = new lit#89(gbf_new_obj#88);
            gbf_new_obj#91 = new_node#90;
            // RegionId(6)
            // RegionId(7)
            with (gbf_new_obj#88) 
            {
                lit#93 = "width";
                horizSizing#94 = lit#93;
                lit#96 = "height";
                vertSizing#97 = lit#96;
                lit#98 = 2;
                lit#99 = 2;
                position#100 = {lit#99, lit#98};
                lit#102 = 245;
                lit#103 = 436;
                extent#104 = {lit#103, lit#102};
                lit#105 = true;
                useOwnProfile#106 = lit#105;
                lit#108 = "255 255 255";
                profile.fillColor = lit#108;
                lit#110 = true;
                profile.opaque = lit#110;
                lit#112 = 1;
                profile.border = lit#112;
                lit#114 = "guiblue_scroll_noback.png";
                profile.bitmap = lit#114;
                lit#115 = "height";
                vertSizing#116 = lit#115;
                lit#117 = "width";
                horizSizing#118 = lit#117;
                lit#120 = "dynamic";
                hScrollBar#121 = lit#120;
                lit#123 = "dynamic";
                vScrollBar#124 = lit#123;
                lit#125 = "ScriptedRCTextEditor_TextEdit";
                gbf_new_obj#126 = lit#125 @ thiso.texteditors;
                lit#127 = "GuiMLTextEditCtrl";
                new_node#128 = new lit#127(gbf_new_obj#126);
                gbf_new_obj#129 = new_node#128;
                // RegionId(7)
                // RegionId(8)
                with (gbf_new_obj#126) 
                {
                    profile#131 = SyntaxHighlightProfile#130;
                    lit#132 = 240;
                    lit#133 = 430;
                    extent#134 = {lit#133, lit#132};
                    lit#136 = "npcflags";
                    lit#137 = "weapon";
                    lit#138 = "class";
                    lit#139 = "npc";
                    syntaxhighlighting#140 = temp.texttype in {lit#139, lit#138, lit#137, lit#136};
                    lit#142 = false;
                    wordwrap#143 = lit#142;
                    lit#145 = 2;
                    tabspaces#146 = lit#145;
                    lit#148 = true;
                    autoindenting#149 = lit#148;
                    // RegionId(8)
                    // RegionId(9)
                    if (temp.settext) 
                    {
                        fn_call#151 = setText#150(temp.textlines);
                    }
                    // RegionId(10)
                    else
                    {
                        fn_call#153 = setLines#152(temp.textlines);
                    }
                    lit#154 = "onTextEditorLineChanged";
                    lit#155 = "onCursorLineChanged";
                    fn_call#156 = thiso.catchevent(this#5, lit#155, lit#154);
                    lit#157 = "onTextEditorKeyDown";
                    lit#158 = "onKeyDown";
                    fn_call#159 = thiso.catchevent(this#5, lit#158, lit#157);
                    thiso.selectedtextarea = this#5;
                }
                fn_call#162 = addcontrol#161(phi<idx=0, regions=()>);
            }
            fn_call#163 = addcontrol#161(phi<idx=0, regions=()>);
            lit#164 = "ScriptedRCTextEditor_LineCount";
            gbf_new_obj#165 = lit#164 @ thiso.texteditors;
            lit#166 = "GuiTextCtrl";
            new_node#167 = new lit#166(gbf_new_obj#165);
            gbf_new_obj#168 = new_node#167;
            // RegionId(13)
            // RegionId(14)
            with (gbf_new_obj#165) 
            {
                profile#170 = GuiBlueTextProfile#169;
                lit#171 = 254;
                lit#172 = 8;
                position#173 = {lit#172, lit#171};
                lit#174 = 16;
                lit#175 = 100;
                extent#176 = {lit#175, lit#174};
                lit#177 = "top";
                vertSizing#178 = lit#177;
                lit#179 = "";
                text#180 = lit#179;
            }
            fn_call#181 = addcontrol#161(phi<idx=0, regions=()>);
            lit#182 = "ScriptedRCTextEditor_FindButton";
            gbf_new_obj#183 = lit#182 @ thiso.texteditors;
            lit#184 = "GuiButtonCtrl";
            new_node#185 = new lit#184(gbf_new_obj#183);
            gbf_new_obj#186 = new_node#185;
            // RegionId(15)
            // RegionId(16)
            with (gbf_new_obj#183) 
            {
                profile#188 = GuiBlueButtonProfile#187;
                lit#190 = true;
                active#191 = lit#190;
                lit#192 = 31;
                lit#193 = 64;
                extent#194 = {lit#193, lit#192};
                lit#195 = 249;
                lit#196 = 242;
                position#197 = {lit#196, lit#195};
                lit#198 = "top";
                vertSizing#199 = lit#198;
                lit#200 = "left";
                horizSizing#201 = lit#200;
                lit#202 = "&Find";
                text#203 = lit#202;
                lit#204 = "onOpenFindReplace";
                lit#205 = "onAction";
                fn_call#207 = thiso.catchEvent(this#5, lit#205, lit#204);
            }
            fn_call#208 = addcontrol#161(phi<idx=0, regions=()>);
            lit#209 = "ScriptedRCTextEditor_ApplyButton";
            gbf_new_obj#210 = lit#209 @ thiso.texteditors;
            lit#211 = "GuiButtonCtrl";
            new_node#212 = new lit#211(gbf_new_obj#210);
            gbf_new_obj#213 = new_node#212;
            // RegionId(17)
            // RegionId(18)
            with (gbf_new_obj#210) 
            {
                profile#214 = GuiBlueButtonProfile#187;
                lit#215 = "scripthelp";
                lit#216 = "banhistory";
                lit#217 = "staffactivity";
                active#218 = !(temp.texttype in {lit#217, lit#216, lit#215});
                lit#219 = 31;
                lit#220 = 64;
                extent#221 = {lit#220, lit#219};
                lit#222 = 249;
                lit#223 = 308;
                position#224 = {lit#223, lit#222};
                lit#225 = "top";
                vertSizing#226 = lit#225;
                lit#227 = "left";
                horizSizing#228 = lit#227;
                lit#229 = "&Apply";
                text#230 = lit#229;
                lit#231 = "onTextEditorButton";
                lit#232 = "onAction";
                fn_call#233 = thiso.catchEvent(this#5, lit#232, lit#231);
            }
            fn_call#234 = addcontrol#161(phi<idx=0, regions=()>);
            lit#235 = "ScriptedRCTextEditor_CloseButton";
            gbf_new_obj#236 = lit#235 @ thiso.texteditors;
            lit#237 = "GuiButtonCtrl";
            new_node#238 = new lit#237(gbf_new_obj#236);
            gbf_new_obj#239 = new_node#238;
            // RegionId(19)
            // RegionId(20)
            with (gbf_new_obj#236) 
            {
                profile#240 = GuiBlueButtonProfile#187;
                lit#241 = 31;
                lit#242 = 64;
                extent#243 = {lit#242, lit#241};
                lit#244 = 249;
                lit#245 = 374;
                position#246 = {lit#245, lit#244};
                lit#247 = "top";
                vertSizing#248 = lit#247;
                lit#249 = "left";
                horizSizing#250 = lit#249;
                lit#251 = "&Cancel";
                text#252 = lit#251;
                lit#253 = "onTextEditorClose";
                lit#254 = "onAction";
                fn_call#255 = thiso.catchEvent(this#5, lit#254, lit#253);
            }
            fn_call#256 = addcontrol#161(phi<idx=0, regions=()>);
        }
        fn_call#257 = addcontrol#161(phi<idx=0, regions=()>);
        lit#258 = 0;
        return lit#258;
    }
}