authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-05-29 13:18:28-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
loga529d747c9e4b2064fa3e399025c804e05e5fdf5
treec6ef62efdedfacb8c45dc3e711a68bf8fc7ab2cf
parentf59bb65ff52363c4d32a00852daeed711934e312

add: binOp @alignCast and bit_or


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

lib/docs/main.js+7
......@@ -1155,6 +1155,13 @@ var zigAnalysis;
11551155 case 9 : {
11561156 return "@bitCast(" + print_lhs + ", " + print_rhs + ")";
11571157 }
1158 case 10 : {
1159 operator += "|";
1160 break;
1161 }
1162 case 11 : {
1163 return "@alignCast(" + print_lhs + ", " + print_rhs + ")";
1164 }
11581165 default: console.log("operator not handled yet or doesn't exist!");
11591166 };
11601167 if (expr.binOp.wrap) {
src/Autodoc.zig+63-1
......@@ -669,7 +669,7 @@ const DocData = struct {
669669 rhs: usize, // index in `exprs`
670670 // opKind
671671 // Identify the operator in js
672 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast
672 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast, 10: bit_or, 11: align_cast
673673 // Others binOp are not handled yet
674674 opKind: usize = 0,
675675 // flags to operations
......@@ -1000,6 +1000,68 @@ fn walkInstruction(
10001000 .expr = .{ .binOpIndex = binop_index },
10011001 };
10021002 },
1003 .align_cast => {
1004 const pl_node = data[inst_index].pl_node;
1005 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1006
1007 const binop_index = self.exprs.items.len;
1008 try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1009
1010 var lhs: DocData.WalkResult = try self.walkRef(
1011 file,
1012 parent_scope,
1013 extra.data.lhs,
1014 false,
1015 );
1016 var rhs: DocData.WalkResult = try self.walkRef(
1017 file,
1018 parent_scope,
1019 extra.data.rhs,
1020 false,
1021 );
1022
1023 const lhs_index = self.exprs.items.len;
1024 try self.exprs.append(self.arena, lhs.expr);
1025 const rhs_index = self.exprs.items.len;
1026 try self.exprs.append(self.arena, rhs.expr);
1027 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };
1028
1029 return DocData.WalkResult{
1030 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1031 .expr = .{ .binOpIndex = binop_index },
1032 };
1033 },
1034 .bit_or => {
1035 const pl_node = data[inst_index].pl_node;
1036 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1037
1038 const binop_index = self.exprs.items.len;
1039 try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1040
1041 var lhs: DocData.WalkResult = try self.walkRef(
1042 file,
1043 parent_scope,
1044 extra.data.lhs,
1045 false,
1046 );
1047 var rhs: DocData.WalkResult = try self.walkRef(
1048 file,
1049 parent_scope,
1050 extra.data.rhs,
1051 false,
1052 );
1053
1054 const lhs_index = self.exprs.items.len;
1055 try self.exprs.append(self.arena, lhs.expr);
1056 const rhs_index = self.exprs.items.len;
1057 try self.exprs.append(self.arena, rhs.expr);
1058 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };
1059
1060 return DocData.WalkResult{
1061 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1062 .expr = .{ .binOpIndex = binop_index },
1063 };
1064 },
10031065 .add => {
10041066 const pl_node = data[inst_index].pl_node;
10051067 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);