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 › parseBlock
parseBlock
Parse.parseBlock
fn parseBlock (p : *Parse ) !?Node .Index
File
Code
fn parseBlock (p : *Parse ) !?Node .Index {
const lbrace = p .eatToken (.l_brace ) orelse return null ;
const scratch_top = p .scratch .items .len ;
defer p .scratch .shrinkRetainingCapacity (scratch_top );
while (true ) {
if (p .tokenTag (p .tok_i ) == .r_brace ) break ;
const statement = try p .expectStatementRecoverable () orelse break ;
try p .scratch .append (p .gpa , statement );
}
_ = try p .expectToken (.r_brace );
const statements = p .scratch .items [scratch_top ..];
const semicolon = statements .len != 0 and (p .tokenTag (p .tok_i - 2 )) == .semicolon ;
if (statements .len <= 2 ) {
return try p .addNode (.{
.tag = if (semicolon ) .block_two_semicolon else .block_two ,
.main_token = lbrace ,
.data = .{ .opt_node_and_opt_node = .{
if (statements .len >= 1 ) statements [0 ].toOptional () else .none ,
if (statements .len >= 2 ) statements [1 ].toOptional () else .none ,
} },
});
} else {
return try p .addNode (.{
.tag = if (semicolon ) .block_semicolon else .block ,
.main_token = lbrace ,
.data = .{ .extra_range = try p .listToSpan (statements ) },
});
}
}