| ... | ... | @@ -586,7 +586,8 @@ const DocData = struct { |
| 586 | 586 | src: usize, // index into astNodes |
| 587 | 587 | privDecls: []usize = &.{}, // index into decls |
| 588 | 588 | pubDecls: []usize = &.{}, // index into decls |
| 589 | | fields: ?[]Expr = null, // (use src->fields to find names) |
| 589 | field_types: ?[]Expr = null, // (use src->fields to find names) |
| 590 | field_defaults: ?[]?Expr = null, |
| 590 | 591 | is_tuple: bool, |
| 591 | 592 | line_number: usize, |
| 592 | 593 | outer_decl: usize, |
| ... | ... | @@ -2831,6 +2832,7 @@ fn walkInstruction( |
| 2831 | 2832 | ); |
| 2832 | 2833 | |
| 2833 | 2834 | var field_type_refs: std.ArrayListUnmanaged(DocData.Expr) = .{}; |
| 2835 | var field_default_refs: std.ArrayListUnmanaged(?DocData.Expr) = .{}; |
| 2834 | 2836 | var field_name_indexes: std.ArrayListUnmanaged(usize) = .{}; |
| 2835 | 2837 | try self.collectStructFieldInfo( |
| 2836 | 2838 | file, |
| ... | ... | @@ -2838,6 +2840,7 @@ fn walkInstruction( |
| 2838 | 2840 | src_info, |
| 2839 | 2841 | fields_len, |
| 2840 | 2842 | &field_type_refs, |
| 2843 | &field_default_refs, |
| 2841 | 2844 | &field_name_indexes, |
| 2842 | 2845 | extra_index, |
| 2843 | 2846 | small.is_tuple, |
| ... | ... | @@ -2851,7 +2854,8 @@ fn walkInstruction( |
| 2851 | 2854 | .src = self_ast_node_index, |
| 2852 | 2855 | .privDecls = priv_decl_indexes.items, |
| 2853 | 2856 | .pubDecls = decl_indexes.items, |
| 2854 | | .fields = field_type_refs.items, |
| 2857 | .field_types = field_type_refs.items, |
| 2858 | .field_defaults = field_default_refs.items, |
| 2855 | 2859 | .is_tuple = small.is_tuple, |
| 2856 | 2860 | .line_number = self.ast_nodes.items[self_ast_node_index].line, |
| 2857 | 2861 | .outer_decl = type_slot_index - 1, |
| ... | ... | @@ -4309,6 +4313,7 @@ fn collectStructFieldInfo( |
| 4309 | 4313 | parent_src: SrcLocInfo, |
| 4310 | 4314 | fields_len: usize, |
| 4311 | 4315 | field_type_refs: *std.ArrayListUnmanaged(DocData.Expr), |
| 4316 | field_default_refs: *std.ArrayListUnmanaged(?DocData.Expr), |
| 4312 | 4317 | field_name_indexes: *std.ArrayListUnmanaged(usize), |
| 4313 | 4318 | ei: usize, |
| 4314 | 4319 | is_tuple: bool, |
| ... | ... | @@ -4406,9 +4411,23 @@ fn collectStructFieldInfo( |
| 4406 | 4411 | }; |
| 4407 | 4412 | |
| 4408 | 4413 | extra_index += field.align_body_len; |
| 4409 | | extra_index += field.init_body_len; |
| 4414 | |
| 4415 | const default_expr: ?DocData.Expr = def: { |
| 4416 | if (field.init_body_len == 0) { |
| 4417 | break :def null; |
| 4418 | } |
| 4419 | |
| 4420 | const body = file.zir.extra[extra_index..][0..field.init_body_len]; |
| 4421 | extra_index += body.len; |
| 4422 | |
| 4423 | const break_inst = body[body.len - 1]; |
| 4424 | const operand = data[break_inst].@"break".operand; |
| 4425 | const walk_result = try self.walkRef(file, scope, parent_src, operand, false); |
| 4426 | break :def walk_result.expr; |
| 4427 | }; |
| 4410 | 4428 | |
| 4411 | 4429 | try field_type_refs.append(self.arena, type_expr); |
| 4430 | try field_default_refs.append(self.arena, default_expr); |
| 4412 | 4431 | |
| 4413 | 4432 | // ast node |
| 4414 | 4433 | { |