diff options
| author | Vallahor <vallahor91@gmail.com> | 2022-05-29 13:18:28 -0300 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-07-19 19:10:12 -0700 |
| commit | a529d747c9e4b2064fa3e399025c804e05e5fdf5 (patch) | |
| tree | c6ef62efdedfacb8c45dc3e711a68bf8fc7ab2cf /src | |
| parent | f59bb65ff52363c4d32a00852daeed711934e312 (diff) | |
| download | zig-a529d747c9e4b2064fa3e399025c804e05e5fdf5.tar.gz zig-a529d747c9e4b2064fa3e399025c804e05e5fdf5.zip | |
add: binOp @alignCast and bit_or
Diffstat (limited to 'src')
| -rw-r--r-- | src/Autodoc.zig | 64 |
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); |
