zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Mlib/std/special/docs/main.js | 19+++++++++++++++++++
Msrc/stage1/dump_analysis.cpp | 17+++++++++++++++++
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);