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/ › zig/ › Parse.zig › expectBuiltinCall
expectBuiltinCall
Parse.expectBuiltinCall
fn expectBuiltinCall (p : *Parse ) !Node .Index
File
Code
fn expectBuiltinCall (p : *Parse ) !Node .Index {
const builtin_token = p .assertToken (.builtin );
_ = p .eatToken (.l_paren ) orelse {
try p .warn (.expected_param_list );
return p .addNode (.{
.tag = .identifier ,
.main_token = builtin_token ,
.data = undefined ,
});
};
const scratch_top = p .scratch .items .len ;
defer p .scratch .shrinkRetainingCapacity (scratch_top );
while (true ) {
if (p .eatToken (.r_paren )) |_ | break ;
const param = try p .expectExpr ();
try p .scratch .append (p .gpa , param );
switch (p .tokenTag (p .tok_i )) {
.comma => p .tok_i += 1 ,
.r_paren => {
p .tok_i += 1 ;
break ;
},
else => try p .warn (.expected_comma_after_arg ),
}
}
const comma = (p .tokenTag (p .tok_i - 2 )) == .comma ;
const params = p .scratch .items [scratch_top ..];
if (params .len <= 2 ) {
return p .addNode (.{
.tag = if (comma ) .builtin_call_two_comma else .builtin_call_two ,
.main_token = builtin_token ,
.data = .{ .opt_node_and_opt_node = .{
if (params .len >= 1 ) .fromOptional (params [0 ]) else .none ,
if (params .len >= 2 ) .fromOptional (params [1 ]) else .none ,
} },
});
} else {
const span = try p .listToSpan (params );
return p .addNode (.{
.tag = if (comma ) .builtin_call_comma else .builtin_call ,
.main_token = builtin_token ,
.data = .{ .extra_range = span },
});
}
}