fix: printing const in types and fn decl and sentinel in strings

This commit is contained in:
Vallahor 2022-05-23 20:24:16 -03:00 committed by Andrew Kelley
parent 019fd45617
commit 21fd4a7a8b
2 changed files with 18 additions and 8 deletions

View File

@ -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']) {

View File

@ -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 },
};