Skip to content

Commit d7ecc1d

Browse files
committed
generated docs: add FnFrame type support
See #3404
1 parent 79b9617 commit d7ecc1d

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

lib/std/special/docs/main.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,26 @@
726726
payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
727727
}
728728
return payloadHtml;
729+
case typeKinds.Frame:
730+
var name = '@Frame(';
731+
var fnObj = zigAnalysis.fns[typeObj.fn];
732+
var declObj = fnObj.decl && zigAnalysis.decls[fnObj.decl];
733+
var fn_name = declObj ? declObj.name : typeObj.fn_name;
734+
if (wantHtml) {
735+
name += '<span class="tok-fn">';
736+
if (declObj) {
737+
// TODO look up decl package and import path
738+
name += '<a href="' + navLinkDecl(declObj.name) + '">'
739+
+ escapeHtml(fn_name) + '</a>';
740+
} else {
741+
name += escapeHtml(fn_name);
742+
}
743+
name += '</span>';
744+
} else {
745+
name += fn_name;
746+
}
747+
name += ')';
748+
return name;
729749
case typeKinds.AnyFrame:
730750
var name = token('anyframe', tokenKinds.Keyword, wantHtml);
731751
if (typeObj.result) {

src/stage1/dump_analysis.cpp

Lines changed: 17 additions & 0 deletions
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
}
@@ -1061,6 +1063,14 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
10611063
}
10621064
break;
10631065
}
1066+
case ZigTypeIdFnFrame: {
1067+
jw_object_field(jw, "fn_name");
1068+
jw_string(jw, buf_ptr(&ty->data.frame.fn->symbol_name));
1069+
1070+
jw_object_field(jw, "fn");
1071+
anal_dump_fn_ref(ctx, ty->data.frame.fn);
1072+
break;
1073+
}
10641074
case ZigTypeIdInvalid:
10651075
zig_unreachable();
10661076
default:
@@ -1186,6 +1196,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {
11861196
jw_object_field(jw, "type");
11871197
anal_dump_type_ref(ctx, fn->type_entry);
11881198

1199+
auto entry = ctx->fn_decl_map.maybe_get(fn);
1200+
if (entry != nullptr) {
1201+
jw_object_field(jw, "decl");
1202+
jw_int(jw, entry->value);
1203+
}
1204+
11891205
jw_end_object(jw);
11901206
}
11911207

@@ -1200,6 +1216,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const
12001216
ctx.decl_map.init(16);
12011217
ctx.node_map.init(16);
12021218
ctx.fn_map.init(16);
1219+
ctx.fn_decl_map.init(16);
12031220
ctx.err_map.init(16);
12041221

12051222
jw_begin_object(jw);

0 commit comments

Comments
 (0)