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 = {...@@ -1849,6 +1849,15 @@ const NAV_MODES = {
1849 } else {1849 } else {
1850 name = "struct { ";1850 name = "struct { ";
1851 }1851 }
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 += " { ";
1852 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }1861 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
1853 let indent = "";1862 let indent = "";
1854 if (structObj.field_types.length > 1 && opts.wantHtml) {1863 if (structObj.field_types.length > 1 && opts.wantHtml) {
...@@ -4486,9 +4495,10 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4486,9 +4495,10 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4486 pubDecls: ty[4],4495 pubDecls: ty[4],
4487 field_types: ty[5],4496 field_types: ty[5],
4488 field_defaults: ty[6],4497 field_defaults: ty[6],
4489 is_tuple: ty[7],4498 backing_int: ty[7],
4490 line_number: ty[8],4499 is_tuple: ty[8],
4491 parent_container: ty[9],4500 line_number: ty[9],
4501 parent_container: ty[10],
4492 };4502 };
4493 case 10: // ComptimeExpr4503 case 10: // ComptimeExpr
4494 case 11: // ComptimeFloat4504 case 11: // ComptimeFloat
src/Autodoc.zig+11-1
...@@ -604,6 +604,7 @@ const DocData = struct {...@@ -604,6 +604,7 @@ const DocData = struct {
604 pubDecls: []usize = &.{}, // index into decls604 pubDecls: []usize = &.{}, // index into decls
605 field_types: []Expr = &.{}, // (use src->fields to find names)605 field_types: []Expr = &.{}, // (use src->fields to find names)
606 field_defaults: []?Expr = &.{}, // default values is specified606 field_defaults: []?Expr = &.{}, // default values is specified
607 backing_int: ?Expr = null, // backing integer if specified
607 is_tuple: bool,608 is_tuple: bool,
608 line_number: usize,609 line_number: usize,
609 parent_container: ?usize, // index into `types`610 parent_container: ?usize, // index into `types`
...@@ -2854,13 +2855,21 @@ fn walkInstruction(...@@ -2854,13 +2855,21 @@ fn walkInstruction(
2854 break :blk fields_len;2855 break :blk fields_len;
2855 } else 0;2856 } else 0;
28562857
2857 // TODO: Expose explicit backing integer types in some way.2858 var backing_int: ?DocData.Expr = null;
2858 if (small.has_backing_int) {2859 if (small.has_backing_int) {
2859 const backing_int_body_len = file.zir.extra[extra_index];2860 const backing_int_body_len = file.zir.extra[extra_index];
2860 extra_index += 1; // backing_int_body_len2861 extra_index += 1; // backing_int_body_len
2861 if (backing_int_body_len == 0) {2862 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;
2862 extra_index += 1; // backing_int_ref2866 extra_index += 1; // backing_int_ref
2863 } else {2867 } 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;
2864 extra_index += backing_int_body_len; // backing_int_body_inst2873 extra_index += backing_int_body_len; // backing_int_body_inst
2865 }2874 }
2866 }2875 }
...@@ -2903,6 +2912,7 @@ fn walkInstruction(...@@ -2903,6 +2912,7 @@ fn walkInstruction(
2903 .field_types = field_type_refs.items,2912 .field_types = field_type_refs.items,
2904 .field_defaults = field_default_refs.items,2913 .field_defaults = field_default_refs.items,
2905 .is_tuple = small.is_tuple,2914 .is_tuple = small.is_tuple,
2915 .backing_int = backing_int,
2906 .line_number = self.ast_nodes.items[self_ast_node_index].line,2916 .line_number = self.ast_nodes.items[self_ast_node_index].line,
2907 .parent_container = parent_scope.enclosing_type,2917 .parent_container = parent_scope.enclosing_type,
2908 },2918 },