authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-12-18 20:33:38+00:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-12-19 03:21:56+00:00
log58b8b1ac2af642e886f3a561bf6dfd971bb80a96
treec71b592a592e21b108fccc0be3f99a45b6a13c6e
parenteac87ea8d646ccf07d25152649a9ff9ede23fc3d
signaturelock-open Commit is signed but in an unrecognized format.

Zcu: allow `node_offset_var_decl_*` source location for function declarations


1 files changed, 24 insertions(+), 6 deletions(-)

src/Zcu.zig+24-6
...@@ -836,20 +836,38 @@ pub const SrcLoc = struct {...@@ -836,20 +836,38 @@ pub const SrcLoc = struct {
836 .node_offset_var_decl_align => |node_off| {836 .node_offset_var_decl_align => |node_off| {
837 const tree = try src_loc.file_scope.getTree(gpa);837 const tree = try src_loc.file_scope.getTree(gpa);
838 const node = src_loc.relativeToNodeIndex(node_off);838 const node = src_loc.relativeToNodeIndex(node_off);
839 const full = tree.fullVarDecl(node).?;839 var buf: [1]Ast.Node.Index = undefined;
840 return tree.nodeToSpan(full.ast.align_node);840 const align_node = if (tree.fullVarDecl(node)) |v|
841 v.ast.align_node
842 else if (tree.fullFnProto(&buf, node)) |f|
843 f.ast.align_expr
844 else
845 unreachable;
846 return tree.nodeToSpan(align_node);
841 },847 },
842 .node_offset_var_decl_section => |node_off| {848 .node_offset_var_decl_section => |node_off| {
843 const tree = try src_loc.file_scope.getTree(gpa);849 const tree = try src_loc.file_scope.getTree(gpa);
844 const node = src_loc.relativeToNodeIndex(node_off);850 const node = src_loc.relativeToNodeIndex(node_off);
845 const full = tree.fullVarDecl(node).?;851 var buf: [1]Ast.Node.Index = undefined;
846 return tree.nodeToSpan(full.ast.section_node);852 const section_node = if (tree.fullVarDecl(node)) |v|
853 v.ast.section_node
854 else if (tree.fullFnProto(&buf, node)) |f|
855 f.ast.section_expr
856 else
857 unreachable;
858 return tree.nodeToSpan(section_node);
847 },859 },
848 .node_offset_var_decl_addrspace => |node_off| {860 .node_offset_var_decl_addrspace => |node_off| {
849 const tree = try src_loc.file_scope.getTree(gpa);861 const tree = try src_loc.file_scope.getTree(gpa);
850 const node = src_loc.relativeToNodeIndex(node_off);862 const node = src_loc.relativeToNodeIndex(node_off);
851 const full = tree.fullVarDecl(node).?;863 var buf: [1]Ast.Node.Index = undefined;
852 return tree.nodeToSpan(full.ast.addrspace_node);864 const addrspace_node = if (tree.fullVarDecl(node)) |v|
865 v.ast.addrspace_node
866 else if (tree.fullFnProto(&buf, node)) |f|
867 f.ast.addrspace_expr
868 else
869 unreachable;
870 return tree.nodeToSpan(addrspace_node);
853 },871 },
854 .node_offset_var_decl_init => |node_off| {872 .node_offset_var_decl_init => |node_off| {
855 const tree = try src_loc.file_scope.getTree(gpa);873 const tree = try src_loc.file_scope.getTree(gpa);