aboutsummaryrefslogtreecommitdiff
path: root/src/Zcu.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-12-18 20:33:38 +0000
committermlugg <mlugg@mlugg.co.uk>2024-12-19 03:21:56 +0000
commit58b8b1ac2af642e886f3a561bf6dfd971bb80a96 (patch)
treec71b592a592e21b108fccc0be3f99a45b6a13c6e /src/Zcu.zig
parenteac87ea8d646ccf07d25152649a9ff9ede23fc3d (diff)
downloadzig-58b8b1ac2af642e886f3a561bf6dfd971bb80a96.tar.gz
zig-58b8b1ac2af642e886f3a561bf6dfd971bb80a96.zip
Zcu: allow `node_offset_var_decl_*` source location for function declarations
Diffstat (limited to 'src/Zcu.zig')
-rw-r--r--src/Zcu.zig30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/Zcu.zig b/src/Zcu.zig
index 119ea35a85..371df3d459 100644
--- a/src/Zcu.zig
+++ b/src/Zcu.zig
@@ -836,20 +836,38 @@ pub const SrcLoc = struct {
.node_offset_var_decl_align => |node_off| {
const tree = try src_loc.file_scope.getTree(gpa);
const node = src_loc.relativeToNodeIndex(node_off);
- const full = tree.fullVarDecl(node).?;
- return tree.nodeToSpan(full.ast.align_node);
+ var buf: [1]Ast.Node.Index = undefined;
+ const align_node = if (tree.fullVarDecl(node)) |v|
+ v.ast.align_node
+ else if (tree.fullFnProto(&buf, node)) |f|
+ f.ast.align_expr
+ else
+ unreachable;
+ return tree.nodeToSpan(align_node);
},
.node_offset_var_decl_section => |node_off| {
const tree = try src_loc.file_scope.getTree(gpa);
const node = src_loc.relativeToNodeIndex(node_off);
- const full = tree.fullVarDecl(node).?;
- return tree.nodeToSpan(full.ast.section_node);
+ var buf: [1]Ast.Node.Index = undefined;
+ const section_node = if (tree.fullVarDecl(node)) |v|
+ v.ast.section_node
+ else if (tree.fullFnProto(&buf, node)) |f|
+ f.ast.section_expr
+ else
+ unreachable;
+ return tree.nodeToSpan(section_node);
},
.node_offset_var_decl_addrspace => |node_off| {
const tree = try src_loc.file_scope.getTree(gpa);
const node = src_loc.relativeToNodeIndex(node_off);
- const full = tree.fullVarDecl(node).?;
- return tree.nodeToSpan(full.ast.addrspace_node);
+ var buf: [1]Ast.Node.Index = undefined;
+ const addrspace_node = if (tree.fullVarDecl(node)) |v|
+ v.ast.addrspace_node
+ else if (tree.fullFnProto(&buf, node)) |f|
+ f.ast.addrspace_expr
+ else
+ unreachable;
+ return tree.nodeToSpan(addrspace_node);
},
.node_offset_var_decl_init => |node_off| {
const tree = try src_loc.file_scope.getTree(gpa);