aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVallahor <vallahor91@gmail.com>2022-05-29 13:18:28 -0300
committerAndrew Kelley <andrew@ziglang.org>2022-07-19 19:10:12 -0700
commita529d747c9e4b2064fa3e399025c804e05e5fdf5 (patch)
treec6ef62efdedfacb8c45dc3e711a68bf8fc7ab2cf /src
parentf59bb65ff52363c4d32a00852daeed711934e312 (diff)
downloadzig-a529d747c9e4b2064fa3e399025c804e05e5fdf5.tar.gz
zig-a529d747c9e4b2064fa3e399025c804e05e5fdf5.zip
add: binOp @alignCast and bit_or
Diffstat (limited to 'src')
-rw-r--r--src/Autodoc.zig64
1 files changed, 63 insertions, 1 deletions
diff --git a/src/Autodoc.zig b/src/Autodoc.zig
index eed8fcc37f..6e51938065 100644
--- a/src/Autodoc.zig
+++ b/src/Autodoc.zig
@@ -669,7 +669,7 @@ const DocData = struct {
rhs: usize, // index in `exprs`
// opKind
// Identify the operator in js
- // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast
+ // 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
// Others binOp are not handled yet
opKind: usize = 0,
// flags to operations
@@ -1000,6 +1000,68 @@ fn walkInstruction(
.expr = .{ .binOpIndex = binop_index },
};
},
+ .align_cast => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+
+ const binop_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var rhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.rhs,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const rhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, rhs.expr);
+ self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .binOpIndex = binop_index },
+ };
+ },
+ .bit_or => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+
+ const binop_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var rhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.rhs,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const rhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, rhs.expr);
+ self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .binOpIndex = binop_index },
+ };
+ },
.add => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);