This was built to track decompiler and CFG progress.
A structure analysis error occurred while decompiling the function: A structure analysis error occurred: Control flow region must have exactly two successors, found 1
{
"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"
}
]
}
{
"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;
}
}
}
Use the mouse wheel + shift to zoom in and out, and click and drag to pan.
Use the mouse wheel + shift to zoom in and out, and click and drag to pan.
Step 1 of 21