The result will be priority shuffled.
pub fn findTransformations(
arena: std.mem.Allocator,
ast: *const Ast,
transformations: *std.array_list.Managed(Transformation),
) !void
pub fn findTransformations(
arena: std.mem.Allocator,
ast: *const Ast,
transformations: *std.array_list.Managed(Transformation),
) !void {
transformations.clearRetainingCapacity();
var walk: Walk = .{
.ast = ast,
.transformations = transformations,
.gpa = transformations.allocator,
.arena = arena,
.unreferenced_globals = .empty,
.in_scope_names = .empty,
.replace_names = .empty,
};
defer {
walk.unreferenced_globals.deinit(walk.gpa);
walk.in_scope_names.deinit(walk.gpa);
walk.replace_names.deinit(walk.gpa);
}
try walkMembers(&walk, walk.ast.rootDecls());
const unreferenced_globals = walk.unreferenced_globals.values();
try transformations.ensureUnusedCapacity(unreferenced_globals.len);
for (unreferenced_globals) |node| {
transformations.appendAssumeCapacity(.{ .delete_node = node });
}
}