diff --git a/lib/docs/main.js b/lib/docs/main.js index befa858304..e436b9859e 100644 --- a/lib/docs/main.js +++ b/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']) { diff --git a/src/Autodoc.zig b/src/Autodoc.zig index efae96b3bb..15d4ea45d2 100644 --- a/src/Autodoc.zig +++ b/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 }, };