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 › parsePtrModifiers
parsePtrModifiers
Parse.parsePtrModifiers
fn parsePtrModifiers (p : *Parse , align_type : enum
File
Code
fn parsePtrModifiers (p : *Parse , align_type : enum { bit_align , byte_align }) !PtrModifiers {
var result : PtrModifiers = .{
.align_node = .none ,
.addrspace_node = .none ,
.bit_range_start = .none ,
.bit_range_end = .none ,
};
while (true ) {
switch (p .tokenTag (p .tok_i )) {
.keyword_align => {
if (result .align_node != .none ) {
try p .warn (.extra_align_qualifier );
}
p .tok_i += 1 ;
_ = try p .expectToken (.l_paren );
result .align_node = (try p .expectExpr ()).toOptional ();
if (p .eatToken (.colon )) |colon | {
if (align_type == .byte_align ) {
try p .warnMsg (.{ .tag = .invalid_bit_range , .token = colon });
}
result .bit_range_start = (try p .expectExpr ()).toOptional ();
_ = try p .expectToken (.colon );
result .bit_range_end = (try p .expectExpr ()).toOptional ();
}
_ = try p .expectToken (.r_paren );
},
.keyword_addrspace => {
if (result .addrspace_node != .none ) {
try p .warn (.extra_addrspace_qualifier );
}
result .addrspace_node = .fromOptional (try p .parseAddrSpace ());
},
.keyword_allowzero ,
.keyword_const ,
.keyword_volatile ,
=> p .tok_i += 1 ,
else => return result ,
}
}
}