feature. See also
. The project being documented here (as the example) is the Zig library itself.
ast.renderVar
fn renderVar(c: *Context, node: Node) !NodeIndex
File
Code
fn renderVar(c: *Context, node: Node) !NodeIndex {
const payload = node.castTag(.var_decl).?.data;
if (payload.is_pub) _ = try c.addToken(.keyword_pub, "pub");
if (payload.is_extern) _ = try c.addToken(.keyword_extern, "extern");
if (payload.is_export) _ = try c.addToken(.keyword_export, "export");
if (payload.is_threadlocal) _ = try c.addToken(.keyword_threadlocal, "threadlocal");
const mut_tok = if (payload.is_const)
try c.addToken(.keyword_const, "const")
else
try c.addToken(.keyword_var, "var");
_ = try c.addIdentifier(payload.name);
_ = try c.addToken(.colon, ":");
const type_node = try renderNode(c, payload.type);
const align_node_opt = if (payload.alignment) |some| blk: {
_ = try c.addToken(.keyword_align, "align");
_ = try c.addToken(.l_paren, "(");
const res = try c.addNode(.{
.tag = .number_literal,
.main_token = try c.addTokenFmt(.number_literal, "{d}", .{some}),
.data = undefined,
});
_ = try c.addToken(.r_paren, ")");
break :blk res;
} else null;
const section_node_opt = if (payload.linksection_string) |some| blk: {
_ = try c.addToken(.keyword_linksection, "linksection");
_ = try c.addToken(.l_paren, "(");
const res = try c.addNode(.{
.tag = .string_literal,
.main_token = try c.addTokenFmt(.string_literal, "\"{f}\"", .{std.zig.fmtString(some)}),
.data = undefined,
});
_ = try c.addToken(.r_paren, ")");
break :blk res;
} else null;
const init_node_opt = if (payload.init) |some| blk: {
_ = try c.addToken(.equal, "=");
break :blk try renderNode(c, some);
} else null;
_ = try c.addToken(.semicolon, ";");
if (section_node_opt) |section_node| {
return c.addNode(.{
.tag = .global_var_decl,
.main_token = mut_tok,
.data = .{ .extra_and_opt_node = .{
try c.addExtra(std.zig.Ast.Node.GlobalVarDecl{
.type_node = type_node.toOptional(),
.align_node = .fromOptional(align_node_opt),
.section_node = section_node.toOptional(),
.addrspace_node = .none,
}),
.fromOptional(init_node_opt),
} },
});
} else {
if (align_node_opt) |align_node| {
return c.addNode(.{
.tag = .local_var_decl,
.main_token = mut_tok,
.data = .{ .extra_and_opt_node = .{
try c.addExtra(std.zig.Ast.Node.LocalVarDecl{
.type_node = type_node,
.align_node = align_node,
}),
.fromOptional(init_node_opt),
} },
});
} else {
return c.addNode(.{
.tag = .simple_var_decl,
.main_token = mut_tok,
.data = .{
.opt_node_and_opt_node = .{
type_node.toOptional(),
.fromOptional(init_node_opt),
},
},
});
}
}
}