authorgravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-05-08 22:34:46+02:00
committergravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-05-08 22:34:46+02:00
logb488f97e92115581e12ac1a5aee6362fc4f12563
tree4db0ba400b3415efb2123846022f4ceb73dbdca2
parentf2aa7c86980df7bcbf0405be63cf62c88ed22005

autodoc: Analyze and expose backing integer types for packed structs


2 files changed, 24 insertions(+), 4 deletions(-)

lib/docs/main.js+13-3
......@@ -1849,6 +1849,15 @@ const NAV_MODES = {
18491849 } else {
18501850 name = "struct { ";
18511851 }
1852 if (structObj.backing_int !== null) {
1853 if (opts.wantHtml) {
1854 name = "<span class='tok-kw'>packed</span> " + name;
1855 } else {
1856 name = "packed " + name;
1857 }
1858 name += " (" + exprName(structObj.backing_int, opts) + ")";
1859 }
1860 name += " { ";
18521861 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
18531862 let indent = "";
18541863 if (structObj.field_types.length > 1 && opts.wantHtml) {
......@@ -4486,9 +4495,10 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
44864495 pubDecls: ty[4],
44874496 field_types: ty[5],
44884497 field_defaults: ty[6],
4489 is_tuple: ty[7],
4490 line_number: ty[8],
4491 parent_container: ty[9],
4498 backing_int: ty[7],
4499 is_tuple: ty[8],
4500 line_number: ty[9],
4501 parent_container: ty[10],
44924502 };
44934503 case 10: // ComptimeExpr
44944504 case 11: // ComptimeFloat
src/Autodoc.zig+11-1
......@@ -604,6 +604,7 @@ const DocData = struct {
604604 pubDecls: []usize = &.{}, // index into decls
605605 field_types: []Expr = &.{}, // (use src->fields to find names)
606606 field_defaults: []?Expr = &.{}, // default values is specified
607 backing_int: ?Expr = null, // backing integer if specified
607608 is_tuple: bool,
608609 line_number: usize,
609610 parent_container: ?usize, // index into `types`
......@@ -2854,13 +2855,21 @@ fn walkInstruction(
28542855 break :blk fields_len;
28552856 } else 0;
28562857
2857 // TODO: Expose explicit backing integer types in some way.
2858 var backing_int: ?DocData.Expr = null;
28582859 if (small.has_backing_int) {
28592860 const backing_int_body_len = file.zir.extra[extra_index];
28602861 extra_index += 1; // backing_int_body_len
28612862 if (backing_int_body_len == 0) {
2863 const backing_int_ref = @intToEnum(Ref, file.zir.extra[extra_index]);
2864 const backing_int_res = try self.walkRef(file, &scope, src_info, backing_int_ref, true);
2865 backing_int = backing_int_res.expr;
28622866 extra_index += 1; // backing_int_ref
28632867 } else {
2868 const backing_int_body = file.zir.extra[extra_index..][0..backing_int_body_len];
2869 const break_inst = backing_int_body[backing_int_body.len - 1];
2870 const operand = data[break_inst].@"break".operand;
2871 const backing_int_res = try self.walkRef(file, &scope, src_info, operand, true);
2872 backing_int = backing_int_res.expr;
28642873 extra_index += backing_int_body_len; // backing_int_body_inst
28652874 }
28662875 }
......@@ -2903,6 +2912,7 @@ fn walkInstruction(
29032912 .field_types = field_type_refs.items,
29042913 .field_defaults = field_default_refs.items,
29052914 .is_tuple = small.is_tuple,
2915 .backing_int = backing_int,
29062916 .line_number = self.ast_nodes.items[self_ast_node_index].line,
29072917 .parent_container = parent_scope.enclosing_type,
29082918 },