From b374ff80002f97a0a04708bfbd7932f6d5e10aca Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Fri, 4 Jun 2021 00:53:18 -0700 Subject: [PATCH] mild memory cleanup of ArrayList usage --- src/common.zig | 6 ++++-- src/util/funcs.zig | 6 ++++-- src/util/modfile.zig | 6 ++++-- src/util/module.zig | 2 ++ src/util/yaml.zig | 4 +++- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/common.zig b/src/common.zig index 921755b4fd6df609240aaa6be32c13e4aa43a8e9..8d0c20e473fc1856b63b22bd44997e09d274b387 100644 --- a/src/common.zig +++ b/src/common.zig @@ -14,6 +14,7 @@ pub const CollectOptions = struct { pub fn collect_deps_deep(dir: []const u8, mpath: []const u8, options: CollectOptions) !u.Module { const m = try u.ModFile.init(gpa, mpath); const moduledeps = &std.ArrayList(u.Module).init(gpa); + defer moduledeps.deinit(); try moduledeps.append(try collect_deps(dir, mpath, options)); for (m.devdeps) |d| { try get_module_from_dep(moduledeps, d, dir, m.name, options); @@ -26,7 +27,7 @@ pub fn collect_deps_deep(dir: []const u8, mpath: []const u8, options: CollectOpt .c_include_dirs = &.{}, .c_source_flags = &.{}, .c_source_files = &.{}, - .deps = moduledeps.items, + .deps = moduledeps.toOwnedSlice(), .clean_path = "", .only_os = &.{}, .except_os = &.{}, @@ -37,6 +38,7 @@ pub fn collect_deps_deep(dir: []const u8, mpath: []const u8, options: CollectOpt pub fn collect_deps(dir: []const u8, mpath: []const u8, options: CollectOptions) anyerror!u.Module { const m = try u.ModFile.init(gpa, mpath); const moduledeps = &std.ArrayList(u.Module).init(gpa); + defer moduledeps.deinit(); for (m.deps) |d| { try get_module_from_dep(moduledeps, d, dir, m.name, options); } @@ -48,7 +50,7 @@ pub fn collect_deps(dir: []const u8, mpath: []const u8, options: CollectOptions) .c_include_dirs = m.c_include_dirs, .c_source_flags = m.c_source_flags, .c_source_files = m.c_source_files, - .deps = moduledeps.items, + .deps = moduledeps.toOwnedSlice(), .clean_path = "../..", .only_os = &.{}, .except_os = &.{}, diff --git a/src/util/funcs.zig b/src/util/funcs.zig index 1d1c851e0a583bae12040a9fc2fb9f27dbed0c2c..6c38e03034060912a0536f333261c30fbfb24bdb 100644 --- a/src/util/funcs.zig +++ b/src/util/funcs.zig @@ -33,11 +33,12 @@ pub fn try_index(comptime T: type, array: []T, n: usize, def: T) T { pub fn split(in: []const u8, delim: []const u8) ![][]const u8 { const list = &std.ArrayList([]const u8).init(gpa); + defer list.deinit(); const iter = &std.mem.split(in, delim); while (iter.next()) |str| { try list.append(str); } - return list.items; + return list.toOwnedSlice(); } pub fn trim_prefix(in: []const u8, prefix: []const u8) []const u8 { @@ -172,12 +173,13 @@ pub fn run_cmd(dir: ?[]const u8, args: []const []const u8) !u32 { pub fn list_remove(input: [][]const u8, search: []const u8) ![][]const u8 { const list = &std.ArrayList([]const u8).init(gpa); + defer list.deinit(); for (input) |item| { if (!std.mem.eql(u8, item, search)) { try list.append(item); } } - return list.items; + return list.toOwnedSlice(); } pub fn last(in: [][]const u8) ![]const u8 { diff --git a/src/util/modfile.zig b/src/util/modfile.zig index 0d8ccacf51e9161fb7802cf3254fc31ef1624793..6b317f57de002ab97e109e1bdd432c26d57a8786 100644 --- a/src/util/modfile.zig +++ b/src/util/modfile.zig @@ -40,7 +40,9 @@ pub const ModFile = struct { const main = mapping.get_string("main"); const dep_list = try dep_list_by_name(alloc, mapping, "dependencies"); + defer dep_list.deinit(); const devdep_list = try dep_list_by_name(alloc, mapping, "dev_dependencies"); + defer devdep_list.deinit(); return Self{ .alloc = alloc, @@ -50,9 +52,9 @@ pub const ModFile = struct { .c_include_dirs = try mapping.get_string_array(alloc, "c_include_dirs"), .c_source_flags = try mapping.get_string_array(alloc, "c_source_flags"), .c_source_files = try mapping.get_string_array(alloc, "c_source_files"), - .deps = dep_list.items, + .deps = dep_list.toOwnedSlice(), .yaml = mapping, - .devdeps = devdep_list.items, + .devdeps = devdep_list.toOwnedSlice(), }; } diff --git a/src/util/module.zig b/src/util/module.zig index 013fb9f05b85bd8385c9aba182057ed73a948116..9340c89104a6beb99feb9f2533be2893b646117f 100644 --- a/src/util/module.zig +++ b/src/util/module.zig @@ -46,9 +46,11 @@ pub const Module = struct { pub fn get_hash(self: Module, cdpath: []const u8) ![]const u8 { const file_list_1 = &std.ArrayList([]const u8).init(gpa); + defer file_list_1.deinit(); try u.file_list(try u.concat(&.{ cdpath, "/", self.clean_path }), file_list_1); const file_list_2 = &std.ArrayList([]const u8).init(gpa); + defer file_list_2.deinit(); for (file_list_1.items) |item| { const _a = u.trim_prefix(item, cdpath)[1..]; const _b = u.trim_prefix(_a, self.clean_path)[1..]; diff --git a/src/util/yaml.zig b/src/util/yaml.zig index 8b99460d1661a63c28fa7e326121b8ef68dfc430..a4a1c0753ab27f3564474e475e8a093ae327d513 100644 --- a/src/util/yaml.zig +++ b/src/util/yaml.zig @@ -95,6 +95,7 @@ pub const Mapping = struct { pub fn get_string_array(self: Mapping, alloc: *std.mem.Allocator, k: []const u8) ![][]const u8 { const list = &std.ArrayList([]const u8).init(alloc); + defer list.deinit(); if (self.get(k)) |val| { if (val == .sequence) { for (val.sequence) |item, i| { @@ -105,7 +106,7 @@ pub const Mapping = struct { } } } - return list.items; + return list.toOwnedSlice(); } pub fn format(self: Mapping, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) @TypeOf(writer).Error!void { @@ -191,6 +192,7 @@ fn condense_event_list(list: *std.ArrayList(Item), lines: Array) !void { try new_list.append(list.items[i]); } + list.deinit(); list.* = new_list; } -- 2.54.0