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 library itself.
Zig › std/ › debug/ › Dwarf.zig › parseAbbrevTable
parseAbbrevTable
Dwarf.parseAbbrevTable
fn parseAbbrevTable (di : *Dwarf , gpa : Allocator , offset : u64 ) !Abbrev .Table
File
Code
fn parseAbbrevTable (di : *Dwarf , gpa : Allocator , offset : u64 ) !Abbrev .Table {
var fr : Reader = .fixed (di .section (.debug_abbrev ).?);
fr .seek = cast (usize , offset ) orelse return bad ();
var abbrevs : std .ArrayList (Abbrev ) = .empty ;
defer {
for (abbrevs .items ) |*abbrev | {
abbrev .deinit (gpa );
}
abbrevs .deinit (gpa );
}
var attrs : std .ArrayList (Abbrev .Attr ) = .empty ;
defer attrs .deinit (gpa );
while (true ) {
const code = try fr .takeLeb128 (u64 );
if (code == 0 ) break ;
const tag_id = try fr .takeLeb128 (u64 );
const has_children = (try fr .takeByte ()) == DW .CHILDREN .yes ;
while (true ) {
const attr_id = try fr .takeLeb128 (u64 );
const form_id = try fr .takeLeb128 (u64 );
if (attr_id == 0 and form_id == 0 ) break ;
try attrs .append (gpa , .{
.id = attr_id ,
.form_id = form_id ,
.payload = switch (form_id ) {
FORM .implicit_const => try fr .takeLeb128 (i64 ),
else => undefined ,
},
});
}
try abbrevs .ensureUnusedCapacity (gpa , 1 );
abbrevs .appendAssumeCapacity (.{
.code = code ,
.tag_id = tag_id ,
.has_children = has_children ,
.attrs = try attrs .toOwnedSlice (gpa ),
});
}
return .{
.offset = offset ,
.abbrevs = try abbrevs .toOwnedSlice (gpa ),
};
}