authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-05-29 12:59:54-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
logf59bb65ff52363c4d32a00852daeed711934e312
treee1b58642951d14d3a53b3ea121e895e4102a2bef
parent8e835fd3a2ca4a434c7b1971b39ddc9d60263d26

add: handling @bitCast as binOp


2 files changed, 35 insertions(+), 1 deletions(-)

lib/docs/main.js+3
...@@ -1152,6 +1152,9 @@ var zigAnalysis;...@@ -1152,6 +1152,9 @@ var zigAnalysis;
1152 operator += ">>";1152 operator += ">>";
1153 break;1153 break;
1154 }1154 }
1155 case 9 : {
1156 return "@bitCast(" + print_lhs + ", " + print_rhs + ")";
1157 }
1155 default: console.log("operator not handled yet or doesn't exist!");1158 default: console.log("operator not handled yet or doesn't exist!");
1156 };1159 };
1157 if (expr.binOp.wrap) {1160 if (expr.binOp.wrap) {
src/Autodoc.zig+32-1
...@@ -669,7 +669,7 @@ const DocData = struct {...@@ -669,7 +669,7 @@ const DocData = struct {
669 rhs: usize, // index in `exprs`669 rhs: usize, // index in `exprs`
670 // opKind670 // opKind
671 // Identify the operator in js671 // Identify the operator in js
672 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr672 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast
673 // Others binOp are not handled yet673 // Others binOp are not handled yet
674 opKind: usize = 0,674 opKind: usize = 0,
675 // flags to operations675 // flags to operations
...@@ -969,6 +969,37 @@ fn walkInstruction(...@@ -969,6 +969,37 @@ fn walkInstruction(
969 .expr = .{ .int = .{ .value = int } },969 .expr = .{ .int = .{ .value = int } },
970 };970 };
971 },971 },
972 .bitcast => {
973 const pl_node = data[inst_index].pl_node;
974 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
975
976 const binop_index = self.exprs.items.len;
977 try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
978
979 var lhs: DocData.WalkResult = try self.walkRef(
980 file,
981 parent_scope,
982 extra.data.lhs,
983 false,
984 );
985 var rhs: DocData.WalkResult = try self.walkRef(
986 file,
987 parent_scope,
988 extra.data.rhs,
989 false,
990 );
991
992 const lhs_index = self.exprs.items.len;
993 try self.exprs.append(self.arena, lhs.expr);
994 const rhs_index = self.exprs.items.len;
995 try self.exprs.append(self.arena, rhs.expr);
996 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 9 } };
997
998 return DocData.WalkResult{
999 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1000 .expr = .{ .binOpIndex = binop_index },
1001 };
1002 },
972 .add => {1003 .add => {
973 const pl_node = data[inst_index].pl_node;1004 const pl_node = data[inst_index].pl_node;
974 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);1005 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);