Check if it is already gutted (i.e. its body replaced with @trap()).
fn isFnBodyGutted(ast: *const Ast, body_node: Ast.Node.Index) bool
fn isFnBodyGutted(ast: *const Ast, body_node: Ast.Node.Index) bool {
// skip over discards
var statements_buf: [2]Ast.Node.Index = undefined;
const statements = switch (ast.nodeTag(body_node)) {
.block_two,
.block_two_semicolon,
.block,
.block_semicolon,
=> ast.blockStatements(&statements_buf, body_node).?,
else => return false,
};
var i: usize = 0;
while (i < statements.len) : (i += 1) {
switch (categorizeStmt(ast, statements[i])) {
.discard_identifier => continue,
.trap_call => return i + 1 == statements.len,
else => return false,
}
}
return false;
}