aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-06-19 01:18:40 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-06-19 13:12:04 -0700
commit8fcc28d30275bf76313765616a2d2bdcaeb4faf2 (patch)
treeda1579b5330fc3d202a91f932c374520e04ad4bc /src/Module.zig
parente6e8cacab904f10d6e5a773867826570783d0bf4 (diff)
downloadzig-8fcc28d30275bf76313765616a2d2bdcaeb4faf2.tar.gz
zig-8fcc28d30275bf76313765616a2d2bdcaeb4faf2.zip
Module: add support for multiple global asm blocks per decl
Closes #16076
Diffstat (limited to 'src/Module.zig')
-rw-r--r--src/Module.zig14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/Module.zig b/src/Module.zig
index 8d9f9593dd..563e122ebc 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -6636,12 +6636,14 @@ fn markDeclIndexAlive(mod: *Module, decl_index: Decl.Index) Allocator.Error!void
}
pub fn addGlobalAssembly(mod: *Module, decl_index: Decl.Index, source: []const u8) !void {
- try mod.global_assembly.ensureUnusedCapacity(mod.gpa, 1);
-
- const duped_source = try mod.gpa.dupe(u8, source);
- errdefer mod.gpa.free(duped_source);
-
- mod.global_assembly.putAssumeCapacityNoClobber(decl_index, duped_source);
+ const gop = try mod.global_assembly.getOrPut(mod.gpa, decl_index);
+ if (gop.found_existing) {
+ const new_value = try std.fmt.allocPrint(mod.gpa, "{s}\n{s}", .{ gop.value_ptr.*, source });
+ mod.gpa.free(gop.value_ptr.*);
+ gop.value_ptr.* = new_value;
+ } else {
+ gop.value_ptr.* = try mod.gpa.dupe(u8, source);
+ }
}
pub fn wantDllExports(mod: Module) bool {