From 10d0b3bfcf1cfaa47ef4f983db5047f4730e3dd2 Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Tue, 16 Jun 2020 14:15:18 +0200 Subject: [PATCH] Field defaults, make types optional by default --- generator/registry/c-parse.zig | 2 +- generator/render.zig | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/generator/registry/c-parse.zig b/generator/registry/c-parse.zig index 3dc0143..7f00c32 100644 --- a/generator/registry/c-parse.zig +++ b/generator/registry/c-parse.zig @@ -449,7 +449,7 @@ fn parsePointers(allocator: *Allocator, xctok: *XmlCTokenizer, inner_const: bool type_info = .{ .pointer = .{ .is_const = is_const or first_const, - .is_optional = false, // set elsewhere + .is_optional = true, // set elsewhere .size = .one, // set elsewhere .child = child, }, diff --git a/generator/render.zig b/generator/render.zig index 67e8d36..599062f 100644 --- a/generator/render.zig +++ b/generator/render.zig @@ -233,15 +233,32 @@ fn Renderer(comptime WriterType: type) type { for (container.fields) |field| { try self.writeIdentifierWithCase(.snake, field.name); try self.writer.writeAll(": "); - try self.renderTypeInfo(field.field_type); - // TODO: Generate struct defaults - // TODO: Deal with packed structs - try self.writer.writeAll(", "); + if (field.bits) |bits| { + try self.writer.print(" u{},", .{bits}); + if (field.field_type != .name or builtin_types.get(field.field_type.name) == null) { + try self.writer.writeAll("// "); + try self.renderTypeInfo(field.field_type); + try self.writer.writeByte('\n'); + } + } else { + try self.renderTypeInfo(field.field_type); + try self.renderContainerDefaultField(name, field); + try self.writer.writeAll(", "); + } } try self.writer.writeAll("};\n"); } + fn renderContainerDefaultField(self: *Self, name: []const u8, field: reg.Container.Field) !void { + if (mem.eql(u8, field.name, "pNext")) { + try self.writer.writeAll(" = null"); + } else if (mem.eql(u8, field.name, "sType")) { + try self.writer.writeAll(" = ."); + try self.writeIdentifierWithCase(.snake, util.trimVkNamespace(name)); + } + } + fn renderEnumeration(self: *Self, name: []const u8, enumeration: reg.Enum) !void { // TODO: Handle bitmasks try self.writer.writeAll("const ");