Skip to content

Commit 75d48e3

Browse files
committed
generated docs: add FnFrame type support
See ziglang#3404
1 parent 24ca9cc commit 75d48e3

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

lib/std/special/docs/main.js

+19
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,25 @@
729729
payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
730730
}
731731
return payloadHtml;
732+
case typeKinds.Frame:
733+
var name = '@Frame(';
734+
var fnObj = zigAnalysis.fns[typeObj.fn];
735+
var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);
736+
var fnName = typeObj.fnName;
737+
if (wantHtml) {
738+
name += '<span class="tok-fn">';
739+
if (declPath) {
740+
name += '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">'
741+
+ escapeHtml(fnName) + '</a>';
742+
} else {
743+
name += escapeHtml(fnName);
744+
}
745+
name += '</span>';
746+
} else {
747+
name += fnName;
748+
}
749+
name += ')';
750+
return name;
732751
case typeKinds.AnyFrame:
733752
var name = token('anyframe', tokenKinds.Keyword, wantHtml);
734753
if (typeObj.result) {

src/stage1/dump_analysis.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ struct AnalDumpCtx {
352352

353353
ZigList<ZigFn *> fn_list;
354354
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

356357
ZigList<AstNode *> node_list;
357358
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) {
491492

492493
if (fn != nullptr) {
493494
(void)anal_dump_get_type_id(ctx, fn->type_entry);
495+
ctx->fn_decl_map.put_unique(fn, decl_id);
494496
}
495497
break;
496498
}
@@ -1065,6 +1067,14 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
10651067
}
10661068
break;
10671069
}
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+
}
10681078
case ZigTypeIdInvalid:
10691079
zig_unreachable();
10701080
default:
@@ -1190,6 +1200,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {
11901200
jw_object_field(jw, "type");
11911201
anal_dump_type_ref(ctx, fn->type_entry);
11921202

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+
11931209
jw_end_object(jw);
11941210
}
11951211

@@ -1204,6 +1220,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const
12041220
ctx.decl_map.init(16);
12051221
ctx.node_map.init(16);
12061222
ctx.fn_map.init(16);
1223+
ctx.fn_decl_map.init(16);
12071224
ctx.err_map.init(16);
12081225

12091226
jw_begin_object(jw);

0 commit comments

Comments
 (0)