Neo N3 NEF decompiler: parse, disassemble, lift bytecode to high-level pseudocode and C# skeletons, with a CLI, JSON reports, and optional WebAssembly bindings.
usesuper::super::super::HighLevelEmitter;usesuper::scan::next_code_line;implHighLevelEmitter{/// Converts `goto label_X;` at end of switch cases to `break;` when
/// `label_X:` appears immediately after the switch block.
pub(crate)fnrewrite_switch_break_gotos(statements:&mut [String]){letmut index =0;while index < statements.len(){if!statements[index].trim().starts_with("switch "){
index +=1;continue;}letSome(end)=Self::find_block_end(statements, index)else{
index +=1;continue;};// Check if next code line after switch `}` is a label
letSome(label_idx)=next_code_line(statements, end)else{
index +=1;continue;};let label_trimmed = statements[label_idx].trim().to_string();letSome(label)= label_trimmed.strip_suffix(':')else{
index +=1;continue;};if!label.starts_with("label_"){
index +=1;continue;}// Replace matching gotos inside the switch with break
let goto_target =format!("goto {label};");for stmt in statements.iter_mut().take(end).skip(index +1){if stmt.trim()== goto_target {let indent = stmt[..stmt.len()- stmt.trim_start().len()].to_string();*stmt =format!("{indent}break;");}}
index = end +1;}}}