| ... | @@ -808,6 +808,54 @@ pub fn generateSymbol( | ... | @@ -808,6 +808,54 @@ pub fn generateSymbol( |
| 808 | } | 808 | } |
| 809 | return Result{ .appended = {} }; | 809 | return Result{ .appended = {} }; |
| 810 | }, | 810 | }, |
| | 811 | .Vector => switch (typed_value.val.tag()) { |
| | 812 | .bytes => { |
| | 813 | const bytes = typed_value.val.castTag(.bytes).?.data; |
| | 814 | const len = @intCast(usize, typed_value.ty.arrayLen()); |
| | 815 | try code.ensureUnusedCapacity(len); |
| | 816 | code.appendSliceAssumeCapacity(bytes[0..len]); |
| | 817 | return Result{ .appended = {} }; |
| | 818 | }, |
| | 819 | .aggregate => { |
| | 820 | const elem_vals = typed_value.val.castTag(.aggregate).?.data; |
| | 821 | const elem_ty = typed_value.ty.elemType(); |
| | 822 | const len = @intCast(usize, typed_value.ty.arrayLen()); |
| | 823 | for (elem_vals[0..len]) |elem_val| { |
| | 824 | switch (try generateSymbol(bin_file, src_loc, .{ |
| | 825 | .ty = elem_ty, |
| | 826 | .val = elem_val, |
| | 827 | }, code, debug_output, reloc_info)) { |
| | 828 | .appended => {}, |
| | 829 | .externally_managed => |slice| { |
| | 830 | code.appendSliceAssumeCapacity(slice); |
| | 831 | }, |
| | 832 | .fail => |em| return Result{ .fail = em }, |
| | 833 | } |
| | 834 | } |
| | 835 | return Result{ .appended = {} }; |
| | 836 | }, |
| | 837 | .repeated => { |
| | 838 | const array = typed_value.val.castTag(.repeated).?.data; |
| | 839 | const elem_ty = typed_value.ty.childType(); |
| | 840 | const len = typed_value.ty.arrayLen(); |
| | 841 | |
| | 842 | var index: u64 = 0; |
| | 843 | while (index < len) : (index += 1) { |
| | 844 | switch (try generateSymbol(bin_file, src_loc, .{ |
| | 845 | .ty = elem_ty, |
| | 846 | .val = array, |
| | 847 | }, code, debug_output, reloc_info)) { |
| | 848 | .appended => {}, |
| | 849 | .externally_managed => |slice| { |
| | 850 | code.appendSliceAssumeCapacity(slice); |
| | 851 | }, |
| | 852 | .fail => |em| return Result{ .fail = em }, |
| | 853 | } |
| | 854 | } |
| | 855 | return Result{ .appended = {} }; |
| | 856 | }, |
| | 857 | else => unreachable, |
| | 858 | }, |
| 811 | else => |t| { | 859 | else => |t| { |
| 812 | return Result{ | 860 | return Result{ |
| 813 | .fail = try ErrorMsg.create( | 861 | .fail = try ErrorMsg.create( |