authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-30 13:54:34-07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-30 13:54:34-07:00
log2dd4cf012080bea60a94d0b694c2b7c77b67602e
tree2e4ec2b230817a6cb9bcb26ed3b1e32d818c63e1
parent47f06ffe0c6b5746004607241d171cdf1f380548
signature Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

astgen: add eatWord


1 files changed, 6 insertions(+), 2 deletions(-)

src/astgen.zig+6-2
...@@ -137,6 +137,10 @@ const Parser = struct {...@@ -137,6 +137,10 @@ const Parser = struct {
137 std.debug.assert(std.mem.eql(u8, self.eat(.symbol), needle));137 std.debug.assert(std.mem.eql(u8, self.eat(.symbol), needle));
138 }138 }
139139
140 pub fn eatWord(comptime self: *Parser, comptime needle: string) void {
141 std.debug.assert(std.mem.eql(u8, needle, self.eat(.word)));
142 }
143
140 pub fn doChildren(comptime self: *Parser) []const Value {144 pub fn doChildren(comptime self: *Parser) []const Value {
141 var ret: []const Value = &[_]Value{};145 var ret: []const Value = &[_]Value{};
142146
...@@ -168,7 +172,7 @@ const Parser = struct {...@@ -168,7 +172,7 @@ const Parser = struct {
168 var top = true;172 var top = true;
169 while (!self.tryEatSymbol("/")) {173 while (!self.tryEatSymbol("/")) {
170 if (self.tryEatSymbol("<")) {174 if (self.tryEatSymbol("<")) {
171 std.debug.assert(std.mem.eql(u8, "else", self.eat(.word)));175 self.eatWord("else");
172 self.eatSymbol(">");176 self.eatSymbol(">");
173 top = false;177 top = false;
174 }178 }
...@@ -178,7 +182,7 @@ const Parser = struct {...@@ -178,7 +182,7 @@ const Parser = struct {
178 bottom = bottom ++ &[_]Value{self.doValue()};182 bottom = bottom ++ &[_]Value{self.doValue()};
179 }183 }
180 }184 }
181 std.debug.assert(std.mem.eql(u8, @tagName(name), self.eat(.word)));185 self.eatWord(@tagName(name));
182 self.eatSymbol("/");186 self.eatSymbol("/");
183 return Value{ .block = Block{187 return Value{ .block = Block{
184 .name = name,188 .name = name,