Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › zon › parse › Parser › parseSlice Private Function parseSlice Doc Source Private Function std.zon.parse.Parser.parseSlice
fn parseSlice (self : *@This (), T : type , nodes : Zoir .Node .Index .Range ) !T Params self : *@This () T : type nodes : Zoir .Node .Index .Range File zon/parse.zig: 731
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760 fn parseSlice (self : *@This (), T : type , nodes : Zoir .Node .Index .Range ) !T {
const pointer = @typeInfo (T ).pointer ;
// Make sure we're working with a slice
switch (pointer .size ) {
.slice => {},
.one , .many , .c => comptime unreachable ,
}
// Allocate the slice
const slice = try self .gpa .allocWithOptions (
pointer .child ,
nodes .len ,
.fromByteUnitsOptional (pointer .attrs .@"align" ),
pointer .sentinel (),
);
errdefer self .gpa .free (slice );
// Parse the elements and return the slice
for (slice , 0 ..) |*elem , i | {
errdefer if (self .options .free_on_error ) {
for (slice [0 ..i ]) |item | {
free (self .gpa , item );
}
};
elem .* = try self .parseExpr (pointer .child , nodes .at (@intCast (i )));
}
return slice ;
}