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;...@@ -1087,7 +1087,8 @@ var zigAnalysis;
1087 console.log(expr)1087 console.log(expr)
1088 let payloadHtml = "@TypeOf("1088 let payloadHtml = "@TypeOf("
1089 for (let i = 0; i < expr.typeOf_peer.length; i++) {1089 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});
1091 if (i !== expr.typeOf_peer.length - 1) {1092 if (i !== expr.typeOf_peer.length - 1) {
1092 payloadHtml += ", ";1093 payloadHtml += ", ";
1093 }1094 }
src/Autodoc.zig+32-19
...@@ -575,7 +575,7 @@ const DocData = struct {...@@ -575,7 +575,7 @@ const DocData = struct {
575 call: usize, // index in `calls`575 call: usize, // index in `calls`
576 enumLiteral: []const u8, // direct value576 enumLiteral: []const u8, // direct value
577 typeOf: usize, // index in `exprs`577 typeOf: usize, // index in `exprs`
578 typeOf_peer: []Expr,578 typeOf_peer: []usize,
579 as: As,579 as: As,
580 sizeOf: usize, // index in `exprs`580 sizeOf: usize, // index in `exprs`
581 compileError: []const u8,581 compileError: []const u8,
...@@ -642,14 +642,6 @@ const DocData = struct {...@@ -642,14 +642,6 @@ const DocData = struct {
642 options,642 options,
643 w,643 w,
644 ),644 ),
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 },
653 .refPath => |v| {645 .refPath => |v| {
654 try w.print("{{ \"refPath\": [", .{});646 try w.print("{{ \"refPath\": [", .{});
655 for (v) |c, i| {647 for (v) |c, i| {
...@@ -658,6 +650,11 @@ const DocData = struct {...@@ -658,6 +650,11 @@ const DocData = struct {
658 try w.print("{s}", .{comma});650 try w.print("{s}", .{comma});
659 }651 }
660 },652 },
653 .typeOf_peer => |v| try std.json.stringify(
654 struct { typeOf_peer: []usize }{ .typeOf_peer = v },
655 options,
656 w,
657 ),
661 .array => |v| try std.json.stringify(658 .array => |v| try std.json.stringify(
662 struct { @"array": []usize }{ .@"array" = v },659 struct { @"array": []usize }{ .@"array" = v },
663 options,660 options,
...@@ -1538,12 +1535,6 @@ fn walkInstruction(...@@ -1538,12 +1535,6 @@ fn walkInstruction(
1538 const extra = file.zir.extraData(Zir.Inst.Param, pl_tok.payload_index);1535 const extra = file.zir.extraData(Zir.Inst.Param, pl_tok.payload_index);
1539 const name = file.zir.nullTerminatedString(extra.data.name);1536 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
1547 const cte_slot_index = self.comptime_exprs.items.len;1538 const cte_slot_index = self.comptime_exprs.items.len;
1548 try self.comptime_exprs.append(self.arena, .{1539 try self.comptime_exprs.append(self.arena, .{
1549 .code = name,1540 .code = name,
...@@ -1616,17 +1607,38 @@ fn walkInstruction(...@@ -1616,17 +1607,38 @@ fn walkInstruction(
1616 // Zir says it's a NodeMultiOp but in this case it's TypeOfPeer1607 // Zir says it's a NodeMultiOp but in this case it's TypeOfPeer
1617 const extra = file.zir.extraData(Zir.Inst.TypeOfPeer, extended.operand);1608 const extra = file.zir.extraData(Zir.Inst.TypeOfPeer, extended.operand);
1618 const args = file.zir.refSlice(extra.end, extended.small);1609 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;
1620 for (args) |arg, idx| {1613 for (args) |arg, idx| {
1621 const wr = try self.walkRef(file, parent_scope, arg, idx == 0);1614 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;
1623 try self.exprs.append(self.arena, wr.expr);1620 try self.exprs.append(self.arena, wr.expr);
1621 array_data[idx] = expr_index;
1624 }1622 }
16251623
1626 return DocData.WalkResult{1624 const type_slot_index = self.types.items.len;
1627 .typeRef = .{ .type = @enumToInt(Ref.void_type) },1625 try self.types.append(self.arena, .{
1628 .expr = .{ .typeOf_peer = self.exprs.items[operand_index..] },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 },
1629 };1639 };
1640
1641 return result;
1630 },1642 },
1631 .opaque_decl => return self.cteTodo("opaque {...}"),1643 .opaque_decl => return self.cteTodo("opaque {...}"),
1632 .variable => {1644 .variable => {
...@@ -2682,6 +2694,7 @@ fn analyzeFunction(...@@ -2682,6 +2694,7 @@ fn analyzeFunction(
2682 const last_instr_index = fn_info.ret_ty_body[fn_info.ret_ty_body.len - 1];2694 const last_instr_index = fn_info.ret_ty_body[fn_info.ret_ty_body.len - 1];
2683 const break_operand = data[last_instr_index].@"break".operand;2695 const break_operand = data[last_instr_index].@"break".operand;
2684 const wr = try self.walkRef(file, scope, break_operand, false);2696 const wr = try self.walkRef(file, scope, break_operand, false);
2697
2685 break :blk wr;2698 break :blk wr;
2686 };2699 };
26872700