| ... | @@ -760,46 +760,13 @@ const Writer = struct { | ... | @@ -760,46 +760,13 @@ const Writer = struct { |
| 760 | stream: anytype, | 760 | stream: anytype, |
| 761 | inst: *Inst, | 761 | inst: *Inst, |
| 762 | ) (@TypeOf(stream).Error || error{OutOfMemory})!void { | 762 | ) (@TypeOf(stream).Error || error{OutOfMemory})!void { |
| 763 | // TODO I tried implementing this with an inline for loop and hit a compiler bug | 763 | inline for (@typeInfo(Inst.Tag).Enum.fields) |enum_field| { |
| 764 | switch (inst.tag) { | 764 | const expected_tag = @field(Inst.Tag, enum_field.name); |
| 765 | .arg => return self.writeInstToStreamGeneric(stream, .arg, inst), | 765 | if (inst.tag == expected_tag) { |
| 766 | .block => return self.writeInstToStreamGeneric(stream, .block, inst), | 766 | return self.writeInstToStreamGeneric(stream, expected_tag, inst); |
| 767 | .@"break" => return self.writeInstToStreamGeneric(stream, .@"break", inst), | 767 | } |
| 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), | | |
| 802 | } | 768 | } |
| | 769 | unreachable; // all tags handled |
| 803 | } | 770 | } |
| 804 | | 771 | |
| 805 | fn writeInstToStreamGeneric( | 772 | fn writeInstToStreamGeneric( |