Handle bitflags

This commit is contained in:
Robin Voetter
2020-06-20 04:15:31 +02:00
parent 0d6e65eeec
commit 3bef667e24
3 changed files with 98 additions and 16 deletions

View File

@@ -155,30 +155,30 @@ const DeclarationResolver = struct {
pub const Generator = struct {
gpa: *Allocator,
registry_arena: std.heap.ArenaAllocator,
reg_arena: std.heap.ArenaAllocator,
registry: reg.Registry,
pub fn init(allocator: *Allocator, spec: *xml.Element) !Generator {
const result = try parseXml(allocator, spec);
return Generator{
.gpa = allocator,
.registry_arena = result.arena,
.reg_arena = result.arena,
.registry = result.registry,
};
}
pub fn deinit(self: Generator) void {
self.registry_arena.deinit();
self.reg_arena.deinit();
}
// Solve `registry.declarations` according to `registry.extensions` and `registry.features`.
pub fn resolveDeclarations(self: *Generator) !void {
var resolver = DeclarationResolver.init(self.gpa, &self.registry_arena.allocator, &self.registry);
var resolver = DeclarationResolver.init(self.gpa, &self.reg_arena.allocator, &self.registry);
defer resolver.deinit();
try resolver.resolve();
}
pub fn render(self: *Generator, out_stream: var) !void {
try renderRegistry(out_stream, self.gpa, &self.registry);
try renderRegistry(out_stream, &self.reg_arena.allocator, &self.registry);
}
};