authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 16:52:29-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 18:09:35-04:00
log13ae7d47b77c4ac7b1769f3ac3b394c32ffebe6e
treecdbd83aa9c9dd363336b825b26219e00e0ab1f80
parent42f2814d9acc014c84034468b2923195aa547ce1
signaturelock-open Commit is signed but in an unrecognized format.

generated docs: refactor how type kinds work


1 files changed, 47 insertions(+), 104 deletions(-)

lib/std/special/docs/main.js+47-104
......@@ -39,20 +39,8 @@
3939 var searchTimer = null;
4040 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4141
42 var typeKindTypeId;
43 var typeKindFnId;
44 var typeKindPtrId;
45 var typeKindFloatId;
46 var typeKindIntId;
47 var typeKindBoolId;
48 var typeKindVoidId;
49 var typeKindNoReturnId;
50 var typeKindErrSetId;
51 var typeKindErrUnionId;
52 var typeKindStructId;
53 var typeKindUnionId;
54 var typeKindEnumId;
55 findTypeKinds();
42 var typeKinds = indexTypeKinds();
43 var typeTypeId = findTypeTypeId();
5644
5745 // for each package, is an array with packages to get to this one
5846 var canonPkgPaths = computeCanonicalPackagePaths();
......@@ -77,7 +65,6 @@
7765 var curSearchIndex = -1;
7866
7967 var rootIsStd = detectRootIsStd();
80 var typeTypeId = findTypeTypeId();
8168
8269 // map of decl index to list of non-generic fn indexes
8370 var nodesToFnsMap = indexNodesToFns();
......@@ -173,7 +160,7 @@
173160 }
174161 if (lastDecl.type != null) {
175162 var typeObj = zigAnalysis.types[lastDecl.type];
176 if (typeObj.kind === typeKindFnId) {
163 if (typeObj.kind === typeKinds.Fn) {
177164 return renderFn(lastDecl);
178165 }
179166 throw new Error("docs for this decl which is not a container");
......@@ -188,19 +175,19 @@
188175
189176 function typeIsErrSet(typeIndex) {
190177 var typeObj = zigAnalysis.types[typeIndex];
191 return typeObj.kind === typeKindErrSetId;
178 return typeObj.kind === typeKinds.ErrorSet;
192179 }
193180
194181 function typeIsStructWithNoFields(typeIndex) {
195182 var typeObj = zigAnalysis.types[typeIndex];
196 if (typeObj.kind !== typeKindStructId)
183 if (typeObj.kind !== typeKinds.Struct)
197184 return false;
198185 return typeObj.fields == null || typeObj.fields.length === 0;
199186 }
200187
201188 function typeIsGenericFn(typeIndex) {
202189 var typeObj = zigAnalysis.types[typeIndex];
203 if (typeObj.kind !== typeKindFnId) {
190 if (typeObj.kind !== typeKinds.Fn) {
204191 return false;
205192 }
206193 return typeObj.generic;
......@@ -219,9 +206,9 @@
219206 var errSetTypeIndex = null;
220207 if (typeObj.ret != null) {
221208 var retType = zigAnalysis.types[typeObj.ret];
222 if (retType.kind === typeKindErrSetId) {
209 if (retType.kind === typeKinds.ErrorSet) {
223210 errSetTypeIndex = typeObj.ret;
224 } else if (retType.kind === typeKindErrUnionId) {
211 } else if (retType.kind === typeKinds.Union) {
225212 errSetTypeIndex = retType.err;
226213 }
227214 }
......@@ -404,7 +391,7 @@
404391
405392 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, skipFnName) {
406393 switch (typeObj.kind) {
407 case typeKindPtrId:
394 case typeKinds.Pointer:
408395 var name = "";
409396 switch (typeObj.len) {
410397 case 0:
......@@ -464,13 +451,13 @@
464451 }
465452 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
466453 return name;
467 case typeKindFloatId:
454 case typeKinds.Float:
468455 if (wantHtml) {
469456 return '<span class="tok-type">f' + typeObj.bits + '</span>';
470457 } else {
471458 return "f" + typeObj.bits;
472459 }
473 case typeKindIntId:
460 case typeKinds.Int:
474461 var signed = (typeObj.i != null) ? 'i' : 'u';
475462 var bits = typeObj[signed];
476463 if (wantHtml) {
......@@ -478,31 +465,43 @@
478465 } else {
479466 return signed + bits;
480467 }
481 case typeKindTypeId:
468 case typeKinds.ComptimeInt:
469 if (wantHtml) {
470 return '<span class="tok-type">comptime_int</span>';
471 } else {
472 return "comptime_int";
473 }
474 case typeKinds.ComptimeFloat:
475 if (wantHtml) {
476 return '<span class="tok-type">comptime_float</span>';
477 } else {
478 return "comptime_float";
479 }
480 case typeKinds.Type:
482481 if (wantHtml) {
483482 return '<span class="tok-type">type</span>';
484483 } else {
485484 return "type";
486485 }
487 case typeKindBoolId:
486 case typeKinds.Bool:
488487 if (wantHtml) {
489488 return '<span class="tok-type">bool</span>';
490489 } else {
491490 return "bool";
492491 }
493 case typeKindVoidId:
492 case typeKinds.Void:
494493 if (wantHtml) {
495494 return '<span class="tok-type">void</span>';
496495 } else {
497496 return "void";
498497 }
499 case typeKindNoReturnId:
498 case typeKinds.NoReturn:
500499 if (wantHtml) {
501500 return '<span class="tok-type">noreturn</span>';
502501 } else {
503502 return "noreturn";
504503 }
505 case typeKindErrSetId:
504 case typeKinds.ErrorSet:
506505 if (typeObj.errors == null) {
507506 if (wantHtml) {
508507 return '<span class="tok-type">anyerror</span>';
......@@ -516,7 +515,7 @@
516515 return typeObj.name;
517516 }
518517 }
519 case typeKindErrUnionId:
518 case typeKinds.Union:
520519 var errSetTypeObj = zigAnalysis.types[typeObj.err];
521520 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
522521 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
......@@ -525,7 +524,7 @@
525524 } else {
526525 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
527526 }
528 case typeKindFnId:
527 case typeKinds.Fn:
529528 var payloadHtml = "";
530529 if (wantHtml) {
531530 payloadHtml += '<span class="tok-kw">fn</span>';
......@@ -576,7 +575,7 @@
576575 domHdrName.innerText = name + " (" + zigAnalysis.typeKinds[typeObj.kind] + ")";
577576 domHdrName.classList.remove("hidden");
578577 }
579 if (typeObj.kind == typeKindErrSetId) {
578 if (typeObj.kind == typeKinds.ErrorSet) {
580579 renderErrorSet(typeObj);
581580 }
582581 }
......@@ -662,7 +661,7 @@
662661 }
663662 } else {
664663 var typeKind = zigAnalysis.types[decl.type].kind;
665 if (typeKind === typeKindFnId) {
664 if (typeKind === typeKinds.Fn) {
666665 if (allCompTimeFnCallsHaveTypeResult(decl.type, decl.value)) {
667666 typesList.push(decl);
668667 } else {
......@@ -817,80 +816,24 @@
817816 return rootPkg.file === stdPkg.file;
818817 }
819818
820 function findTypeKinds() {
819 function indexTypeKinds() {
820 var map = {};
821821 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
822 if (zigAnalysis.typeKinds[i] === "Type") {
823 typeKindTypeId = i;
824 } else if (zigAnalysis.typeKinds[i] === "Fn") {
825 typeKindFnId = i;
826 } else if (zigAnalysis.typeKinds[i] === "Pointer") {
827 typeKindPtrId = i;
828 } else if (zigAnalysis.typeKinds[i] === "Float") {
829 typeKindFloatId = i;
830 } else if (zigAnalysis.typeKinds[i] === "Int") {
831 typeKindIntId = i;
832 } else if (zigAnalysis.typeKinds[i] === "Bool") {
833 typeKindBoolId = i;
834 } else if (zigAnalysis.typeKinds[i] === "Void") {
835 typeKindVoidId = i;
836 } else if (zigAnalysis.typeKinds[i] === "NoReturn") {
837 typeKindNoReturnId = i;
838 } else if (zigAnalysis.typeKinds[i] === "ErrorSet") {
839 typeKindErrSetId = i;
840 } else if (zigAnalysis.typeKinds[i] === "ErrorUnion") {
841 typeKindErrUnionId = i;
842 } else if (zigAnalysis.typeKinds[i] === "Struct") {
843 typeKindStructId = i;
844 } else if (zigAnalysis.typeKinds[i] === "Union") {
845 typeKindUnionId = i;
846 } else if (zigAnalysis.typeKinds[i] === "Enum") {
847 typeKindEnumId = i;
848 }
849 }
850 if (typeKindTypeId == null) {
851 throw new Error("No type kind 'Type' found");
852 }
853 if (typeKindFnId == null) {
854 throw new Error("No type kind 'Fn' found");
822 map[zigAnalysis.typeKinds[i]] = i;
855823 }
856 if (typeKindPtrId == null) {
857 throw new Error("No type kind 'Pointer' found");
858 }
859 if (typeKindFloatId == null) {
860 throw new Error("No type kind 'Float' found");
861 }
862 if (typeKindIntId == null) {
863 throw new Error("No type kind 'Int' found");
864 }
865 if (typeKindBoolId == null) {
866 throw new Error("No type kind 'Bool' found");
867 }
868 if (typeKindVoidId == null) {
869 throw new Error("No type kind 'Void' found");
870 }
871 if (typeKindNoReturnId == null) {
872 throw new Error("No type kind 'Void' found");
873 }
874 if (typeKindErrSetId == null) {
875 throw new Error("No type kind 'ErrorSet' found");
876 }
877 if (typeKindErrUnionId == null) {
878 throw new Error("No type kind 'ErrorUnion' found");
879 }
880 if (typeKindStructId == null) {
881 throw new Error("No type kind 'Struct' found");
882 }
883 if (typeKindUnionId == null) {
884 throw new Error("No type kind 'Union' found");
885 }
886 if (typeKindEnumId == null) {
887 throw new Error("No type kind 'Enum' found");
824 // This is just for debugging purposes, not needed to function
825 var assertList = ["Type","Void","Bool","NoReturn","Int","Float","Pointer","Array","Struct",
826 "ComptimeFloat","ComptimeInt","Undefined","Null","Optional","ErrorUnion","ErrorSet","Enum",
827 "Union","Fn","BoundFn","ArgTuple","Opaque","Frame","AnyFrame","Vector","EnumLiteral"];
828 for (var i = 0; i < assertList.length; i += 1) {
829 if (map[assertList[i]] == null) throw new Error("No type kind '" + assertList[i] + "' found");
888830 }
831 return map;
889832 }
890833
891834 function findTypeTypeId() {
892835 for (var i = 0; i < zigAnalysis.types.length; i += 1) {
893 if (zigAnalysis.types[i].kind == typeKindTypeId) {
836 if (zigAnalysis.types[i].kind == typeKinds.Type) {
894837 return i;
895838 }
896839 }
......@@ -976,10 +919,10 @@
976919 }
977920
978921 function declCanRepresentTypeKind(typeKind) {
979 return typeKind === typeKindErrSetId ||
980 typeKind === typeKindStructId ||
981 typeKind === typeKindUnionId ||
982 typeKind === typeKindEnumId;
922 return typeKind === typeKinds.ErrorSet ||
923 typeKind === typeKinds.Struct ||
924 typeKind === typeKinds.Union ||
925 typeKind === typeKinds.Enum;
983926 }
984927
985928 function computeCanonDeclPaths() {