Commit 21fd4a7a8b

Vallahor <vallahor91@gmail.com>
2022-05-24 01:24:16
fix: printing const in types and fn decl and sentinel in strings
1 parent 019fd45
Changed files (2)
lib
docs
src
lib/docs/main.js
@@ -1134,6 +1134,7 @@ var zigAnalysis;
                     let name = "[";
                     let lenName = exprName(arrayObj.len, opts);
                     let sentinel = arrayObj.sentinel ? ":0" : "";
+                    let is_mutable = arrayObj.is_multable ? "const " : "";
 
                     if (opts.wantHtml) {
                       name +=
@@ -1142,6 +1143,7 @@ var zigAnalysis;
                       name += lenName + sentinel;
                     }
                     name += "]";
+                    name += is_mutable;
                     name += exprName(arrayObj.child, opts);
                     return name;
                   }
@@ -1151,27 +1153,32 @@ var zigAnalysis;
                   {
                       let ptrObj = /** @type {PointerType} */(typeObj);
                       let sentinel = ptrObj.sentinel ? ":0" : "";
+                      let is_mutable = !ptrObj.is_mutable ? "const " : "";
                       let name = "";
                       switch (ptrObj.size) {
                           default:
                               console.log("TODO: implement unhandled pointer size case");
                           case pointerSizeEnum.One:
                               name += "*";
+                              name += is_mutable;
                               break;
                           case pointerSizeEnum.Many:
                               name += "[*";
                               name += sentinel;
                               name += "]";
+                              name += is_mutable;
                               break;
                           case pointerSizeEnum.Slice:
                               name += "[";
                               name += sentinel;
                               name += "]";
+                              name += is_mutable;
                               break;
                           case pointerSizeEnum.C:
                               name += "[*c";
                               name += sentinel;
                               name += "]";
+                              name += is_mutable;
                               break;
                       }
                       if (ptrObj['const']) {
src/Autodoc.zig
@@ -384,6 +384,7 @@ const DocData = struct {
             size: std.builtin.TypeInfo.Pointer.Size,
             child: Expr,
             sentinel: bool = false,
+            is_mutable: bool = true,
         },
         Array: struct {
             len: Expr,
@@ -485,6 +486,11 @@ const DocData = struct {
                         \\
                     , .{v.sentinel});
                     if (options.whitespace) |ws| try ws.outputIndent(w);
+                    try w.print(
+                        \\"is_mutable": {},
+                        \\
+                    , .{v.is_mutable});
+                    if (options.whitespace) |ws| try ws.outputIndent(w);
                     try w.print(
                         \\"child":
                     , .{});
@@ -759,6 +765,7 @@ fn walkInstruction(
                     .Array = .{
                         .len = .{ .int = .{ .value = str.len } },
                         .child = .{ .type = @enumToInt(Ref.u8_type) },
+                        .sentinel = true,
                     },
                 });
                 // const sentinel: ?usize = if (ptr.flags.has_sentinel) 0 else null;
@@ -768,7 +775,7 @@ fn walkInstruction(
                         .size = .One,
                         .child = .{ .type = arrTypeId },
                         .sentinel = true,
-                        // TODO: add sentinel!
+                        .is_mutable = false,
                     },
                 });
                 break :blk .{ .type = ptrTypeId };
@@ -839,11 +846,12 @@ fn walkInstruction(
                 .Pointer = .{
                     .size = ptr.size,
                     .child = elem_type_ref.expr,
+                    .is_mutable = ptr.is_mutable,
                 },
             });
 
             return DocData.WalkResult{
-                .typeRef = .{ .type = elem_type_ref.expr.type },
+                .typeRef = .{ .type = @enumToInt(Ref.type_type) },
                 .expr = .{ .type = type_slot_index },
             };
         },
@@ -861,14 +869,9 @@ fn walkInstruction(
                 false,
             );
             try self.types.append(self.arena, .{
-                .Pointer = .{
-                    .size = ptr.size,
-                    .child = elem_type_ref.expr,
-                    .sentinel = sentinel,
-                },
+                .Pointer = .{ .size = ptr.size, .child = elem_type_ref.expr, .sentinel = sentinel, .is_mutable = ptr.flags.is_mutable },
             });
             return DocData.WalkResult{
-                // .typeRef = .{ .type = type_slot_index },
                 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
                 .expr = .{ .type = type_slot_index },
             };