fix: comptime not showing in all anytype params anymore. add: pointer flags

This commit is contained in:
Vallahor 2022-05-27 03:39:12 -03:00 committed by Andrew Kelley
parent c449788b11
commit 76e934dba8
2 changed files with 68 additions and 18 deletions

View File

@ -1210,6 +1210,7 @@ var zigAnalysis;
let sentinel = ptrObj.sentinel ? ":"+exprName(ptrObj.sentinel, opts) : "";
let is_mutable = !ptrObj.is_mutable ? "const " : "";
let name = "";
console.log(ptrObj);
switch (ptrObj.size) {
default:
console.log("TODO: implement unhandled pointer size case");
@ -1236,21 +1237,25 @@ var zigAnalysis;
name += is_mutable;
break;
}
if (ptrObj['const']) {
if (!ptrObj.is_mutable) {
if (opts.wantHtml) {
name += '<span class="tok-kw">const</span> ';
} else {
name += "const ";
}
}
if (ptrObj['volatile']) {
if (opts.wantHtml) {
name += '<span class="tok-kw">volatile</span> ';
} else {
name += "volatile ";
}
if (ptrObj.is_allowzero) {
name += "allowzero ";
}
if (ptrObj.align != null) {
if (ptrObj.is_volatile) {
name += "volatile ";
}
if (ptrObj.has_addrspace) {
name += "addrspace(";
name += "." + "";
name += ") ";
}
if (ptrObj.has_align) {
if (opts.wantHtml) {
name += '<span class="tok-kw">align</span>(';
} else {

View File

@ -400,7 +400,13 @@ const DocData = struct {
size: std.builtin.TypeInfo.Pointer.Size,
child: Expr,
sentinel: ?Expr = null,
is_mutable: bool = true,
is_allowzero: bool = false,
is_mutable: bool = false,
is_volatile: bool = false,
has_sentinel: bool = false,
has_align: bool = false,
has_addrspace: bool = false,
has_bit_range: bool = false,
},
Array: struct {
len: Expr,
@ -507,9 +513,15 @@ const DocData = struct {
try w.print(",", .{});
}
try w.print(
\\"is_allowzero": {},
\\"is_mutable": {},
\\"is_volatile": {},
\\"has_sentinel": {},
\\"has_align": {},
\\"has_addrspace": {},
\\"has_bit_range": {},
\\
, .{v.is_mutable});
, .{ v.is_allowzero, v.is_mutable, v.is_volatile, v.has_sentinel, v.has_align, v.has_addrspace, v.has_bit_range });
if (options.whitespace) |ws| try ws.outputIndent(w);
try w.print(
\\"child":
@ -880,11 +892,7 @@ fn walkInstruction(
const type_slot_index = self.types.items.len;
const elem_type_ref = try self.walkRef(file, parent_scope, ptr.elem_type, false);
try self.types.append(self.arena, .{
.Pointer = .{
.size = ptr.size,
.child = elem_type_ref.expr,
.is_mutable = ptr.is_mutable,
},
.Pointer = .{ .size = ptr.size, .child = elem_type_ref.expr, .is_mutable = ptr.is_mutable, .is_volatile = ptr.is_volatile, .is_allowzero = ptr.is_allowzero },
});
return DocData.WalkResult{
@ -904,8 +912,10 @@ fn walkInstruction(
false,
);
const sentinel: ?DocData.Expr = if (ptr.flags.has_sentinel) DocData.Expr{ .int = .{ .value = 0, .negated = false } } else null;
try self.types.append(self.arena, .{
.Pointer = .{ .size = ptr.size, .child = elem_type_ref.expr, .sentinel = .{ .int = .{ .value = 0, .negated = false } }, .is_mutable = ptr.flags.is_mutable },
.Pointer = .{ .size = ptr.size, .child = elem_type_ref.expr, .sentinel = sentinel, .is_mutable = ptr.flags.is_mutable, .has_align = ptr.flags.has_align, .has_sentinel = ptr.flags.has_sentinel, .is_volatile = ptr.flags.is_volatile, .has_addrspace = ptr.flags.has_addrspace, .has_bit_range = ptr.flags.has_bit_range },
});
return DocData.WalkResult{
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
@ -1194,6 +1204,20 @@ fn walkInstruction(
.expr = .{ .float = float },
};
},
.float128 => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index);
_ = pl_node;
_ = extra;
// printWithContext(
// file,
// inst_index,
// "TODO: implement `{s}` for walkInstruction\n\n",
// .{@tagName(tags[inst_index])},
// );
return self.cteTodo(@tagName(tags[inst_index]));
},
.negate => {
const un_node = data[inst_index].un_node;
var operand: DocData.WalkResult = try self.walkRef(
@ -1481,6 +1505,27 @@ fn walkInstruction(
.expr = .{ .@"struct" = field_vals },
};
},
.struct_init_empty => {
const un_node = data[inst_index].un_node;
var operand: DocData.WalkResult = try self.walkRef(
file,
parent_scope,
un_node.operand,
false,
);
_ = operand;
// WIP
printWithContext(
file,
inst_index,
"TODO: implement `{s}` for walkInstruction\n\n",
.{@tagName(tags[inst_index])},
);
return self.cteTodo(@tagName(tags[inst_index]));
},
.error_set_decl => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.ErrorSetDecl, pl_node.payload_index);
@ -1630,7 +1675,7 @@ fn walkInstruction(
.negated = false,
},
},
.child = array_type.?,
.child = .{ .type = 0 },
},
});
const result = DocData.WalkResult{
@ -2657,7 +2702,7 @@ fn analyzeFunction(
self.ast_nodes.appendAssumeCapacity(.{
.name = name,
.docs = "",
.@"comptime" = true,
.@"comptime" = tags[param_index] == .param_anytype_comptime,
});
param_type_refs.appendAssumeCapacity(