| author | |
| committer | |
| log | 85dd5746bdcbe655132df61ca4556c72711d12d7 |
| tree | 8db128de5c29a9e467f1da1dfb02a53232fa9893 |
| parent | fe6cc0c3ba6eee1ad17c2b1816847fd9c324e01b |
| parent | 6e96352b90231e92c9a0ed95c06cfd9af6abe662 |
| signature |
generated docs improvements: add vector, fntype, anytype type-printing; bool, function value-printing2 files changed, 68 insertions(+), 1 deletions(-)
lib/std/special/docs/main.js+34-1| ... | ... | @@ -540,7 +540,23 @@ |
| 540 | 540 | return typeIndexName(value, wantHtml, wantLink); |
| 541 | 541 | case typeKinds.Fn: |
| 542 | 542 | var fnObj = zigAnalysis.fns[value]; |
| 543 | return typeIndexName(fnObj.type, wantHtml, wantLink); | |
| 543 | var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl); | |
| 544 | var fnName = declPath ? declPath.declNames.join('.') : '(unknown)'; | |
| 545 | ||
| 546 | if (!wantHtml) { | |
| 547 | return fnName; | |
| 548 | } | |
| 549 | ||
| 550 | var str = '<span class="tok-fn">'; | |
| 551 | if (wantLink && declPath != null) { | |
| 552 | str += '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">'; | |
| 553 | str += escapeHtml(fnName); | |
| 554 | str += '</a>'; | |
| 555 | } else { | |
| 556 | str += escapeHtml(fnName); | |
| 557 | } | |
| 558 | str += '</span>'; | |
| 559 | return str; | |
| 544 | 560 | case typeKinds.Int: |
| 545 | 561 | return token(value, tokenKinds.Number, wantHtml); |
| 546 | 562 | case typeKinds.Optional: |
| ... | ... | @@ -566,6 +582,13 @@ |
| 566 | 582 | name += "]"; |
| 567 | 583 | name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); |
| 568 | 584 | return name; |
| 585 | case typeKinds.Vector: | |
| 586 | var name = "Vector("; | |
| 587 | name += token(typeObj.len, tokenKinds.Number, wantHtml); | |
| 588 | name += ", "; | |
| 589 | name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); | |
| 590 | name += ")"; | |
| 591 | return name; | |
| 569 | 592 | case typeKinds.Optional: |
| 570 | 593 | return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl); |
| 571 | 594 | case typeKinds.Pointer: |
| ... | ... | @@ -721,6 +744,16 @@ |
| 721 | 744 | payloadHtml += token('var', tokenKinds.Keyword, wantHtml); |
| 722 | 745 | } |
| 723 | 746 | return payloadHtml; |
| 747 | case typeKinds.Frame: | |
| 748 | var fnObj = zigAnalysis.fns[typeObj.fn]; | |
| 749 | return '@Frame(' + getValueText(fnObj.type, typeObj.fn, wantHtml, wantSubLink) + ')'; | |
| 750 | case typeKinds.AnyFrame: | |
| 751 | var name = token('anyframe', tokenKinds.Keyword, wantHtml); | |
| 752 | if (typeObj.result) { | |
| 753 | name += "->"; | |
| 754 | name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null); | |
| 755 | } | |
| 756 | return name; | |
| 724 | 757 | default: |
| 725 | 758 | if (wantHtml) { |
| 726 | 759 | return escapeHtml(typeObj.name); |
src/stage1/dump_analysis.cpp+34| ... | ... | @@ -352,6 +352,7 @@ struct AnalDumpCtx { |
| 352 | 352 | |
| 353 | 353 | ZigList<ZigFn *> fn_list; |
| 354 | 354 | HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_map; |
| 355 | HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_decl_map; | |
| 355 | 356 | |
| 356 | 357 | ZigList<AstNode *> node_list; |
| 357 | 358 | HashMap<const AstNode *, uint32_t, node_ptr_hash, node_ptr_eql> node_map; |
| ... | ... | @@ -491,6 +492,7 @@ static uint32_t anal_dump_get_decl_id(AnalDumpCtx *ctx, Tld *tld) { |
| 491 | 492 | |
| 492 | 493 | if (fn != nullptr) { |
| 493 | 494 | (void)anal_dump_get_type_id(ctx, fn->type_entry); |
| 495 | ctx->fn_decl_map.put_unique(fn, decl_id); | |
| 494 | 496 | } |
| 495 | 497 | break; |
| 496 | 498 | } |
| ... | ... | @@ -1050,6 +1052,31 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { |
| 1050 | 1052 | anal_dump_type_ref(ctx, ty->data.array.child_type); |
| 1051 | 1053 | break; |
| 1052 | 1054 | } |
| 1055 | case ZigTypeIdVector: { | |
| 1056 | jw_object_field(jw, "len"); | |
| 1057 | jw_int(jw, ty->data.vector.len); | |
| 1058 | ||
| 1059 | jw_object_field(jw, "elem"); | |
| 1060 | anal_dump_type_ref(ctx, ty->data.vector.elem_type); | |
| 1061 | break; | |
| 1062 | } | |
| 1063 | case ZigTypeIdAnyFrame: { | |
| 1064 | if (ty->data.any_frame.result_type != nullptr) { | |
| 1065 | jw_object_field(jw, "result"); | |
| 1066 | anal_dump_type_ref(ctx, ty->data.any_frame.result_type); | |
| 1067 | } | |
| 1068 | break; | |
| 1069 | } | |
| 1070 | case ZigTypeIdFnFrame: { | |
| 1071 | jw_object_field(jw, "fnName"); | |
| 1072 | jw_string(jw, buf_ptr(&ty->data.frame.fn->symbol_name)); | |
| 1073 | ||
| 1074 | jw_object_field(jw, "fn"); | |
| 1075 | anal_dump_fn_ref(ctx, ty->data.frame.fn); | |
| 1076 | break; | |
| 1077 | } | |
| 1078 | case ZigTypeIdInvalid: | |
| 1079 | zig_unreachable(); | |
| 1053 | 1080 | default: |
| 1054 | 1081 | jw_object_field(jw, "name"); |
| 1055 | 1082 | jw_string(jw, buf_ptr(&ty->name)); |
| ... | ... | @@ -1173,6 +1200,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) { |
| 1173 | 1200 | jw_object_field(jw, "type"); |
| 1174 | 1201 | anal_dump_type_ref(ctx, fn->type_entry); |
| 1175 | 1202 | |
| 1203 | auto entry = ctx->fn_decl_map.maybe_get(fn); | |
| 1204 | if (entry != nullptr) { | |
| 1205 | jw_object_field(jw, "decl"); | |
| 1206 | jw_int(jw, entry->value); | |
| 1207 | } | |
| 1208 | ||
| 1176 | 1209 | jw_end_object(jw); |
| 1177 | 1210 | } |
| 1178 | 1211 | |
| ... | ... | @@ -1187,6 +1220,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const |
| 1187 | 1220 | ctx.decl_map.init(16); |
| 1188 | 1221 | ctx.node_map.init(16); |
| 1189 | 1222 | ctx.fn_map.init(16); |
| 1223 | ctx.fn_decl_map.init(16); | |
| 1190 | 1224 | ctx.err_map.init(16); |
| 1191 | 1225 | |
| 1192 | 1226 | jw_begin_object(jw); |