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 › getDeclaration Public Function getDeclaration Doc Source Public Function std.zig.Zir.getDeclaration
pub fn getDeclaration (zir : Zir , inst : Zir .Inst .Index ) Inst .Declaration .Unwrapped Params File zig/Zir.zig: 4814
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883 pub fn getDeclaration (zir : Zir , inst : Zir .Inst .Index ) Inst .Declaration .Unwrapped {
assert (zir .instructions .items (.tag )[@backingInt (inst )] == .declaration );
const pl_node = zir .instructions .items (.data )[@backingInt (inst )].declaration ;
const extra = zir .extraData (Inst .Declaration , pl_node .payload_index );
const flags_vals : [2 ]u32 = .{ extra .data .flags_0 , extra .data .flags_1 };
const flags : Inst .Declaration .Flags = @bitCast (flags_vals );
var extra_index = extra .end ;
const name : NullTerminatedString = if (flags .id .hasName ()) name : {
const name = zir .extra [extra_index ];
extra_index += 1 ;
break :name @fromBackingInt (@intCast (name ));
} else .empty ;
const lib_name : NullTerminatedString = if (flags .id .hasLibName ()) lib_name : {
const lib_name = zir .extra [extra_index ];
extra_index += 1 ;
break :lib_name @fromBackingInt (@intCast (lib_name ));
} else .empty ;
const type_body_len : u32 = if (flags .id .hasTypeBody ()) len : {
const len = zir .extra [extra_index ];
extra_index += 1 ;
break :len len ;
} else 0 ;
const align_body_len : u32 , const linksection_body_len : u32 , const addrspace_body_len : u32 = lens : {
if (!flags .id .hasSpecialBodies ()) break :lens .{ 0 , 0 , 0 };
const lens = zir .extra [extra_index ..][0 ..3 ].*;
extra_index += 3 ;
break :lens lens ;
};
const value_body_len : u32 = if (flags .id .hasValueBody ()) len : {
const len = zir .extra [extra_index ];
extra_index += 1 ;
break :len len ;
} else 0 ;
const type_body = zir .bodySlice (extra_index , type_body_len );
extra_index += type_body_len ;
const align_body = zir .bodySlice (extra_index , align_body_len );
extra_index += align_body_len ;
const linksection_body = zir .bodySlice (extra_index , linksection_body_len );
extra_index += linksection_body_len ;
const addrspace_body = zir .bodySlice (extra_index , addrspace_body_len );
extra_index += addrspace_body_len ;
const value_body = zir .bodySlice (extra_index , value_body_len );
extra_index += value_body_len ;
return .{
.src_node = pl_node .src_node ,
.src_line = flags .src_line ,
.src_column = flags .src_column ,
.kind = flags .id .kind (),
.name = name ,
.is_pub = flags .id .isPub (),
.is_threadlocal = flags .id .isThreadlocal (),
.linkage = flags .id .linkage (),
.lib_name = lib_name ,
.type_body = if (type_body_len == 0 ) null else type_body ,
.align_body = if (align_body_len == 0 ) null else align_body ,
.linksection_body = if (linksection_body_len == 0 ) null else linksection_body ,
.addrspace_body = if (addrspace_body_len == 0 ) null else addrspace_body ,
.value_body = if (value_body_len == 0 ) null else value_body ,
};
}