| ... | ... | @@ -760,46 +760,13 @@ const Writer = struct { |
| 760 | 760 | stream: anytype, |
| 761 | 761 | inst: *Inst, |
| 762 | 762 | ) (@TypeOf(stream).Error || error{OutOfMemory})!void { |
| 763 | | // TODO I tried implementing this with an inline for loop and hit a compiler bug |
| 764 | | switch (inst.tag) { |
| 765 | | .arg => return self.writeInstToStreamGeneric(stream, .arg, inst), |
| 766 | | .block => return self.writeInstToStreamGeneric(stream, .block, inst), |
| 767 | | .@"break" => return self.writeInstToStreamGeneric(stream, .@"break", inst), |
| 768 | | .breakpoint => return self.writeInstToStreamGeneric(stream, .breakpoint, inst), |
| 769 | | .breakvoid => return self.writeInstToStreamGeneric(stream, .breakvoid, inst), |
| 770 | | .call => return self.writeInstToStreamGeneric(stream, .call, inst), |
| 771 | | .declref => return self.writeInstToStreamGeneric(stream, .declref, inst), |
| 772 | | .declref_str => return self.writeInstToStreamGeneric(stream, .declref_str, inst), |
| 773 | | .declval => return self.writeInstToStreamGeneric(stream, .declval, inst), |
| 774 | | .declval_in_module => return self.writeInstToStreamGeneric(stream, .declval_in_module, inst), |
| 775 | | .compileerror => return self.writeInstToStreamGeneric(stream, .compileerror, inst), |
| 776 | | .@"const" => return self.writeInstToStreamGeneric(stream, .@"const", inst), |
| 777 | | .boolnot => return self.writeInstToStreamGeneric(stream, .boolnot, inst), |
| 778 | | .str => return self.writeInstToStreamGeneric(stream, .str, inst), |
| 779 | | .int => return self.writeInstToStreamGeneric(stream, .int, inst), |
| 780 | | .inttype => return self.writeInstToStreamGeneric(stream, .inttype, inst), |
| 781 | | .ptrtoint => return self.writeInstToStreamGeneric(stream, .ptrtoint, inst), |
| 782 | | .fieldptr => return self.writeInstToStreamGeneric(stream, .fieldptr, inst), |
| 783 | | .deref => return self.writeInstToStreamGeneric(stream, .deref, inst), |
| 784 | | .as => return self.writeInstToStreamGeneric(stream, .as, inst), |
| 785 | | .@"asm" => return self.writeInstToStreamGeneric(stream, .@"asm", inst), |
| 786 | | .@"unreachable" => return self.writeInstToStreamGeneric(stream, .@"unreachable", inst), |
| 787 | | .@"return" => return self.writeInstToStreamGeneric(stream, .@"return", inst), |
| 788 | | .returnvoid => return self.writeInstToStreamGeneric(stream, .returnvoid, inst), |
| 789 | | .@"fn" => return self.writeInstToStreamGeneric(stream, .@"fn", inst), |
| 790 | | .@"export" => return self.writeInstToStreamGeneric(stream, .@"export", inst), |
| 791 | | .primitive => return self.writeInstToStreamGeneric(stream, .primitive, inst), |
| 792 | | .fntype => return self.writeInstToStreamGeneric(stream, .fntype, inst), |
| 793 | | .intcast => return self.writeInstToStreamGeneric(stream, .intcast, inst), |
| 794 | | .bitcast => return self.writeInstToStreamGeneric(stream, .bitcast, inst), |
| 795 | | .elemptr => return self.writeInstToStreamGeneric(stream, .elemptr, inst), |
| 796 | | .add => return self.writeInstToStreamGeneric(stream, .add, inst), |
| 797 | | .sub => return self.writeInstToStreamGeneric(stream, .sub, inst), |
| 798 | | .cmp => return self.writeInstToStreamGeneric(stream, .cmp, inst), |
| 799 | | .condbr => return self.writeInstToStreamGeneric(stream, .condbr, inst), |
| 800 | | .isnull => return self.writeInstToStreamGeneric(stream, .isnull, inst), |
| 801 | | .isnonnull => return self.writeInstToStreamGeneric(stream, .isnonnull, inst), |
| 763 | inline for (@typeInfo(Inst.Tag).Enum.fields) |enum_field| { |
| 764 | const expected_tag = @field(Inst.Tag, enum_field.name); |
| 765 | if (inst.tag == expected_tag) { |
| 766 | return self.writeInstToStreamGeneric(stream, expected_tag, inst); |
| 767 | } |
| 802 | 768 | } |
| 769 | unreachable; // all tags handled |
| 803 | 770 | } |
| 804 | 771 | |
| 805 | 772 | fn writeInstToStreamGeneric( |