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 › zig › Zir › getEnumDecl Public Function getEnumDecl Doc Source Public Function std.zig.Zir.getEnumDecl
pub fn getEnumDecl (zir : *const Zir , enum_decl : Inst .Index ) UnwrappedEnumDecl Params File zig/Zir.zig: 5557
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617 pub fn getEnumDecl (zir : *const Zir , enum_decl : Inst .Index ) UnwrappedEnumDecl {
const inst_data = zir .instructions .get (@backingInt (enum_decl ));
assert (inst_data .tag == .extended );
assert (inst_data .data .extended .opcode == .enum_decl );
const small : Inst .EnumDecl .Small = @bitCast (inst_data .data .extended .small );
const extra = zir .extraData (Inst .EnumDecl , inst_data .data .extended .operand );
var extra_index = extra .end ;
const captures_len : u32 = if (small .has_captures_len ) blk : {
const captures_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk captures_len ;
} else 0 ;
const decls_len : u32 = if (small .has_decls_len ) blk : {
const decls_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk decls_len ;
} else 0 ;
const fields_len : u32 = if (small .has_fields_len ) blk : {
const fields_len = zir .extra [extra_index ];
extra_index += 1 ;
break :blk fields_len ;
} else 0 ;
const tag_type_body_len : u32 = if (small .has_tag_type ) len : {
const body_len = zir .extra [extra_index ];
extra_index += 1 ;
break :len body_len ;
} else 0 ;
const captures : []const Inst .Capture = @ptrCast (zir .extra [extra_index ..][0 ..captures_len ]);
extra_index += captures_len ;
const capture_names : []const NullTerminatedString = @ptrCast (zir .extra [extra_index ..][0 ..captures_len ]);
extra_index += captures_len ;
const decls : []const Inst .Index = @ptrCast (zir .extra [extra_index ..][0 ..decls_len ]);
extra_index += decls_len ;
const field_names : []const NullTerminatedString = @ptrCast (zir .extra [extra_index ..][0 ..fields_len ]);
extra_index += fields_len ;
const field_value_body_lens : ?[]const u32 = if (small .any_field_values ) lens : {
const lens = zir .extra [extra_index ..][0 ..fields_len ];
extra_index += fields_len ;
break :lens @ptrCast (lens );
} else null ;
const tag_type_body : ?[]const Zir .Inst .Index = switch (tag_type_body_len ) {
0 => null ,
else => |n | zir .bodySlice (extra_index , n ),
};
extra_index += tag_type_body_len ;
const field_bodies_overlong : []const Inst .Index = @ptrCast (zir .extra [extra_index ..]);
return .{
.src_line = extra .data .src_line ,
.src_column = extra .data .src_column ,
.src_node = extra .data .src_node ,
.name_strategy = small .name_strategy ,
.captures = captures ,
.capture_names = capture_names ,
.decls = decls ,
.tag_type_body = tag_type_body ,
.nonexhaustive = small .nonexhaustive ,
.field_names = field_names ,
.field_value_body_lens = field_value_body_lens ,
.field_bodies_overlong = field_bodies_overlong ,
};
}