diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js
index f1c2f8f688e7..49a52e9bc2ff 100644
--- a/lib/std/special/docs/main.js
+++ b/lib/std/special/docs/main.js
@@ -540,7 +540,23 @@
return typeIndexName(value, wantHtml, wantLink);
case typeKinds.Fn:
var fnObj = zigAnalysis.fns[value];
- return typeIndexName(fnObj.type, wantHtml, wantLink);
+ var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);
+ var fnName = declPath ? declPath.declNames.join('.') : '(unknown)';
+
+ if (!wantHtml) {
+ return fnName;
+ }
+
+ var str = '';
+ if (wantLink && declPath != null) {
+ str += '';
+ str += escapeHtml(fnName);
+ str += '';
+ } else {
+ str += escapeHtml(fnName);
+ }
+ str += '';
+ return str;
case typeKinds.Int:
return token(value, tokenKinds.Number, wantHtml);
case typeKinds.Optional:
@@ -564,6 +580,13 @@
name += "]";
name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
return name;
+ case typeKinds.Vector:
+ var name = "Vector(";
+ name += token(typeObj.len, tokenKinds.Number, wantHtml);
+ name += ", ";
+ name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
+ name += ")";
+ return name;
case typeKinds.Optional:
return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
case typeKinds.Pointer:
@@ -719,6 +742,16 @@
payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
}
return payloadHtml;
+ case typeKinds.Frame:
+ var fnObj = zigAnalysis.fns[typeObj.fn];
+ return '@Frame(' + getValueText(fnObj.type, typeObj.fn, wantHtml, wantSubLink) + ')';
+ case typeKinds.AnyFrame:
+ var name = token('anyframe', tokenKinds.Keyword, wantHtml);
+ if (typeObj.result) {
+ name += "->";
+ name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null);
+ }
+ return name;
default:
if (wantHtml) {
return escapeHtml(typeObj.name);
diff --git a/src/stage1/dump_analysis.cpp b/src/stage1/dump_analysis.cpp
index df0d6f3ca273..8d070a8a179a 100644
--- a/src/stage1/dump_analysis.cpp
+++ b/src/stage1/dump_analysis.cpp
@@ -352,6 +352,7 @@ struct AnalDumpCtx {
ZigList fn_list;
HashMap fn_map;
+ HashMap fn_decl_map;
ZigList node_list;
HashMap node_map;
@@ -491,6 +492,7 @@ static uint32_t anal_dump_get_decl_id(AnalDumpCtx *ctx, Tld *tld) {
if (fn != nullptr) {
(void)anal_dump_get_type_id(ctx, fn->type_entry);
+ ctx->fn_decl_map.put_unique(fn, decl_id);
}
break;
}
@@ -1046,6 +1048,31 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
anal_dump_type_ref(ctx, ty->data.array.child_type);
break;
}
+ case ZigTypeIdVector: {
+ jw_object_field(jw, "len");
+ jw_int(jw, ty->data.vector.len);
+
+ jw_object_field(jw, "elem");
+ anal_dump_type_ref(ctx, ty->data.vector.elem_type);
+ break;
+ }
+ case ZigTypeIdAnyFrame: {
+ if (ty->data.any_frame.result_type != nullptr) {
+ jw_object_field(jw, "result");
+ anal_dump_type_ref(ctx, ty->data.any_frame.result_type);
+ }
+ break;
+ }
+ case ZigTypeIdFnFrame: {
+ jw_object_field(jw, "fnName");
+ jw_string(jw, buf_ptr(&ty->data.frame.fn->symbol_name));
+
+ jw_object_field(jw, "fn");
+ anal_dump_fn_ref(ctx, ty->data.frame.fn);
+ break;
+ }
+ case ZigTypeIdInvalid:
+ zig_unreachable();
default:
jw_object_field(jw, "name");
jw_string(jw, buf_ptr(&ty->name));
@@ -1169,6 +1196,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {
jw_object_field(jw, "type");
anal_dump_type_ref(ctx, fn->type_entry);
+ auto entry = ctx->fn_decl_map.maybe_get(fn);
+ if (entry != nullptr) {
+ jw_object_field(jw, "decl");
+ jw_int(jw, entry->value);
+ }
+
jw_end_object(jw);
}
@@ -1183,6 +1216,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const
ctx.decl_map.init(16);
ctx.node_map.init(16);
ctx.fn_map.init(16);
+ ctx.fn_decl_map.init(16);
ctx.err_map.init(16);
jw_begin_object(jw);