Fills in missing anonymous enum values

This is important e.g. for the MouseButton enum
This commit is contained in:
Mason Remaley 2025-11-19 19:28:41 -08:00
parent f5ed86c136
commit 826a993c0d

View file

@ -566,7 +566,12 @@ fn writeFlagsEnum(writer: anytype, internal: bool, e: Header.Enum) !void {
try writer.writeAll("};\n"); try writer.writeAll("};\n");
} }
fn writeNormalEnum(allocator: Allocator, writer: anytype, internal: bool, e: Header.Enum) !void { fn writeNormalEnum(
allocator: Allocator,
writer: anytype,
internal: bool,
e: Header.Enum,
) !void {
var values = std.AutoArrayHashMap(i64, void).init(allocator); var values = std.AutoArrayHashMap(i64, void).init(allocator);
defer values.deinit(); defer values.deinit();
@ -577,6 +582,11 @@ fn writeNormalEnum(allocator: Allocator, writer: anytype, internal: bool, e: Hea
} }
try writer.writeAll(") {\n"); try writer.writeAll(") {\n");
// Get the element count if present
const maybe_count = b: for (e.elements) |element| {
if (element.is_count) break :b element.value;
} else null;
// Write elements // Write elements
for (e.elements) |element| { for (e.elements) |element| {
// Skip non visible elements and count elements // Skip non visible elements and count elements
@ -595,7 +605,16 @@ fn writeNormalEnum(allocator: Allocator, writer: anytype, internal: bool, e: Hea
try writer.print(" = {},\n", .{element.value}); try writer.print(" = {},\n", .{element.value});
} }
// Write constants since they're used internally, but keep them private // Add any missing elements between 0 and count.
if (maybe_count) |count| {
for (0..@intCast(count)) |value| {
if (!values.contains(@intCast(value))) {
try writer.print(" anon{} = {},\n", .{ value, value });
}
}
}
// Write count constants since they're used internally, but keep them private
for (e.elements) |element| { for (e.elements) |element| {
if (element.is_count) { if (element.is_count) {
try writer.writeAll(" const "); try writer.writeAll(" const ");