authorgravatar for timonkruiper@gmail.comTimon Kruiper <timonkruiper@gmail.com> 2019-10-10 14:21:35+02:00
committergravatar for timonkruiper@gmail.comTimon Kruiper <timonkruiper@gmail.com> 2019-10-10 14:21:35+02:00
log4250d27fe500cf16701066277fd6643491e7ab09
treecfc2d2f3f9a24d0f608b07ef13b801dceda02cbc
parent12ed85d0d13136a5e8c1a54da5c3d2174cebee37

Generated docs: store static container info in a containerDecl astNode

And then get the struct field astNodes through the containerDecl astNode. The type of a struct field is still stored in the types array, but the static information is in the astNodes.

2 files changed, 44 insertions(+), 23 deletions(-)

lib/std/special/docs/main.js+7-4
...@@ -776,14 +776,17 @@...@@ -776,14 +776,17 @@
776776
777 if (container.fields != null && container.fields.length !== 0) {777 if (container.fields != null && container.fields.length !== 0) {
778 resizeDomList(domListFields, container.fields.length, '<div></div>');778 resizeDomList(domListFields, container.fields.length, '<div></div>');
779
780 var containerNode = zigAnalysis.astNodes[container.src];
779 for (var i = 0; i < container.fields.length; i += 1) {781 for (var i = 0; i < container.fields.length; i += 1) {
780 var field = container.fields[i];782 var fieldTypeIndex = container.fields[i];
783 var fieldNode = zigAnalysis.astNodes[containerNode.fields[i]];
781 var divDom = domListFields.children[i];784 var divDom = domListFields.children[i];
782785
783 var html = '<pre>' + escapeHtml(field.name) + ": " +786 var html = '<pre>' + escapeHtml(fieldNode.name) + ": " +
784 typeIndexName(field.type, true, true) + ',</pre>';787 typeIndexName(fieldTypeIndex, true, true) + ',</pre>';
785788
786 var docs = zigAnalysis.astNodes[field.src].docs;789 var docs = fieldNode.docs;
787 if (docs != null) {790 if (docs != null) {
788 html += markdown(docs);791 html += markdown(docs);
789 }792 }
src/dump_analysis.cpp+37-19
...@@ -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}
734734
735static 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
752static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {735static 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 }
813796
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);
817803
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) {
827813
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,39 @@ static void anal_dump_node(AnalDumpCtx *ctx, const AstNode *node) {...@@ -974,6 +959,39 @@ 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 }
976961
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 jw_end_object(jw);995 jw_end_object(jw);
978}996}
979997