diff options
| author | 2026-02-04 18:36:18 -0500 | |
|---|---|---|
| committer | 2026-02-04 18:36:18 -0500 | |
| commit | e476250ea9326b2550847b301c265115ff375a31 (patch) | |
| tree | cf627ced47cecce80020b7a1f30aa51852c0c59b /codegen/gencat.zig | |
| parent | Normalization and case folding (diff) | |
| download | zg-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.zig | 37 |
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 | } |