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 › expectWhileExpr
expectWhileExpr
Parse.expectWhileExpr
fn expectWhileExpr (p : *Parse ) !Node .Index
File
Code
fn expectWhileExpr (p : *Parse ) !Node .Index {
const while_token = p .assertToken (.keyword_while );
_ = try p .expectToken (.l_paren );
const condition = try p .expectExpr ();
_ = try p .expectToken (.r_paren );
_ = try p .parsePtrPayload ();
const cont_expr = try p .parseWhileContinueExpr ();
const then_expr = try p .expectExpr ();
_ = p .eatToken (.keyword_else ) orelse {
if (cont_expr == null ) {
return try p .addNode (.{
.tag = .while_simple ,
.main_token = while_token ,
.data = .{ .node_and_node = .{
condition ,
then_expr ,
} },
});
} else {
return try p .addNode (.{
.tag = .while_cont ,
.main_token = while_token ,
.data = .{ .node_and_extra = .{
condition ,
try p .addExtra (Node .WhileCont {
.cont_expr = cont_expr .?,
.then_expr = then_expr ,
}),
} },
});
}
};
_ = try p .parsePayload ();
const else_expr = try p .expectExpr ();
return try p .addNode (.{
.tag = .@"while" ,
.main_token = while_token ,
.data = .{ .node_and_extra = .{
condition ,
try p .addExtra (Node .While {
.cont_expr = .fromOptional (cont_expr ),
.then_expr = then_expr ,
.else_expr = else_expr ,
}),
} },
});
}