authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-10-23 17:04:15-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-10-23 17:25:11-07:00
log3667489051db56637de71d537436a20431a8e184
tree5c1c195af08bec71c2c50f55d9bb69a26b206baa
parent411fcd22abe5348271669e7673006421d2d7f195

frontend: slightly simplify memory management

no reason to pass `keep_resolved_path` to `newEmbedFile`

1 files changed, 12 insertions(+), 6 deletions(-)

src/Module.zig+12-6
...@@ -4131,13 +4131,17 @@ pub fn embedFile(...@@ -4131,13 +4131,17 @@ pub fn embedFile(
4131 defer if (!keep_resolved_path) gpa.free(resolved_path);4131 defer if (!keep_resolved_path) gpa.free(resolved_path);
41324132
4133 const gop = try mod.embed_table.getOrPut(gpa, resolved_path);4133 const gop = try mod.embed_table.getOrPut(gpa, resolved_path);
4134 errdefer assert(mod.embed_table.remove(resolved_path));4134 errdefer {
4135 assert(mod.embed_table.remove(resolved_path));
4136 keep_resolved_path = false;
4137 }
4135 if (gop.found_existing) return gop.value_ptr.*.val;4138 if (gop.found_existing) return gop.value_ptr.*.val;
4139 keep_resolved_path = true;
41364140
4137 const sub_file_path = try gpa.dupe(u8, pkg.root_src_path);4141 const sub_file_path = try gpa.dupe(u8, pkg.root_src_path);
4138 errdefer gpa.free(sub_file_path);4142 errdefer gpa.free(sub_file_path);
41394143
4140 return newEmbedFile(mod, pkg, sub_file_path, resolved_path, &keep_resolved_path, gop, src_loc);4144 return newEmbedFile(mod, pkg, sub_file_path, resolved_path, gop, src_loc);
4141 }4145 }
41424146
4143 // The resolved path is used as the key in the table, to detect if a file4147 // The resolved path is used as the key in the table, to detect if a file
...@@ -4154,8 +4158,12 @@ pub fn embedFile(...@@ -4154,8 +4158,12 @@ pub fn embedFile(
4154 defer if (!keep_resolved_path) gpa.free(resolved_path);4158 defer if (!keep_resolved_path) gpa.free(resolved_path);
41554159
4156 const gop = try mod.embed_table.getOrPut(gpa, resolved_path);4160 const gop = try mod.embed_table.getOrPut(gpa, resolved_path);
4157 errdefer assert(mod.embed_table.remove(resolved_path));4161 errdefer {
4162 assert(mod.embed_table.remove(resolved_path));
4163 keep_resolved_path = false;
4164 }
4158 if (gop.found_existing) return gop.value_ptr.*.val;4165 if (gop.found_existing) return gop.value_ptr.*.val;
4166 keep_resolved_path = true;
41594167
4160 const resolved_root_path = try std.fs.path.resolve(gpa, &.{4168 const resolved_root_path = try std.fs.path.resolve(gpa, &.{
4161 cur_file.mod.root.root_dir.path orelse ".",4169 cur_file.mod.root.root_dir.path orelse ".",
...@@ -4178,7 +4186,7 @@ pub fn embedFile(...@@ -4178,7 +4186,7 @@ pub fn embedFile(
4178 };4186 };
4179 errdefer gpa.free(sub_file_path);4187 errdefer gpa.free(sub_file_path);
41804188
4181 return newEmbedFile(mod, cur_file.mod, sub_file_path, resolved_path, &keep_resolved_path, gop, src_loc);4189 return newEmbedFile(mod, cur_file.mod, sub_file_path, resolved_path, gop, src_loc);
4182}4190}
41834191
4184/// https://github.com/ziglang/zig/issues/143074192/// https://github.com/ziglang/zig/issues/14307
...@@ -4187,7 +4195,6 @@ fn newEmbedFile(...@@ -4187,7 +4195,6 @@ fn newEmbedFile(
4187 pkg: *Package.Module,4195 pkg: *Package.Module,
4188 sub_file_path: []const u8,4196 sub_file_path: []const u8,
4189 resolved_path: []const u8,4197 resolved_path: []const u8,
4190 keep_resolved_path: *bool,
4191 gop: std.StringHashMapUnmanaged(*EmbedFile).GetOrPutResult,4198 gop: std.StringHashMapUnmanaged(*EmbedFile).GetOrPutResult,
4192 src_loc: SrcLoc,4199 src_loc: SrcLoc,
4193) !InternPool.Index {4200) !InternPool.Index {
...@@ -4244,7 +4251,6 @@ fn newEmbedFile(...@@ -4244,7 +4251,6 @@ fn newEmbedFile(
4244 } },4251 } },
4245 } });4252 } });
42464253
4247 keep_resolved_path.* = true; // It's now owned by embed_table.
4248 gop.value_ptr.* = new_file;4254 gop.value_ptr.* = new_file;
4249 new_file.* = .{4255 new_file.* = .{
4250 .sub_file_path = try ip.getOrPutString(gpa, sub_file_path),4256 .sub_file_path = try ip.getOrPutString(gpa, sub_file_path),