lib/chant/src/parse/unit.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const ast = @import("../ast/root.zig");
 3 const assertion = @import("assert.zig");
 4 const ctype = @import("type/root.zig");
 5 const external = @import("external.zig");
 6 const state = @import("state/root.zig");
 7 const cursor = state.cursor;
 8 const Error = @import("error.zig").Error;
 9 
10 const Parser = state.Parser;
11 
12 pub fn parseTranslationUnit(self: *Parser) Error!ast.TranslationUnit {
13     var declarations = std.ArrayListUnmanaged(ast.Decl).empty;
14     while (cursor.peek(self).kind != .eof) {
15         if (cursor.consume(self, .semicolon)) continue;
16         if (try ctype.consumeAttributeDeclaration(self)) continue;
17         try ctype.skipAttributes(self);
18         if (cursor.consume(self, .semicolon)) continue;
19         if (try assertion.consume(self)) continue;
20         const parsed = try external.parseExternal(self);
21         try declarations.appendSlice(self.arena, parsed);
22     }
23     return .{ .declarations = try declarations.toOwnedSlice(self.arena) };
24 }