Skip to content

Commit c7b5f62

Browse files
s-oltravv0
authored andcommitted
generated docs: add FnFrame type support
See ziglang#3404
1 parent d140c13 commit c7b5f62

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

lib/std/special/docs/main.js

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