Root <- skip ContainerMembers eof
pub fn parseRoot(p: *Parse) Allocator.Error!void
pub fn parseRoot(p: *Parse) Allocator.Error!void {
// Root node must be index 0.
p.nodes.appendAssumeCapacity(.{
.tag = .root,
.main_token = 0,
.data = undefined,
});
const root_members = p.parseContainerMembers() catch |err| switch (err) {
error.OutOfMemory => |e| return e,
error.ParseError => {
assert(p.errors.items.len > 0);
return;
},
};
const root_decls = try root_members.toSpan(p);
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] = .{ .extra_range = root_decls };
}