commit 300b617140167d5023edb5d3cc33762bcde4d753 (tree)
parent bf982cd4e9c22944cbf9cd0d6b2695af64fb5c27
Author: s-ol <s-ol@users.noreply.github.com>
Date: Wed, 14 Oct 2020 18:32:45 +0200
generated docs: add FnFrame type support
See #3404
Diffstat:
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js
@@ -726,6 +726,25 @@
payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
}
return payloadHtml;
+ case typeKinds.Frame:
+ var name = '@Frame(';
+ var fnObj = zigAnalysis.fns[typeObj.fn];
+ var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);
+ var fnName = typeObj.fnName;
+ if (wantHtml) {
+ name += '<span class="tok-fn">';
+ if (declPath) {
+ name += '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">'
+ + escapeHtml(fnName) + '</a>';
+ } else {
+ name += escapeHtml(fnName);
+ }
+ name += '</span>';
+ } else {
+ name += fnName;
+ }
+ name += ')';
+ return name;
case typeKinds.AnyFrame:
var name = token('anyframe', tokenKinds.Keyword, wantHtml);
if (typeObj.result) {
diff --git a/src/stage1/dump_analysis.cpp b/src/stage1/dump_analysis.cpp
@@ -352,6 +352,7 @@ struct AnalDumpCtx {
ZigList<ZigFn *> fn_list;
HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_map;
+ HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_decl_map;
ZigList<AstNode *> node_list;
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) {
if (fn != nullptr) {
(void)anal_dump_get_type_id(ctx, fn->type_entry);
+ ctx->fn_decl_map.put_unique(fn, decl_id);
}
break;
}
@@ -1061,6 +1063,14 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
}
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:
@@ -1186,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);
}
@@ -1200,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);