| ... | @@ -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 | // opKind | 670 | // opKind |
| 671 | // Identify the operator in js | 671 | // 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 |
| 673 | // Others binOp are not handled yet | 673 | // Others binOp are not handled yet |
| 674 | opKind: usize = 0, | 674 | opKind: usize = 0, |
| 675 | // flags to operations | 675 | // flags to operations |
| ... | @@ -1000,6 +1000,68 @@ fn walkInstruction( | ... | @@ -1000,6 +1000,68 @@ fn walkInstruction( |
| 1000 | .expr = .{ .binOpIndex = binop_index }, | 1000 | .expr = .{ .binOpIndex = binop_index }, |
| 1001 | }; | 1001 | }; |
| 1002 | }, | 1002 | }, |
| | 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 | }, |
| 1003 | .add => { | 1065 | .add => { |
| 1004 | const pl_node = data[inst_index].pl_node; | 1066 | const pl_node = data[inst_index].pl_node; |
| 1005 | const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index); | 1067 | const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index); |