aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-10-05 01:21:11 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2022-10-25 05:11:28 -0400
commitc8d0e71de6c0e59b8f103526204b990fafe41f54 (patch)
treef8d46324b2b3970e12838418e17a4570a5d9e7fd /src
parentab024d3524f60c691221f6c838d6fe340c7c7cd7 (diff)
downloadzig-c8d0e71de6c0e59b8f103526204b990fafe41f54.tar.gz
zig-c8d0e71de6c0e59b8f103526204b990fafe41f54.zip
c: fix mangling of error names
Closes #12751
Diffstat (limited to 'src')
-rw-r--r--src/codegen/c.zig2
-rw-r--r--src/link/C.zig13
2 files changed, 8 insertions, 7 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 704e8a1391..4bc573ba6c 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -746,7 +746,7 @@ pub const DeclGen = struct {
.@"error" => {
const payload = val.castTag(.@"error").?;
// error values will be #defined at the top of the file
- return writer.print("zig_error_{s}", .{payload.data.name});
+ return writer.print("zig_error_{s}", .{fmtIdent(payload.data.name)});
},
else => {
// In this case we are rendering an error union which has a
diff --git a/src/link/C.zig b/src/link/C.zig
index 955044f90d..ebe37a8192 100644
--- a/src/link/C.zig
+++ b/src/link/C.zig
@@ -275,13 +275,14 @@ pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node)
const err_typedef_index = f.all_buffers.items.len;
f.all_buffers.items.len += 1;
- render_errors: {
- if (module.global_error_set.size == 0) break :render_errors;
+ if (module.global_error_set.size > 0) {
+ try err_typedef_writer.writeAll("enum {\n");
var it = module.global_error_set.iterator();
- while (it.next()) |entry| {
- try err_typedef_writer.print("#define zig_error_{s} {d}\n", .{ entry.key_ptr.*, entry.value_ptr.* });
- }
- try err_typedef_writer.writeByte('\n');
+ while (it.next()) |entry| try err_typedef_writer.print(" zig_error_{s} = {d},\n", .{
+ codegen.fmtIdent(entry.key_ptr.*),
+ entry.value_ptr.*,
+ });
+ try err_typedef_writer.writeAll("};\n");
}
// Typedefs, forward decls, and non-functions first.