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 › parseParamDeclList
parseParamDeclList
Parse.parseParamDeclList
fn parseParamDeclList (p : *Parse ) !SmallSpan
File
Code
fn parseParamDeclList (p : *Parse ) !SmallSpan {
_ = try p .expectToken (.l_paren );
const scratch_top = p .scratch .items .len ;
defer p .scratch .shrinkRetainingCapacity (scratch_top );
var varargs : enum { none , seen , err } = .none ;
while (true ) {
if (p .eatToken (.r_paren )) |_ | break ;
if (varargs == .seen ) {
try p .warnMsg (.{ .tag = .varargs_nonfinal , .token = p .tok_i });
varargs = .err ;
}
const opt_param = try p .expectParamDecl ();
if (opt_param ) |param | {
try p .scratch .append (p .gpa , param );
} else if (p .tokenTag (p .tok_i - 1 ) == .ellipsis3 ) {
if (varargs == .none ) varargs = .seen ;
}
switch (p .tokenTag (p .tok_i )) {
.comma => p .tok_i += 1 ,
.r_paren => {
p .tok_i += 1 ;
break ;
},
.colon , .r_brace , .r_bracket => return p .failExpected (.r_paren ),
else => try p .warn (.expected_comma_after_param ),
}
}
const params = p .scratch .items [scratch_top ..];
return switch (params .len ) {
0 => .{ .zero_or_one = .none },
1 => .{ .zero_or_one = params [0 ].toOptional () },
else => .{ .multi = try p .listToSpan (params ) },
};
}