| ... | @@ -732,23 +732,6 @@ static void anal_dump_pointer_attrs(AnalDumpCtx *ctx, ZigType *ty) { | ... | @@ -732,23 +732,6 @@ static void anal_dump_pointer_attrs(AnalDumpCtx *ctx, ZigType *ty) { |
| 732 | anal_dump_type_ref(ctx, ty->data.pointer.child_type); | 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 | static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { | 735 | static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 753 | JsonWriter *jw = &ctx->jw; | 736 | JsonWriter *jw = &ctx->jw; |
| 754 | jw_array_elem(jw); | 737 | jw_array_elem(jw); |
| ... | @@ -811,13 +794,16 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { | ... | @@ -811,13 +794,16 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 811 | jw_end_array(jw); | 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 | if (ty->data.structure.src_field_count != 0) { | 800 | if (ty->data.structure.src_field_count != 0) { |
| 815 | jw_object_field(jw, "fields"); | 801 | jw_object_field(jw, "fields"); |
| 816 | jw_begin_array(jw); | 802 | jw_begin_array(jw); |
| 817 | | 803 | |
| 818 | for(size_t i = 0; i < ty->data.structure.src_field_count; i += 1) { | 804 | for(size_t i = 0; i < ty->data.structure.src_field_count; i += 1) { |
| 819 | jw_array_elem(jw); | 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 | jw_end_array(jw); | 808 | jw_end_array(jw); |
| 823 | } | 809 | } |
| ... | @@ -827,7 +813,6 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { | ... | @@ -827,7 +813,6 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 827 | | 813 | |
| 828 | jw_object_field(jw, "file"); | 814 | jw_object_field(jw, "file"); |
| 829 | anal_dump_file_ref(ctx, path_buf); | 815 | anal_dump_file_ref(ctx, path_buf); |
| 830 | | | |
| 831 | } | 816 | } |
| 832 | break; | 817 | break; |
| 833 | } | 818 | } |
| ... | @@ -974,6 +959,45 @@ static void anal_dump_node(AnalDumpCtx *ctx, const AstNode *node) { | ... | @@ -974,6 +959,45 @@ static void anal_dump_node(AnalDumpCtx *ctx, const AstNode *node) { |
| 974 | jw_string(jw, buf_ptr(doc_comments_buf)); | 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 | case NodeTypeParamDecl: |
| | 968 | name_buf = node->data.param_decl.name; |
| | 969 | break; |
| | 970 | default: |
| | 971 | name_buf = nullptr; |
| | 972 | break; |
| | 973 | } |
| | 974 | if (name_buf != nullptr) { |
| | 975 | jw_object_field(jw, "name"); |
| | 976 | jw_string(jw, buf_ptr(name_buf)); |
| | 977 | } |
| | 978 | |
| | 979 | const ZigList<AstNode *> *fieldNodes; |
| | 980 | switch (node->type) { |
| | 981 | case NodeTypeContainerDecl: |
| | 982 | fieldNodes = &node->data.container_decl.fields; |
| | 983 | break; |
| | 984 | case NodeTypeFnProto: |
| | 985 | fieldNodes = &node->data.fn_proto.params; |
| | 986 | break; |
| | 987 | default: |
| | 988 | fieldNodes = nullptr; |
| | 989 | break; |
| | 990 | } |
| | 991 | if (fieldNodes != nullptr) { |
| | 992 | jw_object_field(jw, "fields"); |
| | 993 | jw_begin_array(jw); |
| | 994 | for (size_t i = 0; i < fieldNodes->length; i += 1) { |
| | 995 | jw_array_elem(jw); |
| | 996 | anal_dump_node_ref(ctx, fieldNodes->at(i)); |
| | 997 | } |
| | 998 | jw_end_array(jw); |
| | 999 | } |
| | 1000 | |
| 977 | jw_end_object(jw); | 1001 | jw_end_object(jw); |
| 978 | } | 1002 | } |
| 979 | | 1003 | |