| ... | @@ -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); |
| 4132 | | 4132 | |
| 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; |
| 4136 | | 4140 | |
| 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); |
| 4139 | | 4143 | |
| 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 | } |
| 4142 | | 4146 | |
| 4143 | // The resolved path is used as the key in the table, to detect if a file | 4147 | // 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); |
| 4155 | | 4159 | |
| 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; |
| 4159 | | 4167 | |
| 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); |
| 4180 | | 4188 | |
| 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 | } |
| 4183 | | 4191 | |
| 4184 | /// https://github.com/ziglang/zig/issues/14307 | 4192 | /// 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 | } }); |
| 4246 | | 4253 | |
| 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), |