authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-05-27 00:04:02-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:11-07:00
logc449788b11d0184b356c6258fad33cc20813fd7d
tree6a9fd87d581b260c1d2bd5f6d3a6591fc16dd024
parent4bd359a8498e3c239a03abc4f84bb18c0e5617ae

fix: typeOf_peer working in all cases


2 files changed, 34 insertions(+), 20 deletions(-)

lib/docs/main.js+2-1
......@@ -1087,7 +1087,8 @@ var zigAnalysis;
10871087 console.log(expr)
10881088 let payloadHtml = "@TypeOf("
10891089 for (let i = 0; i < expr.typeOf_peer.length; i++) {
1090 payloadHtml += exprName(expr.typeOf_peer[i], {wantHtml: true, wantLink:true});
1090 let elem = zigAnalysis.exprs[expr.typeOf_peer[i]];
1091 payloadHtml += exprName(elem, {wantHtml: true, wantLink:true});
10911092 if (i !== expr.typeOf_peer.length - 1) {
10921093 payloadHtml += ", ";
10931094 }
src/Autodoc.zig+32-19
......@@ -575,7 +575,7 @@ const DocData = struct {
575575 call: usize, // index in `calls`
576576 enumLiteral: []const u8, // direct value
577577 typeOf: usize, // index in `exprs`
578 typeOf_peer: []Expr,
578 typeOf_peer: []usize,
579579 as: As,
580580 sizeOf: usize, // index in `exprs`
581581 compileError: []const u8,
......@@ -642,14 +642,6 @@ const DocData = struct {
642642 options,
643643 w,
644644 ),
645 .typeOf_peer => |v| {
646 try w.print("{{ \"typeOf_peer\": [", .{});
647 for (v) |c, i| {
648 const comma = if (i == v.len - 1) "]}" else ",\n";
649 try c.jsonStringify(options, w);
650 try w.print("{s}", .{comma});
651 }
652 },
653645 .refPath => |v| {
654646 try w.print("{{ \"refPath\": [", .{});
655647 for (v) |c, i| {
......@@ -658,6 +650,11 @@ const DocData = struct {
658650 try w.print("{s}", .{comma});
659651 }
660652 },
653 .typeOf_peer => |v| try std.json.stringify(
654 struct { typeOf_peer: []usize }{ .typeOf_peer = v },
655 options,
656 w,
657 ),
661658 .array => |v| try std.json.stringify(
662659 struct { @"array": []usize }{ .@"array" = v },
663660 options,
......@@ -1538,12 +1535,6 @@ fn walkInstruction(
15381535 const extra = file.zir.extraData(Zir.Inst.Param, pl_tok.payload_index);
15391536 const name = file.zir.nullTerminatedString(extra.data.name);
15401537
1541 std.debug.print("param\n", .{});
1542 std.debug.print("pl_tok = {any}\n", .{pl_tok});
1543 std.debug.print("extra = {any}\n", .{extra});
1544 std.debug.print("name = {any}\n", .{name});
1545 std.debug.print("param\n", .{});
1546
15471538 const cte_slot_index = self.comptime_exprs.items.len;
15481539 try self.comptime_exprs.append(self.arena, .{
15491540 .code = name,
......@@ -1616,17 +1607,38 @@ fn walkInstruction(
16161607 // Zir says it's a NodeMultiOp but in this case it's TypeOfPeer
16171608 const extra = file.zir.extraData(Zir.Inst.TypeOfPeer, extended.operand);
16181609 const args = file.zir.refSlice(extra.end, extended.small);
1619 const operand_index = self.exprs.items.len;
1610 const array_data = try self.arena.alloc(usize, args.len);
1611
1612 var array_type: ?DocData.Expr = null;
16201613 for (args) |arg, idx| {
16211614 const wr = try self.walkRef(file, parent_scope, arg, idx == 0);
1615 if (idx == 0) {
1616 array_type = wr.typeRef;
1617 }
16221618
1619 const expr_index = self.exprs.items.len;
16231620 try self.exprs.append(self.arena, wr.expr);
1621 array_data[idx] = expr_index;
16241622 }
16251623
1626 return DocData.WalkResult{
1627 .typeRef = .{ .type = @enumToInt(Ref.void_type) },
1628 .expr = .{ .typeOf_peer = self.exprs.items[operand_index..] },
1624 const type_slot_index = self.types.items.len;
1625 try self.types.append(self.arena, .{
1626 .Array = .{
1627 .len = .{
1628 .int = .{
1629 .value = args.len,
1630 .negated = false,
1631 },
1632 },
1633 .child = array_type.?,
1634 },
1635 });
1636 const result = DocData.WalkResult{
1637 .typeRef = .{ .type = type_slot_index },
1638 .expr = .{ .typeOf_peer = array_data },
16291639 };
1640
1641 return result;
16301642 },
16311643 .opaque_decl => return self.cteTodo("opaque {...}"),
16321644 .variable => {
......@@ -2682,6 +2694,7 @@ fn analyzeFunction(
26822694 const last_instr_index = fn_info.ret_ty_body[fn_info.ret_ty_body.len - 1];
26832695 const break_operand = data[last_instr_index].@"break".operand;
26842696 const wr = try self.walkRef(file, scope, break_operand, false);
2697
26852698 break :blk wr;
26862699 };
26872700