From cd403e57ff489d349302da8dd0ee6f53c65175b1 Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Tue, 30 Jun 2020 02:44:03 +0200 Subject: [PATCH] Fix empty enums being skipped over --- generator/generator.zig | 3 +-- generator/render.zig | 40 ++++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/generator/generator.zig b/generator/generator.zig index 4285fb2..218855c 100644 --- a/generator/generator.zig +++ b/generator/generator.zig @@ -140,8 +140,7 @@ const DeclarationResolver = struct { while (read_index < self.registry.decls.len) { const decl = self.registry.decls[read_index]; const is_required = self.declarations.contains(decl.name); - const is_empty_enum = decl.decl_type == .enumeration and decl.decl_type.enumeration.fields.len == 0; - if (decl.decl_type == .foreign or (is_required and !is_empty_enum)) { + if (decl.decl_type == .foreign or is_required) { self.registry.decls[write_index] = decl; write_index += 1; } diff --git a/generator/render.zig b/generator/render.zig index 63573e4..840b1e3 100644 --- a/generator/render.zig +++ b/generator/render.zig @@ -541,25 +541,29 @@ fn Renderer(comptime WriterType: type) type { try self.renderTypeName(name); try self.writer.writeAll(" = packed struct {"); - var flags_by_bitpos = [_]?[]const u8{null} ** 32; - for (bits.fields) |field| { - if (field.value == .bitpos) { - flags_by_bitpos[field.value.bitpos] = field.name; - } - } - - for (flags_by_bitpos) |opt_flag_name, bitpos| { - if (opt_flag_name) |flag_name| { - try self.renderEnumFieldName(name, flag_name); - } else { - try self.writer.print("_reserved_bit_{}", .{bitpos}); - } - - try self.writer.writeAll(": bool "); - if (bitpos == 0) { // Force alignment to integer boundaries - try self.writer.writeAll("align(@alignOf(Flags)) "); + if (bits.fields.len == 0) { + try self.writer.writeAll("_reserved_bits: Flags = 0,"); + } else { + var flags_by_bitpos = [_]?[]const u8{null} ** 32; + for (bits.fields) |field| { + if (field.value == .bitpos) { + flags_by_bitpos[field.value.bitpos] = field.name; } - try self.writer.writeAll("= false, "); + } + + for (flags_by_bitpos) |opt_flag_name, bitpos| { + if (opt_flag_name) |flag_name| { + try self.renderEnumFieldName(name, flag_name); + } else { + try self.writer.print("_reserved_bit_{}", .{bitpos}); + } + + try self.writer.writeAll(": bool "); + if (bitpos == 0) { // Force alignment to integer boundaries + try self.writer.writeAll("align(@alignOf(Flags)) "); + } + try self.writer.writeAll("= false, "); + } } try self.writer.writeAll("pub usingnamespace FlagsMixin("); try self.renderTypeName(name);