| ... | ... | @@ -1876,12 +1876,14 @@ fn walkInstruction( |
| 1876 | 1876 | // WIP |
| 1877 | 1877 | const pl_node = data[inst_index].pl_node; |
| 1878 | 1878 | const extra = file.zir.extraData(Zir.Inst.SwitchBlock, pl_node.payload_index); |
| 1879 | | const cond_index = self.exprs.items.len; |
| 1880 | 1879 | |
| 1881 | | _ = try self.walkRef(file, parent_scope, parent_src, extra.data.operand, false); |
| 1880 | const switch_cond = try self.walkRef(file, parent_scope, parent_src, extra.data.operand, false); |
| 1881 | const cond_index = self.exprs.items.len; |
| 1882 | try self.exprs.append(self.arena, switch_cond.expr); |
| 1883 | _ = cond_index; |
| 1882 | 1884 | |
| 1883 | | const ast_index = self.ast_nodes.items.len; |
| 1884 | | const type_index = self.types.items.len - 1; |
| 1885 | // const ast_index = self.ast_nodes.items.len; |
| 1886 | // const type_index = self.types.items.len - 1; |
| 1885 | 1887 | |
| 1886 | 1888 | // const ast_line = self.ast_nodes.items[ast_index - 1]; |
| 1887 | 1889 | |
| ... | ... | @@ -1894,12 +1896,18 @@ fn walkInstruction( |
| 1894 | 1896 | // log.debug("{s}", .{sep}); |
| 1895 | 1897 | |
| 1896 | 1898 | const switch_index = self.exprs.items.len; |
| 1897 | | try self.exprs.append(self.arena, .{ .switchOp = .{ |
| 1898 | | .cond_index = cond_index, |
| 1899 | | .file_name = file.sub_file_path, |
| 1900 | | .src = ast_index, |
| 1901 | | .outer_decl = type_index, |
| 1902 | | } }); |
| 1899 | |
| 1900 | // const src_loc = try self.srcLocInfo(file, pl_node.src_node, parent_src); |
| 1901 | |
| 1902 | const switch_expr = try self.getBlockSource(file, parent_src, pl_node.src_node); |
| 1903 | try self.exprs.append(self.arena, .{ .comptimeExpr = self.comptime_exprs.items.len }); |
| 1904 | try self.comptime_exprs.append(self.arena, .{ .code = switch_expr }); |
| 1905 | // try self.exprs.append(self.arena, .{ .switchOp = .{ |
| 1906 | // .cond_index = cond_index, |
| 1907 | // .file_name = file.sub_file_path, |
| 1908 | // .src = ast_index, |
| 1909 | // .outer_decl = type_index, |
| 1910 | // } }); |
| 1903 | 1911 | |
| 1904 | 1912 | return DocData.WalkResult{ |
| 1905 | 1913 | .typeRef = .{ .type = @enumToInt(Ref.type_type) }, |
| ... | ... | @@ -2157,7 +2165,8 @@ fn walkInstruction( |
| 2157 | 2165 | .typeRef = .{ .type = @enumToInt(Ref.type_type) }, |
| 2158 | 2166 | .expr = .{ .comptimeExpr = self.comptime_exprs.items.len }, |
| 2159 | 2167 | }; |
| 2160 | | const block_expr = try self.getBlockSource(file, parent_src, inst_index); |
| 2168 | const pl_node = data[inst_index].pl_node; |
| 2169 | const block_expr = try self.getBlockSource(file, parent_src, pl_node.src_node); |
| 2161 | 2170 | try self.comptime_exprs.append(self.arena, .{ |
| 2162 | 2171 | .code = block_expr, |
| 2163 | 2172 | }); |
| ... | ... | @@ -2173,7 +2182,8 @@ fn walkInstruction( |
| 2173 | 2182 | .typeRef = .{ .type = @enumToInt(Ref.type_type) }, |
| 2174 | 2183 | .expr = .{ .comptimeExpr = self.comptime_exprs.items.len }, |
| 2175 | 2184 | }; |
| 2176 | | const block_inline_expr = try self.getBlockSource(file, parent_src, inst_index); |
| 2185 | const pl_node = data[inst_index].pl_node; |
| 2186 | const block_inline_expr = try self.getBlockSource(file, parent_src, pl_node.src_node); |
| 2177 | 2187 | try self.comptime_exprs.append(self.arena, .{ |
| 2178 | 2188 | .code = block_inline_expr, |
| 2179 | 2189 | }); |
| ... | ... | @@ -3341,12 +3351,11 @@ fn analyzeDecltest( |
| 3341 | 3351 | const value_index = file.zir.extra[d.sub_index + 6]; |
| 3342 | 3352 | const decl_name_index = file.zir.extra[d.sub_index + 7]; |
| 3343 | 3353 | |
| 3344 | | // This is known to work because decl values are always block_inlines |
| 3345 | | const test_source_code = try self.getBlockSource(file, parent_src, value_index); |
| 3346 | | |
| 3347 | 3354 | const value_pl_node = data[value_index].pl_node; |
| 3348 | 3355 | const decl_src = try self.srcLocInfo(file, value_pl_node.src_node, parent_src); |
| 3349 | 3356 | |
| 3357 | const test_source_code = try self.getBlockSource(file, parent_src, value_pl_node.src_node); |
| 3358 | |
| 3350 | 3359 | const decl_name: ?[]const u8 = if (decl_name_index != 0) |
| 3351 | 3360 | file.zir.nullTerminatedString(decl_name_index) |
| 3352 | 3361 | else |
| ... | ... | @@ -4796,37 +4805,11 @@ fn getBlockSource( |
| 4796 | 4805 | self: Autodoc, |
| 4797 | 4806 | file: *File, |
| 4798 | 4807 | parent_src: SrcLocInfo, |
| 4799 | | value_index: usize, |
| 4808 | block_src_node: i32, |
| 4800 | 4809 | ) AutodocErrors![]const u8 { |
| 4801 | | const data = file.zir.instructions.items(.data); |
| 4802 | | const tags = file.zir.instructions.items(.tag); |
| 4803 | 4810 | const tree = try file.getTree(self.comp_module.gpa); |
| 4804 | | |
| 4805 | | // This is known to work because decl values are always block_inlines |
| 4806 | | const block_pl_node = data[value_index].pl_node; |
| 4807 | | const block_src = try self.srcLocInfo(file, block_pl_node.src_node, parent_src); |
| 4808 | | |
| 4809 | | const blk_index = idx: { |
| 4810 | | const pl_node = data[value_index].pl_node; |
| 4811 | | const extra = file.zir.extraData(Zir.Inst.Block, pl_node.payload_index); |
| 4812 | | const end_index = file.zir.extra[extra.end..][extra.data.body_len - 1]; |
| 4813 | | |
| 4814 | | if (tags[end_index] == .break_inline) { |
| 4815 | | break :idx @as(usize, Zir.refToIndex(data[end_index].@"break".operand).?); |
| 4816 | | } else { |
| 4817 | | break :idx null; |
| 4818 | | } |
| 4819 | | }; |
| 4820 | | |
| 4821 | | const blk_source = src: { |
| 4822 | | if (blk_index) |idx| { |
| 4823 | | const pl_node = data[idx].pl_node; |
| 4824 | | break :src try self.srcLocInfo(file, pl_node.src_node, block_src); |
| 4825 | | } else { |
| 4826 | | break :src block_src; |
| 4827 | | } |
| 4828 | | }; |
| 4829 | | return tree.getNodeSource(blk_source.src_node); |
| 4811 | const block_src = try self.srcLocInfo(file, block_src_node, parent_src); |
| 4812 | return tree.getNodeSource(block_src.src_node); |
| 4830 | 4813 | } |
| 4831 | 4814 | |
| 4832 | 4815 | fn getTLDocComment(self: *Autodoc, file: *File) ![]const u8 { |