forked from mirror/vulkan-zig
Funcpointer parsing
This commit is contained in:
@@ -3,7 +3,49 @@ const xml = @import("xml.zig");
|
||||
const parseXml = @import("spec-parse.zig").parseXml;
|
||||
const registry = @import("registry-new.zig");
|
||||
|
||||
pub fn dumpRegistry(reg: registry.Registry) void {
|
||||
fn renderType(type_info: registry.TypeInfo) void {
|
||||
switch (type_info) {
|
||||
.container => |c| {
|
||||
if (c.is_union) {
|
||||
std.debug.warn("union {{ ... }}", .{});
|
||||
} else {
|
||||
std.debug.warn("struct {{ ... }}", .{});
|
||||
|
||||
for (c.fields) |field| {
|
||||
std.debug.warn("{}: ", .{field.name});
|
||||
renderType(field.field_type);
|
||||
std.debug.warn(", ", .{});
|
||||
}
|
||||
|
||||
std.debug.warn("}}", .{});
|
||||
}
|
||||
},
|
||||
.enumeration => |e| {
|
||||
if (e.is_bitmask) {
|
||||
std.debug.warn("bitmask {{ ... }}", .{});
|
||||
} else {
|
||||
std.debug.warn("enum {{ ... }}", .{});
|
||||
}
|
||||
},
|
||||
.bitmask => std.debug.warn("flags", .{}),
|
||||
.handle => |h| {
|
||||
if (h.is_dispatchable) {
|
||||
std.debug.warn("dispatchable handle", .{});
|
||||
} else {
|
||||
std.debug.warn("handle", .{});
|
||||
}
|
||||
},
|
||||
.command => |c| std.debug.warn("{}", .{c}),
|
||||
.array => |a| std.debug.warn("{}", .{a}),
|
||||
.pointer => |a| std.debug.warn("{}", .{a}),
|
||||
.alias => |alias| std.debug.warn("{}", .{alias}),
|
||||
.foreign => |f| std.debug.warn("foreign", .{}),
|
||||
.opaque => std.debug.warn("opaque", .{}),
|
||||
else => std.debug.warn("unhandled", .{}),
|
||||
}
|
||||
}
|
||||
|
||||
fn dumpRegistry(reg: registry.Registry) void {
|
||||
for (reg.tags) |tag| {
|
||||
std.debug.warn("tag: name = {}, author = {}\n", .{tag.name, tag.author});
|
||||
}
|
||||
@@ -14,15 +56,20 @@ pub fn dumpRegistry(reg: registry.Registry) void {
|
||||
.expr => |expr| std.debug.warn("expr = {}\n", .{expr}),
|
||||
.alias => |alias| std.debug.warn("alias = {}\n", .{alias}),
|
||||
}
|
||||
}
|
||||
|
||||
for (reg.decls) |decl| {
|
||||
std.debug.warn("decl: name = {}; ", .{decl.name});
|
||||
renderType(decl.decl_type);
|
||||
std.debug.warn("\n", .{});
|
||||
}
|
||||
}
|
||||
|
||||
pub fn main() !void {
|
||||
if (std.os.argv.len <= 1) {
|
||||
std.debug.warn("Usage: vulkan-zig-gen <path-to-vk.xml>\n", .{});
|
||||
return;
|
||||
}
|
||||
// if (std.os.argv.len <= 1) {
|
||||
// std.debug.warn("Usage: vulkan-zig-gen <path-to-vk.xml>\n", .{});
|
||||
// return;
|
||||
// }
|
||||
|
||||
const file = try std.fs.cwd().openFileZ(std.os.argv[1], .{});
|
||||
defer file.close();
|
||||
@@ -44,4 +91,5 @@ pub fn main() !void {
|
||||
|
||||
test "main" {
|
||||
_ = @import("xml.zig");
|
||||
_ = @import("spec-c-parse.zig");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user