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 › AstGen › errorSetDecl Private Function errorSetDecl Doc Source Private Function std.zig.AstGen.errorSetDecl
fn errorSetDecl (gz : *GenZir , ri : ResultInfo , node : Ast .Node .Index ) InnerError !Zir .Inst .Ref Params Errors File zig/AstGen.zig: 5695
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745 fn errorSetDecl (gz : *GenZir , ri : ResultInfo , node : Ast .Node .Index ) InnerError !Zir .Inst .Ref {
const astgen = gz .astgen ;
const gpa = astgen .gpa ;
const tree = astgen .tree ;
const payload_index = try reserveExtra (astgen , @typeInfo (Zir .Inst .ErrorSetDecl ).@"struct" .field_names .len );
var fields_len : usize = 0 ;
{
var idents : std .AutoHashMapUnmanaged (Zir .NullTerminatedString , Ast .TokenIndex ) = .empty ;
defer idents .deinit (gpa );
const lbrace , const rbrace = tree .nodeData (node ).token_and_token ;
for (lbrace + 1 ..rbrace ) |i | {
const tok_i : Ast .TokenIndex = @intCast (i );
switch (tree .tokenTag (tok_i )) {
.doc_comment , .comma => {},
.identifier => {
const str_index = try astgen .identAsString (tok_i );
const gop = try idents .getOrPut (gpa , str_index );
if (gop .found_existing ) {
const name = try gpa .dupe (u8 , mem .span (astgen .nullTerminatedString (str_index )));
defer gpa .free (name );
return astgen .failTokNotes (
tok_i ,
"duplicate error set field '{s}'" ,
.{name },
&[_ ]u32 {
try astgen .errNoteTok (
gop .value_ptr .*,
"previous declaration here" ,
.{},
),
},
);
}
gop .value_ptr .* = tok_i ;
try astgen .extra .append (gpa , @backingInt (str_index ));
fields_len += 1 ;
},
else => unreachable ,
}
}
}
setExtra (astgen , payload_index , Zir .Inst .ErrorSetDecl {
.fields_len = @intCast (fields_len ),
});
const result = try gz .addPlNodePayloadIndex (.error_set_decl , node , payload_index );
return rvalue (gz , ri , result , node );
}