| ... | @@ -604,6 +604,7 @@ const DocData = struct { | ... | @@ -604,6 +604,7 @@ const DocData = struct { |
| 604 | pubDecls: []usize = &.{}, // index into decls | 604 | pubDecls: []usize = &.{}, // index into decls |
| 605 | field_types: []Expr = &.{}, // (use src->fields to find names) | 605 | field_types: []Expr = &.{}, // (use src->fields to find names) |
| 606 | field_defaults: []?Expr = &.{}, // default values is specified | 606 | field_defaults: []?Expr = &.{}, // default values is specified |
| | 607 | backing_int: ?Expr = null, // backing integer if specified |
| 607 | is_tuple: bool, | 608 | is_tuple: bool, |
| 608 | line_number: usize, | 609 | line_number: usize, |
| 609 | parent_container: ?usize, // index into `types` | 610 | parent_container: ?usize, // index into `types` |
| ... | @@ -2854,13 +2855,21 @@ fn walkInstruction( | ... | @@ -2854,13 +2855,21 @@ fn walkInstruction( |
| 2854 | break :blk fields_len; | 2855 | break :blk fields_len; |
| 2855 | } else 0; | 2856 | } else 0; |
| 2856 | | 2857 | |
| 2857 | // TODO: Expose explicit backing integer types in some way. | 2858 | var backing_int: ?DocData.Expr = null; |
| 2858 | if (small.has_backing_int) { | 2859 | if (small.has_backing_int) { |
| 2859 | const backing_int_body_len = file.zir.extra[extra_index]; | 2860 | const backing_int_body_len = file.zir.extra[extra_index]; |
| 2860 | extra_index += 1; // backing_int_body_len | 2861 | extra_index += 1; // backing_int_body_len |
| 2861 | if (backing_int_body_len == 0) { | 2862 | if (backing_int_body_len == 0) { |
| | 2863 | const backing_int_ref = @intToEnum(Ref, file.zir.extra[extra_index]); |
| | 2864 | const backing_int_res = try self.walkRef(file, &scope, src_info, backing_int_ref, true); |
| | 2865 | backing_int = backing_int_res.expr; |
| 2862 | extra_index += 1; // backing_int_ref | 2866 | extra_index += 1; // backing_int_ref |
| 2863 | } else { | 2867 | } else { |
| | 2868 | const backing_int_body = file.zir.extra[extra_index..][0..backing_int_body_len]; |
| | 2869 | const break_inst = backing_int_body[backing_int_body.len - 1]; |
| | 2870 | const operand = data[break_inst].@"break".operand; |
| | 2871 | const backing_int_res = try self.walkRef(file, &scope, src_info, operand, true); |
| | 2872 | backing_int = backing_int_res.expr; |
| 2864 | extra_index += backing_int_body_len; // backing_int_body_inst | 2873 | extra_index += backing_int_body_len; // backing_int_body_inst |
| 2865 | } | 2874 | } |
| 2866 | } | 2875 | } |
| ... | @@ -2903,6 +2912,7 @@ fn walkInstruction( | ... | @@ -2903,6 +2912,7 @@ fn walkInstruction( |
| 2903 | .field_types = field_type_refs.items, | 2912 | .field_types = field_type_refs.items, |
| 2904 | .field_defaults = field_default_refs.items, | 2913 | .field_defaults = field_default_refs.items, |
| 2905 | .is_tuple = small.is_tuple, | 2914 | .is_tuple = small.is_tuple, |
| | 2915 | .backing_int = backing_int, |
| 2906 | .line_number = self.ast_nodes.items[self_ast_node_index].line, | 2916 | .line_number = self.ast_nodes.items[self_ast_node_index].line, |
| 2907 | .parent_container = parent_scope.enclosing_type, | 2917 | .parent_container = parent_scope.enclosing_type, |
| 2908 | }, | 2918 | }, |