diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2024-07-10 21:39:11 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2024-07-10 21:39:55 -0400 |
| commit | c2316c52285b1319d7b44a7f7135d9e79786fd77 (patch) | |
| tree | 966c3af5bb0ede2e3f1e7ec69a3bf920c0122914 /src/codegen/c.zig | |
| parent | 98f3a262a7aec25e0a7f0872dc7fafc9008be1d2 (diff) | |
| download | zig-c2316c52285b1319d7b44a7f7135d9e79786fd77.tar.gz zig-c2316c52285b1319d7b44a7f7135d9e79786fd77.zip | |
InternPool: make `global_error_set` thread-safe
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 6b723967a5..60b07f0e3f 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -2622,10 +2622,11 @@ pub fn genErrDecls(o: *Object) !void { var max_name_len: usize = 0; // do not generate an invalid empty enum when the global error set is empty - if (zcu.global_error_set.keys().len > 1) { + const names = ip.global_error_set.getNamesFromMainThread(); + if (names.len > 0) { try writer.writeAll("enum {\n"); o.indent_writer.pushIndent(); - for (zcu.global_error_set.keys()[1..], 1..) |name_nts, value| { + for (names, 1..) |name_nts, value| { const name = name_nts.toSlice(ip); max_name_len = @max(name.len, max_name_len); const err_val = try pt.intern(.{ .err = .{ @@ -2644,7 +2645,7 @@ pub fn genErrDecls(o: *Object) !void { defer o.dg.gpa.free(name_buf); @memcpy(name_buf[0..name_prefix.len], name_prefix); - for (zcu.global_error_set.keys()) |name| { + for (names) |name| { const name_slice = name.toSlice(ip); @memcpy(name_buf[name_prefix.len..][0..name_slice.len], name_slice); const identifier = name_buf[0 .. name_prefix.len + name_slice.len]; @@ -2674,7 +2675,7 @@ pub fn genErrDecls(o: *Object) !void { } const name_array_ty = try pt.arrayType(.{ - .len = zcu.global_error_set.count(), + .len = 1 + names.len, .child = .slice_const_u8_sentinel_0_type, }); @@ -2688,9 +2689,9 @@ pub fn genErrDecls(o: *Object) !void { .complete, ); try writer.writeAll(" = {"); - for (zcu.global_error_set.keys(), 0..) |name_nts, value| { + for (names, 1..) |name_nts, val| { const name = name_nts.toSlice(ip); - if (value != 0) try writer.writeByte(','); + if (val > 1) try writer.writeAll(", "); try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{ fmtIdent(name), try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, name.len), .StaticInitializer), @@ -6873,7 +6874,7 @@ fn airErrorName(f: *Function, inst: Air.Inst.Index) !CValue { try writer.writeAll(" = zig_errorName["); try f.writeCValue(writer, operand, .Other); - try writer.writeAll("];\n"); + try writer.writeAll(" - 1];\n"); return local; } |
