Parse in ZON mode. Subset of the language. TODO: set a flag in Parse struct, and honor that flag by emitting compilation errors when non-zon nodes are encountered.
pub fn parseZon(p: *Parse) Allocator.Error!void
pub fn parseZon(p: *Parse) Allocator.Error!void {
// We must use index 0 so that 0 can be used as null elsewhere.
p.nodes.appendAssumeCapacity(.{
.tag = .root,
.main_token = 0,
.data = undefined,
});
const node_index = p.expectExpr() catch |err| switch (err) {
error.ParseError => {
assert(p.errors.items.len > 0);
return;
},
else => |e| return e,
};
if (p.tokenTag(p.tok_i) != .eof) {
p.warnExpected(.eof) catch |err| switch (err) {
error.OutOfMemory => |e| return e,
error.ParseError => {
assert(p.errors.items.len > 0);
return;
},
};
}
p.nodes.items(.data)[0] = .{ .node = node_index };
}