summaryrefslogtreecommitdiff
path: root/codegen/gencat.zig
diff options
context:
space:
mode:
authorGravatar Sam Atman2026-02-04 18:36:18 -0500
committerGravatar Sam Atman2026-02-04 18:36:18 -0500
commite476250ea9326b2550847b301c265115ff375a31 (patch)
treecf627ced47cecce80020b7a1f30aa51852c0c59b /codegen/gencat.zig
parentNormalization and case folding (diff)
downloadzg-e476250ea9326b2550847b301c265115ff375a31.tar.gz
zg-e476250ea9326b2550847b301c265115ff375a31.tar.xz
zg-e476250ea9326b2550847b301c265115ff375a31.zip
Rest of the 'easy' stuff
This gets us up to feature parity with Jacob's work. I want to eliminate that last allocation using the comptime hash map, and then see about eliminating allocations from case comparisons as well. That should just about do it.
Diffstat (limited to 'codegen/gencat.zig')
-rw-r--r--codegen/gencat.zig37
1 files changed, 27 insertions, 10 deletions
diff --git a/codegen/gencat.zig b/codegen/gencat.zig
index 9800f1d..12c8373 100644
--- a/codegen/gencat.zig
+++ b/codegen/gencat.zig
@@ -150,21 +150,38 @@ pub fn main() !void {
150 defer args_iter.deinit(); 150 defer args_iter.deinit();
151 _ = args_iter.skip(); 151 _ = args_iter.skip();
152 const output_path = args_iter.next() orelse @panic("No output file arg!"); 152 const output_path = args_iter.next() orelse @panic("No output file arg!");
153
154 var write_buf: [4096]u8 = undefined; 153 var write_buf: [4096]u8 = undefined;
155 var out_file = try std.fs.cwd().createFile(output_path, .{}); 154 var out_file = try std.fs.cwd().createFile(output_path, .{});
156 defer out_file.close(); 155 defer out_file.close();
157 var writer = out_file.writer(&write_buf); 156 var writer = out_file.writer(&write_buf);
158 157
159 const endian = builtin.cpu.arch.endian(); 158 try writer.interface.print(
160 try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); 159 \\//! This file is auto-generated. Do not edit.
161 for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); 160 \\
162 161 \\pub const s1: [{}]u16 = .{{
163 try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); 162 , .{stage1.items.len});
164 for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); 163 for (stage1.items) |entry| try writer.interface.print("{}, ", .{entry});
165 164
166 try writer.interface.writeInt(u8, @intCast(stage3.items.len), endian); 165 try writer.interface.print(
167 for (stage3.items) |i| try writer.interface.writeInt(u8, i, endian); 166 \\
167 \\}};
168 \\
169 \\pub const stage2: [{}]u5 = .{{
170 , .{stage2.items.len});
171 for (stage2.items) |entry| try writer.interface.print("{}, ", .{entry});
172
173 try writer.interface.print(
174 \\
175 \\}};
176 \\
177 \\pub const stage3: [{}]5 = .{{
178 , .{stage3.items.len});
179 for (stage3.items) |entry| try writer.interface.print("{}, ", .{entry});
180
181 try writer.interface.writeAll(
182 \\};
183 );
168 184
169 try writer.interface.flush(); 185 try writer.interface.flush();
186 try writer.interface.flush();
170} 187}