Welcome to the GBF Test Portal

This was built to track decompiler and CFG progress.

Decompiler Output

Backtrace

{
  "frames": [
    {
      "line": 134,
      "file": ".\\gbf_core\\src\\decompiler\\structure_analysis\\if_region_reducer.rs",
      "function": "gbf_core::decompiler::structure_analysis::if_region_reducer::impl$1::reduce_region"
    },
    {
      "line": 564,
      "file": ".\\gbf_core\\src\\decompiler\\structure_analysis\\mod.rs",
      "function": "gbf_core::decompiler::structure_analysis::StructureAnalysis::reduce_acyclic_region"
    },
    {
      "line": 300,
      "function": "gbf_core::decompiler::structure_analysis::StructureAnalysis::execute",
      "file": ".\\gbf_core\\src\\decompiler\\structure_analysis\\mod.rs"
    },
    {
      "line": 292,
      "file": ".\\gbf_core\\src\\decompiler\\function_decompiler.rs",
      "function": "gbf_core::decompiler::function_decompiler::FunctionDecompiler::decompile"
    }
  ]
}

Context

{
  "current_block_id": {
    "index": 25,
    "address": 22671,
    "block_type": "Normal"
  },
  "current_ast_node_stack": [],
  "current_instruction": {
    "opcode": "Ret",
    "operand": null,
    "address": 22673
  }
}
function public.onPlayerlistAction(entryid#2, text#1, other#0)
{
    fn_call#6 = this.isOpen();
    // RegionId(1)
    if (!fn_call#6) 
    {
        lit#7 = 0;
        return lit#7;
    }
    // RegionId(14)
    else
    {
        lit#9 = "Open attributes";
        // RegionId(15)
        if (!(temp.text == lit#9)) 
        {
            lit#10 = "Open flags";
            // RegionId(16)
            if (!(phi<idx=0, regions=()> == lit#10)) 
            {
                lit#11 = "Open weapons";
                // RegionId(17)
                if (!(phi<idx=0, regions=()> == lit#11)) 
                {
                    lit#12 = "Open chests";
                    // RegionId(18)
                    if (!(phi<idx=0, regions=()> == lit#12)) 
                    {
                        lit#13 = "Open comments";
                        // RegionId(19)
                        if (!(phi<idx=0, regions=()> == lit#13)) 
                        {
                            lit#14 = "Open rights";
                            // RegionId(20)
                            if (!(phi<idx=0, regions=()> == lit#14)) 
                            {
                                lit#15 = "Open ban info";
                                // RegionId(21)
                                if (!(phi<idx=0, regions=()> == lit#15)) 
                                {
                                    lit#16 = "Open account";
                                    // RegionId(22)
                                    if (!(phi<idx=0, regions=()> == lit#16)) 
                                    {
                                        lit#17 = "Disconnect";
                                        // RegionId(22)
                                        // RegionId(23)
                                        if (!(phi<idx=0, regions=()> == lit#17)) 
                                        {
                                            lit#18 = "Disconnect with reason...";
                                            // RegionId(24)
                                            if (!(phi<idx=0, regions=()> == lit#18)) 
                                            {
                                                lit#19 = "Admin message";
                                                // RegionId(24)
                                                // RegionId(13)
                                                if (!(phi<idx=0, regions=()> == lit#19)) 
                                                {
                                                    lit#20 = "<b>Admin message to player</b>\n\nPlease enter a message to send. This message will be sent to ";
                                                    lit#22 = " only.";
                                                    lit#23 = "Admin message";
                                                    fn_call#25 = createNamePrompt#24(lit#23, other.account, (lit#20 @ other.account) @ lit#22);
                                                }
                                                goto RegionId(25);
                                            }
                                        }
                                        lit#26 = "<b>Disconnect</b>\n\nPlease enter a disconnect reason. The player will see this message when they are disconnected.";
                                        lit#27 = "Disconnect";
                                        fn_call#28 = createNamePrompt#24(lit#27, other.account, lit#26);
                                        goto RegionId(25);
                                    }
                                    // RegionId(11)
                                    else
                                    {
                                        lit#29 = "getaccount";
                                        lit#30 = "lister";
                                        fn_call#32 = sendtext#31(lit#30, lit#29, other.account);
                                        goto RegionId(25);
                                    }
                                }
                                // RegionId(8)
                                else
                                {
                                    fn_call#34 = findplayer#33(other.account);
                                    lit#35 = null;
                                    // RegionId(8)
                                    // RegionId(9)
                                    if (fn_call#34 != lit#35) 
                                    {
                                        lit#37 = "getbanbyid";
                                        lit#38 = "lister";
                                        fn_call#39 = sendtext#31(lit#38, lit#37, other.id);
                                    }
                                    // RegionId(10)
                                    else
                                    {
                                        lit#40 = "getban";
                                        lit#41 = "lister";
                                        fn_call#42 = sendtext#31(lit#41, lit#40, other.account);
                                    }
                                    goto RegionId(25);
                                }
                            }
                            // RegionId(7)
                            else
                            {
                                lit#43 = "rights";
                                fn_call#44 = requesttext#3(lit#43, other.account);
                                goto RegionId(25);
                            }
                        }
                        // RegionId(6)
                        else
                        {
                            lit#45 = "comments";
                            fn_call#46 = requesttext#3(lit#45, other.account);
                            goto RegionId(25);
                        }
                    }
                    // RegionId(5)
                    else
                    {
                        lit#47 = "playerchests";
                        fn_call#48 = requesttext#3(lit#47, other.account);
                        goto RegionId(25);
                    }
                }
                // RegionId(4)
                else
                {
                    lit#49 = "playerweapons";
                    fn_call#50 = requesttext#3(lit#49, other.account);
                    goto RegionId(25);
                }
            }
            // RegionId(3)
            else
            {
                lit#51 = "playerflags";
                fn_call#52 = requesttext#3(lit#51, other.account);
                goto RegionId(25);
            }
        }
        // RegionId(2)
        else
        {
            lit#53 = "playerattributes";
            fn_call#54 = requesttext#3(lit#53, other.account);
            lit#55 = 0;
            return lit#55;
        }
    }
}