@@ -40,7 +40,7 @@ const preamble =
40
40
\\ return fromInt(toInt(lhs) & toInt(rhs));
41
41
\\ }
42
42
\\ pub fn complement(self: FlagsType) FlagsType {
43
- \\ return fromInt(~toInt(lhs ));
43
+ \\ return fromInt(~toInt(self ));
44
44
\\ }
45
45
\\ pub fn subtract(lhs: FlagsType, rhs: FlagsType) FlagsType {
46
46
\\ return fromInt(toInt(lhs) & toInt(rhs.complement()));
@@ -214,7 +214,7 @@ fn Renderer(comptime WriterType: type) type {
214
214
}
215
215
216
216
fn writeIdentifier (self : Self , id : []const u8 ) ! void {
217
- try self . id_renderer . render (self .writer , id );
217
+ try id_render . writeIdentifier (self .writer , id );
218
218
}
219
219
220
220
fn writeIdentifierWithCase (self : * Self , case : CaseStyle , id : []const u8 ) ! void {
@@ -242,7 +242,7 @@ fn Renderer(comptime WriterType: type) type {
242
242
}
243
243
}
244
244
245
- fn extractBitflagFieldName (self : Self , bitflag_name : BitflagName , field_name : []const u8 ) ! []const u8 {
245
+ fn extractBitflagFieldName (bitflag_name : BitflagName , field_name : []const u8 ) ! []const u8 {
246
246
var flag_it = id_render .SegmentIterator .init (bitflag_name .base_name );
247
247
var field_it = id_render .SegmentIterator .init (field_name );
248
248
@@ -295,16 +295,6 @@ fn Renderer(comptime WriterType: type) type {
295
295
return mem .endsWith (u8 , base_name , "Flags" );
296
296
}
297
297
298
- fn containerHasField (self : Self , container : * const reg.Container , field_name : []const u8 ) bool {
299
- for (container .fields ) | field | {
300
- if (mem .eql (u8 , field , field_name )) {
301
- return true ;
302
- }
303
- }
304
-
305
- return false ;
306
- }
307
-
308
298
fn isInOutPointer (self : Self , ptr : reg.Pointer ) ! bool {
309
299
if (ptr .child .* != .name ) {
310
300
return false ;
@@ -373,7 +363,7 @@ fn Renderer(comptime WriterType: type) type {
373
363
}
374
364
},
375
365
.name = > | name | {
376
- if ((try self .extractBitflagName (param . param_type . name )) != null or self .isFlags (param . param_type . name )) {
366
+ if ((try self .extractBitflagName (name )) != null or self .isFlags (name )) {
377
367
return .bitflags ;
378
368
}
379
369
},
@@ -387,7 +377,7 @@ fn Renderer(comptime WriterType: type) type {
387
377
return .other ;
388
378
}
389
379
390
- fn classifyCommandDispatch (self : Self , name : []const u8 , command : reg.Command ) CommandDispatchType {
380
+ fn classifyCommandDispatch (name : []const u8 , command : reg.Command ) CommandDispatchType {
391
381
const device_handles = std .ComptimeStringMap (void , .{
392
382
.{ "VkDevice" , {} },
393
383
.{ "VkCommandBuffer" , {} },
@@ -710,37 +700,6 @@ fn Renderer(comptime WriterType: type) type {
710
700
try self .writeIdentifierWithCase (.snake , try self .extractEnumFieldName (name , field_name ));
711
701
}
712
702
713
- fn renderEnumerationValue (self : * Self , enum_name : []const u8 , enumeration : reg.Enum , value : reg.Enum.Value ) ! void {
714
- var current_value = value ;
715
- var maybe_alias_of : ? []const u8 = null ;
716
-
717
- while (true ) {
718
- switch (current_value ) {
719
- .int = > | int | try self .writer .print (" = {}, " , .{int }),
720
- .bitpos = > | pos | try self .writer .print (" = 1 << {}, " , .{pos }),
721
- .bit_vector = > | bv | try self .writer .print ("= 0x{X}, " , .{bv }),
722
- .alias = > | alias | {
723
- // Find the alias
724
- current_value = for (enumeration .fields ) | field | {
725
- if (mem .eql (u8 , field .name , alias .name )) {
726
- maybe_alias_of = field .name ;
727
- break field .value ;
728
- }
729
- } else return error .InvalidRegistry ; // There is no alias
730
- continue ;
731
- },
732
- }
733
-
734
- break ;
735
- }
736
-
737
- if (maybe_alias_of ) | alias_of | {
738
- try self .writer .writeAll ("// alias of " );
739
- try self .renderEnumFieldName (enum_name , alias_of );
740
- try self .writer .writeByte ('\n ' );
741
- }
742
- }
743
-
744
703
fn renderEnumeration (self : * Self , name : []const u8 , enumeration : reg.Enum ) ! void {
745
704
if (enumeration .is_bitmask ) {
746
705
try self .renderBitmaskBits (name , enumeration );
@@ -749,17 +708,37 @@ fn Renderer(comptime WriterType: type) type {
749
708
750
709
try self .writer .writeAll ("pub const " );
751
710
try self .renderName (name );
752
- try self .writer .writeAll (" = extern enum(i32) {" );
711
+ try self .writer .writeAll (" = enum(c_int) {" );
712
+
713
+ for (enumeration .fields ) | field | {
714
+ if (field .value == .alias )
715
+ continue ;
716
+
717
+ try self .renderEnumFieldName (name , field .name );
718
+ switch (field .value ) {
719
+ .int = > | int | try self .writer .print (" = {}, " , .{int }),
720
+ .bitpos = > | pos | try self .writer .print (" = 1 << {}, " , .{pos }),
721
+ .bit_vector = > | bv | try self .writer .print ("= 0x{X}, " , .{bv }),
722
+ .alias = > unreachable ,
723
+ }
724
+ }
725
+
726
+ try self .writer .writeAll ("_," );
753
727
754
728
for (enumeration .fields ) | field | {
755
- if (field .value == .alias and field .value .alias .is_compat_alias )
729
+ if (field .value != .alias or field .value .alias .is_compat_alias )
756
730
continue ;
757
731
732
+ try self .writer .writeAll ("pub const " );
758
733
try self .renderEnumFieldName (name , field .name );
759
- try self .renderEnumerationValue (name , enumeration , field .value );
734
+ try self .writer .writeAll (" = " );
735
+ try self .renderName (name );
736
+ try self .writer .writeByte ('.' );
737
+ try self .renderEnumFieldName (name , field .value .alias .name );
738
+ try self .writer .writeAll (";\n " );
760
739
}
761
740
762
- try self .writer .writeAll ("_, };\n " );
741
+ try self .writer .writeAll ("};\n " );
763
742
}
764
743
765
744
fn bitmaskFlagsType (bitwidth : u8 ) ! []const u8 {
@@ -797,7 +776,7 @@ fn Renderer(comptime WriterType: type) type {
797
776
798
777
for (flags_by_bitpos [0.. bits .bitwidth ]) | maybe_flag_name , bitpos | {
799
778
if (maybe_flag_name ) | flag_name | {
800
- const field_name = try self . extractBitflagFieldName (bitflag_name , flag_name );
779
+ const field_name = try extractBitflagFieldName (bitflag_name , flag_name );
801
780
try self .writeIdentifierWithCase (.snake , field_name );
802
781
} else {
803
782
try self .writer .print ("_reserved_bit_{}" , .{bitpos });
@@ -843,7 +822,7 @@ fn Renderer(comptime WriterType: type) type {
843
822
844
823
try self .writer .writeAll ("pub const " );
845
824
try self .renderName (name );
846
- try self .writer .print (" = extern enum({s}) {{null_handle = 0, _}};\n " , .{backing_type });
825
+ try self .writer .print (" = enum({s}) {{null_handle = 0, _}};\n " , .{backing_type });
847
826
}
848
827
849
828
fn renderAlias (self : * Self , name : []const u8 , alias : reg.Alias ) ! void {
@@ -948,7 +927,7 @@ fn Renderer(comptime WriterType: type) type {
948
927
for (self .registry .decls ) | decl | {
949
928
if (decl .decl_type == .command ) {
950
929
const command = decl .decl_type .command ;
951
- if (self . classifyCommandDispatch (decl .name , command ) == dispatch_type ) {
930
+ if (classifyCommandDispatch (decl .name , command ) == dispatch_type ) {
952
931
try self .renderWrapper (decl .name , decl .decl_type .command );
953
932
}
954
933
}
@@ -1208,13 +1187,13 @@ fn Renderer(comptime WriterType: type) type {
1208
1187
try self .writer .writeAll (") {\n " );
1209
1188
1210
1189
for (command .success_codes ) | success | {
1211
- try self .writer .writeByte ( '.' );
1190
+ try self .writer .writeAll ( "Result." );
1212
1191
try self .renderEnumFieldName ("VkResult" , success );
1213
1192
try self .writer .writeAll (" => {}," );
1214
1193
}
1215
1194
1216
1195
for (command .error_codes ) | err | {
1217
- try self .writer .writeByte ( '.' );
1196
+ try self .writer .writeAll ( "Result." );
1218
1197
try self .renderEnumFieldName ("VkResult" , err );
1219
1198
try self .writer .writeAll (" => return error." );
1220
1199
try self .renderResultAsErrorName (err );
0 commit comments