From c81e8c212516394a9add5637b35f3d25a8e22bde Mon Sep 17 00:00:00 2001 From: s-ol Date: Wed, 14 Oct 2020 16:48:06 +0200 Subject: [PATCH 1/4] generated docs: add vector type support See #3404 --- lib/std/special/docs/main.js | 7 +++++++ src/stage1/dump_analysis.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index f1c2f8f68..d9de30bfe 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -564,6 +564,13 @@ name += "]"; name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); return name; + case typeKinds.Vector: + var name = "Vector("; + name += token(typeObj.len, tokenKinds.Number, wantHtml); + name += ", "; + name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); + name += ")"; + return name; case typeKinds.Optional: return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl); case typeKinds.Pointer: diff --git a/src/stage1/dump_analysis.cpp b/src/stage1/dump_analysis.cpp index df0d6f3ca..ac16cc335 100644 --- a/src/stage1/dump_analysis.cpp +++ b/src/stage1/dump_analysis.cpp @@ -1046,6 +1046,16 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { anal_dump_type_ref(ctx, ty->data.array.child_type); break; } + case ZigTypeIdVector: { + jw_object_field(jw, "len"); + jw_int(jw, ty->data.vector.len); + + jw_object_field(jw, "elem"); + anal_dump_type_ref(ctx, ty->data.vector.elem_type); + break; + } + case ZigTypeIdInvalid: + zig_unreachable(); default: jw_object_field(jw, "name"); jw_string(jw, buf_ptr(&ty->name)); From bf982cd4e9c22944cbf9cd0d6b2695af64fb5c27 Mon Sep 17 00:00:00 2001 From: s-ol Date: Wed, 14 Oct 2020 17:12:38 +0200 Subject: [PATCH 2/4] generated docs: add anyframe type support See #3404 --- lib/std/special/docs/main.js | 7 +++++++ src/stage1/dump_analysis.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index d9de30bfe..a540f4b94 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -726,6 +726,13 @@ payloadHtml += token('var', tokenKinds.Keyword, wantHtml); } return payloadHtml; + case typeKinds.AnyFrame: + var name = token('anyframe', tokenKinds.Keyword, wantHtml); + if (typeObj.result) { + name += "->"; + name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null); + } + return name; default: if (wantHtml) { return escapeHtml(typeObj.name); diff --git a/src/stage1/dump_analysis.cpp b/src/stage1/dump_analysis.cpp index ac16cc335..acb521845 100644 --- a/src/stage1/dump_analysis.cpp +++ b/src/stage1/dump_analysis.cpp @@ -1054,6 +1054,13 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { anal_dump_type_ref(ctx, ty->data.vector.elem_type); break; } + case ZigTypeIdAnyFrame: { + if (ty->data.any_frame.result_type != nullptr) { + jw_object_field(jw, "result"); + anal_dump_type_ref(ctx, ty->data.any_frame.result_type); + } + break; + } case ZigTypeIdInvalid: zig_unreachable(); default: From 300b617140167d5023edb5d3cc33762bcde4d753 Mon Sep 17 00:00:00 2001 From: s-ol Date: Wed, 14 Oct 2020 18:32:45 +0200 Subject: [PATCH 3/4] generated docs: add FnFrame type support See #3404 --- lib/std/special/docs/main.js | 19 +++++++++++++++++++ src/stage1/dump_analysis.cpp | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index a540f4b94..d6171834a 100644 --- 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 += ''; + if (declPath) { + name += '' + + escapeHtml(fnName) + ''; + } else { + name += escapeHtml(fnName); + } + name += ''; + } 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 index acb521845..8d070a8a1 100644 --- a/src/stage1/dump_analysis.cpp +++ b/src/stage1/dump_analysis.cpp @@ -352,6 +352,7 @@ struct AnalDumpCtx { ZigList fn_list; HashMap fn_map; + HashMap fn_decl_map; ZigList node_list; HashMap 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); From 6e96352b90231e92c9a0ed95c06cfd9af6abe662 Mon Sep 17 00:00:00 2001 From: s-ol Date: Thu, 15 Oct 2020 12:48:14 +0200 Subject: [PATCH 4/4] docs: link to functions in getValueText and getCallHtml --- lib/std/special/docs/main.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index d6171834a..49a52e9bc 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -540,7 +540,23 @@ return typeIndexName(value, wantHtml, wantLink); case typeKinds.Fn: var fnObj = zigAnalysis.fns[value]; - return typeIndexName(fnObj.type, wantHtml, wantLink); + var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl); + var fnName = declPath ? declPath.declNames.join('.') : '(unknown)'; + + if (!wantHtml) { + return fnName; + } + + var str = ''; + if (wantLink && declPath != null) { + str += ''; + str += escapeHtml(fnName); + str += ''; + } else { + str += escapeHtml(fnName); + } + str += ''; + return str; case typeKinds.Int: return token(value, tokenKinds.Number, wantHtml); case typeKinds.Optional: @@ -727,24 +743,8 @@ } 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 += ''; - if (declPath) { - name += '' - + escapeHtml(fnName) + ''; - } else { - name += escapeHtml(fnName); - } - name += ''; - } else { - name += fnName; - } - name += ')'; - return name; + return '@Frame(' + getValueText(fnObj.type, typeObj.fn, wantHtml, wantSubLink) + ')'; case typeKinds.AnyFrame: var name = token('anyframe', tokenKinds.Keyword, wantHtml); if (typeObj.result) {