feature. See also
. The project being documented here (as the example) is the Zig library itself.
ast.renderMacroFunc
fn renderMacroFunc(c: *Context, node: Node) !NodeIndex
File
Code
fn renderMacroFunc(c: *Context, node: Node) !NodeIndex {
const payload = node.castTag(.pub_inline_fn).?.data;
_ = try c.addToken(.keyword_pub, "pub");
_ = try c.addToken(.keyword_inline, "inline");
const fn_token = try c.addToken(.keyword_fn, "fn");
_ = try c.addIdentifier(payload.name);
var params = try renderParams(c, payload.params, false);
defer params.deinit(c.gpa);
var span: NodeSubRange = undefined;
if (params.items.len > 1) span = try c.listToSpan(params.items);
const return_type_expr = try renderNodeGrouped(c, payload.return_type);
const fn_proto = blk: {
if (params.items.len < 2) {
break :blk try c.addNode(.{
.tag = .fn_proto_simple,
.main_token = fn_token,
.data = .{ .opt_node_and_opt_node = .{
if (params.items.len == 1) params.items[0].toOptional() else .none,
return_type_expr.toOptional(),
} },
});
} else {
break :blk try c.addNode(.{
.tag = .fn_proto_multi,
.main_token = fn_token,
.data = .{ .extra_and_opt_node = .{
try c.addExtra(span),
return_type_expr.toOptional(),
} },
});
}
};
return c.addNode(.{
.tag = .fn_decl,
.main_token = fn_token,
.data = .{ .node_and_node = .{
fn_proto, try renderNode(c, payload.body),
} },
});
}