| author | |
| committer | |
| log | 4bd359a8498e3c239a03abc4f84bb18c0e5617ae |
| tree | 06537100913682486f2ec77ebb5a2706adbfb98a |
| parent | 17928428082768497d909b3fd55615be21a7660c |
2 files changed, 72 insertions(+), 4 deletions(-)
lib/docs/main.js+39-3| ... | ... | @@ -1083,9 +1083,23 @@ var zigAnalysis; |
| 1083 | 1083 | struct_body += "}"; |
| 1084 | 1084 | return struct_body; |
| 1085 | 1085 | } |
| 1086 | case "typeOf_peer": { | |
| 1087 | console.log(expr) | |
| 1088 | let payloadHtml = "@TypeOf(" | |
| 1089 | for (let i = 0; i < expr.typeOf_peer.length; i++) { | |
| 1090 | payloadHtml += exprName(expr.typeOf_peer[i], {wantHtml: true, wantLink:true}); | |
| 1091 | if (i !== expr.typeOf_peer.length - 1) { | |
| 1092 | payloadHtml += ", "; | |
| 1093 | } | |
| 1094 | } | |
| 1095 | payloadHtml += ")"; | |
| 1096 | console.log(payloadHtml) | |
| 1097 | return payloadHtml; | |
| 1098 | ||
| 1099 | } | |
| 1086 | 1100 | case "typeOf": { |
| 1087 | 1101 | const typeRefArg = zigAnalysis.exprs[expr.typeOf]; |
| 1088 | let payloadHtml = "@TypeOf(" + exprName(typeRefArg) + ")"; | |
| 1102 | let payloadHtml = "@TypeOf(" + exprName(typeRefArg, {wantHtml: true, wantLink:true}) + ")"; | |
| 1089 | 1103 | return payloadHtml; |
| 1090 | 1104 | } |
| 1091 | 1105 | case "null": { |
| ... | ... | @@ -1432,6 +1446,30 @@ var zigAnalysis; |
| 1432 | 1446 | if (isVarArgs && i === fnObj.params.length - 1) { |
| 1433 | 1447 | payloadHtml += '...'; |
| 1434 | 1448 | } |
| 1449 | else if ("typeOf" in value) { | |
| 1450 | if (opts.wantHtml) { | |
| 1451 | payloadHtml += '<a href="">'; | |
| 1452 | payloadHtml += | |
| 1453 | '<span class="tok-kw" style="color:lightblue;">' | |
| 1454 | + exprName(value, opts) + '</span>'; | |
| 1455 | payloadHtml += '</a>'; | |
| 1456 | } else { | |
| 1457 | payloadHtml += exprName(value, opts); | |
| 1458 | } | |
| 1459 | ||
| 1460 | } | |
| 1461 | else if ("typeOf_peer" in value) { | |
| 1462 | if (opts.wantHtml) { | |
| 1463 | payloadHtml += '<a href="">'; | |
| 1464 | payloadHtml += | |
| 1465 | '<span class="tok-kw" style="color:lightblue;">' | |
| 1466 | + exprName(value, opts) + '</span>'; | |
| 1467 | payloadHtml += '</a>'; | |
| 1468 | } else { | |
| 1469 | payloadHtml += exprName(value, opts); | |
| 1470 | } | |
| 1471 | ||
| 1472 | } | |
| 1435 | 1473 | else if ("declRef" in value) { |
| 1436 | 1474 | if (opts.wantHtml) { |
| 1437 | 1475 | payloadHtml += '<a href="">'; |
| ... | ... | @@ -1454,7 +1492,6 @@ var zigAnalysis; |
| 1454 | 1492 | } else { |
| 1455 | 1493 | payloadHtml += exprName(value, opts); |
| 1456 | 1494 | } |
| 1457 | ||
| 1458 | 1495 | } |
| 1459 | 1496 | else if ("refPath" in value) { |
| 1460 | 1497 | if (opts.wantHtml) { |
| ... | ... | @@ -1466,7 +1503,6 @@ var zigAnalysis; |
| 1466 | 1503 | } else { |
| 1467 | 1504 | payloadHtml += exprName(value, opts); |
| 1468 | 1505 | } |
| 1469 | ||
| 1470 | 1506 | } else if ("type" in value) { |
| 1471 | 1507 | let name = exprName(value, { |
| 1472 | 1508 | wantHtml: false, |
src/Autodoc.zig+33-1| ... | ... | @@ -575,6 +575,7 @@ const DocData = struct { |
| 575 | 575 | call: usize, // index in `calls` |
| 576 | 576 | enumLiteral: []const u8, // direct value |
| 577 | 577 | typeOf: usize, // index in `exprs` |
| 578 | typeOf_peer: []Expr, | |
| 578 | 579 | as: As, |
| 579 | 580 | sizeOf: usize, // index in `exprs` |
| 580 | 581 | compileError: []const u8, |
| ... | ... | @@ -641,6 +642,14 @@ const DocData = struct { |
| 641 | 642 | options, |
| 642 | 643 | w, |
| 643 | 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 | }, | |
| 644 | 653 | .refPath => |v| { |
| 645 | 654 | try w.print("{{ \"refPath\": [", .{}); |
| 646 | 655 | for (v) |c, i| { |
| ... | ... | @@ -1509,7 +1518,8 @@ fn walkInstruction( |
| 1509 | 1518 | .expr = .{ .type = type_slot_index }, |
| 1510 | 1519 | }; |
| 1511 | 1520 | }, |
| 1512 | .param_anytype => { | |
| 1521 | .param_anytype, .param_anytype_comptime => { | |
| 1522 | // @check if .param_anytype_comptime can be here | |
| 1513 | 1523 | // Analysis of anytype function params happens in `.func`. |
| 1514 | 1524 | // This switch case handles the case where an expression depends |
| 1515 | 1525 | // on an anytype field. E.g.: `fn foo(bar: anytype) @TypeOf(bar)`. |
| ... | ... | @@ -1527,6 +1537,13 @@ fn walkInstruction( |
| 1527 | 1537 | const pl_tok = data[inst_index].pl_tok; |
| 1528 | 1538 | const extra = file.zir.extraData(Zir.Inst.Param, pl_tok.payload_index); |
| 1529 | 1539 | const name = file.zir.nullTerminatedString(extra.data.name); |
| 1540 | ||
| 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 | ||
| 1530 | 1547 | const cte_slot_index = self.comptime_exprs.items.len; |
| 1531 | 1548 | try self.comptime_exprs.append(self.arena, .{ |
| 1532 | 1549 | .code = name, |
| ... | ... | @@ -1595,7 +1612,22 @@ fn walkInstruction( |
| 1595 | 1612 | ); |
| 1596 | 1613 | return self.cteTodo(@tagName(extended.opcode)); |
| 1597 | 1614 | }, |
| 1615 | .typeof_peer => { | |
| 1616 | // Zir says it's a NodeMultiOp but in this case it's TypeOfPeer | |
| 1617 | const extra = file.zir.extraData(Zir.Inst.TypeOfPeer, extended.operand); | |
| 1618 | const args = file.zir.refSlice(extra.end, extended.small); | |
| 1619 | const operand_index = self.exprs.items.len; | |
| 1620 | for (args) |arg, idx| { | |
| 1621 | const wr = try self.walkRef(file, parent_scope, arg, idx == 0); | |
| 1622 | ||
| 1623 | try self.exprs.append(self.arena, wr.expr); | |
| 1624 | } | |
| 1598 | 1625 | |
| 1626 | return DocData.WalkResult{ | |
| 1627 | .typeRef = .{ .type = @enumToInt(Ref.void_type) }, | |
| 1628 | .expr = .{ .typeOf_peer = self.exprs.items[operand_index..] }, | |
| 1629 | }; | |
| 1630 | }, | |
| 1599 | 1631 | .opaque_decl => return self.cteTodo("opaque {...}"), |
| 1600 | 1632 | .variable => { |
| 1601 | 1633 | const small = @bitCast(Zir.Inst.ExtendedVar.Small, extended.small); |