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 › expectIfStatement
expectIfStatement
Parse.expectIfStatement
fn expectIfStatement (p : *Parse ) !Node .Index
File
Code
fn expectIfStatement (p : *Parse ) !Node .Index {
const if_token = p .assertToken (.keyword_if );
_ = try p .expectToken (.l_paren );
const condition = try p .expectExpr ();
_ = try p .expectToken (.r_paren );
_ = try p .parsePtrPayload ();
// inside if statements, even if there is an `else`.
var else_required = false ;
const then_expr = blk : {
const block_expr = try p .parseBlockExpr ();
if (block_expr ) |block | break :blk block ;
const assign_expr = try p .parseAssignExpr () orelse {
return p .fail (.expected_block_or_assignment );
};
if (p .eatToken (.semicolon )) |_ | {
return p .addNode (.{
.tag = .if_simple ,
.main_token = if_token ,
.data = .{ .node_and_node = .{
condition ,
assign_expr ,
} },
});
}
else_required = true ;
break :blk assign_expr ;
};
_ = p .eatToken (.keyword_else ) orelse {
if (else_required ) {
try p .warn (.expected_semi_or_else );
}
return p .addNode (.{
.tag = .if_simple ,
.main_token = if_token ,
.data = .{ .node_and_node = .{
condition ,
then_expr ,
} },
});
};
_ = try p .parsePayload ();
const else_expr = try p .expectStatement (false );
return p .addNode (.{
.tag = .@"if" ,
.main_token = if_token ,
.data = .{ .node_and_extra = .{
condition ,
try p .addExtra (Node .If {
.then_expr = then_expr ,
.else_expr = else_expr ,
}),
} },
});
}