| ... | ... | @@ -732,23 +732,6 @@ static void anal_dump_pointer_attrs(AnalDumpCtx *ctx, ZigType *ty) { |
| 732 | 732 | anal_dump_type_ref(ctx, ty->data.pointer.child_type); |
| 733 | 733 | } |
| 734 | 734 | |
| 735 | | static void anal_dump_struct_field(AnalDumpCtx *ctx, const TypeStructField *struct_field) { |
| 736 | | JsonWriter *jw = &ctx->jw; |
| 737 | | |
| 738 | | jw_begin_object(jw); |
| 739 | | |
| 740 | | jw_object_field(jw, "name"); |
| 741 | | jw_string(jw, buf_ptr(struct_field->name)); |
| 742 | | |
| 743 | | jw_object_field(jw, "type"); |
| 744 | | anal_dump_type_ref(ctx, struct_field->type_entry); |
| 745 | | |
| 746 | | jw_object_field(jw, "src"); |
| 747 | | anal_dump_node_ref(ctx, struct_field->decl_node); |
| 748 | | |
| 749 | | jw_end_object(jw); |
| 750 | | } |
| 751 | | |
| 752 | 735 | static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 753 | 736 | JsonWriter *jw = &ctx->jw; |
| 754 | 737 | jw_array_elem(jw); |
| ... | ... | @@ -811,13 +794,16 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 811 | 794 | jw_end_array(jw); |
| 812 | 795 | } |
| 813 | 796 | |
| 797 | jw_object_field(jw, "src"); |
| 798 | anal_dump_node_ref(ctx, ty->data.structure.decl_node); |
| 799 | |
| 814 | 800 | if (ty->data.structure.src_field_count != 0) { |
| 815 | 801 | jw_object_field(jw, "fields"); |
| 816 | 802 | jw_begin_array(jw); |
| 817 | 803 | |
| 818 | 804 | for(size_t i = 0; i < ty->data.structure.src_field_count; i += 1) { |
| 819 | 805 | jw_array_elem(jw); |
| 820 | | anal_dump_struct_field(ctx, &ty->data.structure.fields[i]); |
| 806 | anal_dump_type_ref(ctx, ty->data.structure.fields[i].type_entry); |
| 821 | 807 | } |
| 822 | 808 | jw_end_array(jw); |
| 823 | 809 | } |
| ... | ... | @@ -827,7 +813,6 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 827 | 813 | |
| 828 | 814 | jw_object_field(jw, "file"); |
| 829 | 815 | anal_dump_file_ref(ctx, path_buf); |
| 830 | | |
| 831 | 816 | } |
| 832 | 817 | break; |
| 833 | 818 | } |
| ... | ... | @@ -974,6 +959,39 @@ static void anal_dump_node(AnalDumpCtx *ctx, const AstNode *node) { |
| 974 | 959 | jw_string(jw, buf_ptr(doc_comments_buf)); |
| 975 | 960 | } |
| 976 | 961 | |
| 962 | const Buf *name_buf; |
| 963 | switch (node->type) { |
| 964 | case NodeTypeStructField: |
| 965 | name_buf = node->data.struct_field.name; |
| 966 | break; |
| 967 | default: |
| 968 | name_buf = nullptr; |
| 969 | break; |
| 970 | } |
| 971 | if (name_buf != nullptr) { |
| 972 | jw_object_field(jw, "name"); |
| 973 | jw_string(jw, buf_ptr(name_buf)); |
| 974 | } |
| 975 | |
| 976 | const ZigList<AstNode *> *fieldNodes; |
| 977 | switch (node->type) { |
| 978 | case NodeTypeContainerDecl: |
| 979 | fieldNodes = &node->data.container_decl.fields; |
| 980 | break; |
| 981 | default: |
| 982 | fieldNodes = nullptr; |
| 983 | break; |
| 984 | } |
| 985 | if (fieldNodes != nullptr) { |
| 986 | jw_object_field(jw, "fields"); |
| 987 | jw_begin_array(jw); |
| 988 | for (size_t i = 0; i < fieldNodes->length; i += 1) { |
| 989 | jw_array_elem(jw); |
| 990 | anal_dump_node_ref(ctx, fieldNodes->at(i)); |
| 991 | } |
| 992 | jw_end_array(jw); |
| 993 | } |
| 994 | |
| 977 | 995 | jw_end_object(jw); |
| 978 | 996 | } |
| 979 | 997 | |