| ... | @@ -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); |