diff --git a/tools/regz/src/Database.zig b/tools/regz/src/Database.zig index e3edb3e3..b4d8c3fe 100644 --- a/tools/regz/src/Database.zig +++ b/tools/regz/src/Database.zig @@ -2031,8 +2031,10 @@ pub fn apply_patch(db: *Database, ndjson: []const u8) !void { } } -pub fn to_zig(db: *Database, for_microzig: bool, out_writer: anytype) !void { - try gen.to_zig(db, for_microzig, out_writer); +pub const ToZigOptions = gen.ToZigOptions; + +pub fn to_zig(db: *Database, out_writer: anytype, opts: ToZigOptions) !void { + try gen.to_zig(db, out_writer, opts); } test "all" { diff --git a/tools/regz/src/gen.zig b/tools/regz/src/gen.zig index bc209bf4..360a554a 100644 --- a/tools/regz/src/gen.zig +++ b/tools/regz/src/gen.zig @@ -19,7 +19,11 @@ const riscv = @import("arch/riscv.zig"); const log = std.log.scoped(.gen); -pub fn to_zig(db: *Database, for_microzig: bool, out_writer: anytype) !void { +pub const ToZigOptions = struct { + for_microzig: bool = false, +}; + +pub fn to_zig(db: *Database, out_writer: anytype, opts: ToZigOptions) !void { var arena = std.heap.ArenaAllocator.init(db.gpa); defer arena.deinit(); @@ -29,7 +33,7 @@ pub fn to_zig(db: *Database, for_microzig: bool, out_writer: anytype) !void { defer buffer.deinit(); const writer = buffer.writer(); - if (for_microzig) { + if (opts.for_microzig) { try writer.writeAll( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -846,7 +850,7 @@ test "gen.peripheral instantiation" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -880,7 +884,7 @@ test "gen.peripherals with a shared type" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -915,7 +919,7 @@ test "gen.peripheral with modes" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -977,7 +981,7 @@ test "gen.peripheral with enum" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1006,7 +1010,7 @@ test "gen.peripheral with enum, enum is exhausted of values" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1034,7 +1038,7 @@ test "gen.field with named enum" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1066,7 +1070,7 @@ test "gen.field with anonymous enum" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1096,7 +1100,7 @@ test "gen.namespaced register groups" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1138,7 +1142,7 @@ test "gen.peripheral with reserved register" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1171,7 +1175,7 @@ test "gen.peripheral with count" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1204,7 +1208,7 @@ test "gen.peripheral with count, padding required" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1238,7 +1242,7 @@ test "gen.register with count" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1271,7 +1275,7 @@ test "gen.register with count and fields" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1307,7 +1311,7 @@ test "gen.field with count, width of one, offset, and padding" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1343,7 +1347,7 @@ test "gen.field with count, multi-bit width, offset, and padding" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1373,7 +1377,7 @@ test "gen.interrupts.avr" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1402,7 +1406,7 @@ test "gen.peripheral type with register and field" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1431,7 +1435,7 @@ test "gen.name collisions in enum name cause them to be anonymous" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1467,7 +1471,7 @@ test "gen.pick one enum field in value collisions" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1496,7 +1500,7 @@ test "gen.pick one enum field in name collisions" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; @@ -1525,7 +1529,7 @@ test "gen.register fields with name collision" { var buffer = std.ArrayList(u8).init(std.testing.allocator); defer buffer.deinit(); - try db.to_zig(buffer.writer()); + try db.to_zig(buffer.writer(), .{ .for_microzig = true }); try std.testing.expectEqualStrings( \\const micro = @import("microzig"); \\const mmio = micro.mmio; diff --git a/tools/regz/src/main.zig b/tools/regz/src/main.zig index d9b57449..a6c60292 100644 --- a/tools/regz/src/main.zig +++ b/tools/regz/src/main.zig @@ -181,6 +181,6 @@ fn main_impl() anyerror!void { std.io.getStdOut().writer(); var buffered = std.io.bufferedWriter(raw_writer); - try db.to_zig(args.microzig, buffered.writer()); + try db.to_zig(.{ .for_microzig = args.microzig }, buffered.writer()); try buffered.flush(); }