authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-10-29 15:19:02+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-10-29 15:19:02+02:00
log85dd5746bdcbe655132df61ca4556c72711d12d7
tree8db128de5c29a9e467f1da1dfb02a53232fa9893
parentfe6cc0c3ba6eee1ad17c2b1816847fd9c324e01b
parent6e96352b90231e92c9a0ed95c06cfd9af6abe662
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #6678 from s-ol/doc-type-aware

generated docs improvements: add vector, fntype, anytype type-printing; bool, function value-printing

2 files changed, 68 insertions(+), 1 deletions(-)

lib/std/special/docs/main.js+34-1
...@@ -540,7 +540,23 @@...@@ -540,7 +540,23 @@
540 return typeIndexName(value, wantHtml, wantLink);540 return typeIndexName(value, wantHtml, wantLink);
541 case typeKinds.Fn:541 case typeKinds.Fn:
542 var fnObj = zigAnalysis.fns[value];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 case typeKinds.Int:560 case typeKinds.Int:
545 return token(value, tokenKinds.Number, wantHtml);561 return token(value, tokenKinds.Number, wantHtml);
546 case typeKinds.Optional:562 case typeKinds.Optional:
...@@ -566,6 +582,13 @@...@@ -566,6 +582,13 @@
566 name += "]";582 name += "]";
567 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);583 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
568 return name;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 case typeKinds.Optional:592 case typeKinds.Optional:
570 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);593 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
571 case typeKinds.Pointer:594 case typeKinds.Pointer:
...@@ -721,6 +744,16 @@...@@ -721,6 +744,16 @@
721 payloadHtml += token('var', tokenKinds.Keyword, wantHtml);744 payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
722 }745 }
723 return payloadHtml;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 default:757 default:
725 if (wantHtml) {758 if (wantHtml) {
726 return escapeHtml(typeObj.name);759 return escapeHtml(typeObj.name);
src/stage1/dump_analysis.cpp+34
...@@ -352,6 +352,7 @@ struct AnalDumpCtx {...@@ -352,6 +352,7 @@ struct AnalDumpCtx {
352352
353 ZigList<ZigFn *> fn_list;353 ZigList<ZigFn *> fn_list;
354 HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_map;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;
355356
356 ZigList<AstNode *> node_list;357 ZigList<AstNode *> node_list;
357 HashMap<const AstNode *, uint32_t, node_ptr_hash, node_ptr_eql> node_map;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,6 +492,7 @@ static uint32_t anal_dump_get_decl_id(AnalDumpCtx *ctx, Tld *tld) {
491492
492 if (fn != nullptr) {493 if (fn != nullptr) {
493 (void)anal_dump_get_type_id(ctx, fn->type_entry);494 (void)anal_dump_get_type_id(ctx, fn->type_entry);
495 ctx->fn_decl_map.put_unique(fn, decl_id);
494 }496 }
495 break;497 break;
496 }498 }
...@@ -1050,6 +1052,31 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {...@@ -1050,6 +1052,31 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
1050 anal_dump_type_ref(ctx, ty->data.array.child_type);1052 anal_dump_type_ref(ctx, ty->data.array.child_type);
1051 break;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 default:1080 default:
1054 jw_object_field(jw, "name");1081 jw_object_field(jw, "name");
1055 jw_string(jw, buf_ptr(&ty->name));1082 jw_string(jw, buf_ptr(&ty->name));
...@@ -1173,6 +1200,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {...@@ -1173,6 +1200,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {
1173 jw_object_field(jw, "type");1200 jw_object_field(jw, "type");
1174 anal_dump_type_ref(ctx, fn->type_entry);1201 anal_dump_type_ref(ctx, fn->type_entry);
11751202
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 jw_end_object(jw);1209 jw_end_object(jw);
1177}1210}
11781211
...@@ -1187,6 +1220,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const...@@ -1187,6 +1220,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const
1187 ctx.decl_map.init(16);1220 ctx.decl_map.init(16);
1188 ctx.node_map.init(16);1221 ctx.node_map.init(16);
1189 ctx.fn_map.init(16);1222 ctx.fn_map.init(16);
1223 ctx.fn_decl_map.init(16);
1190 ctx.err_map.init(16);1224 ctx.err_map.init(16);
11911225
1192 jw_begin_object(jw);1226 jw_begin_object(jw);