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 @@...@@ -39,20 +39,8 @@
39 var searchTimer = null;39 var searchTimer = null;
40 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };40 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4141
42 var typeKindTypeId;42 var typeKinds = indexTypeKinds();
43 var typeKindFnId;43 var typeTypeId = findTypeTypeId();
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();
5644
57 // for each package, is an array with packages to get to this one45 // for each package, is an array with packages to get to this one
58 var canonPkgPaths = computeCanonicalPackagePaths();46 var canonPkgPaths = computeCanonicalPackagePaths();
...@@ -77,7 +65,6 @@...@@ -77,7 +65,6 @@
77 var curSearchIndex = -1;65 var curSearchIndex = -1;
7866
79 var rootIsStd = detectRootIsStd();67 var rootIsStd = detectRootIsStd();
80 var typeTypeId = findTypeTypeId();
8168
82 // map of decl index to list of non-generic fn indexes69 // map of decl index to list of non-generic fn indexes
83 var nodesToFnsMap = indexNodesToFns();70 var nodesToFnsMap = indexNodesToFns();
...@@ -173,7 +160,7 @@...@@ -173,7 +160,7 @@
173 }160 }
174 if (lastDecl.type != null) {161 if (lastDecl.type != null) {
175 var typeObj = zigAnalysis.types[lastDecl.type];162 var typeObj = zigAnalysis.types[lastDecl.type];
176 if (typeObj.kind === typeKindFnId) {163 if (typeObj.kind === typeKinds.Fn) {
177 return renderFn(lastDecl);164 return renderFn(lastDecl);
178 }165 }
179 throw new Error("docs for this decl which is not a container");166 throw new Error("docs for this decl which is not a container");
...@@ -188,19 +175,19 @@...@@ -188,19 +175,19 @@
188175
189 function typeIsErrSet(typeIndex) {176 function typeIsErrSet(typeIndex) {
190 var typeObj = zigAnalysis.types[typeIndex];177 var typeObj = zigAnalysis.types[typeIndex];
191 return typeObj.kind === typeKindErrSetId;178 return typeObj.kind === typeKinds.ErrorSet;
192 }179 }
193180
194 function typeIsStructWithNoFields(typeIndex) {181 function typeIsStructWithNoFields(typeIndex) {
195 var typeObj = zigAnalysis.types[typeIndex];182 var typeObj = zigAnalysis.types[typeIndex];
196 if (typeObj.kind !== typeKindStructId)183 if (typeObj.kind !== typeKinds.Struct)
197 return false;184 return false;
198 return typeObj.fields == null || typeObj.fields.length === 0;185 return typeObj.fields == null || typeObj.fields.length === 0;
199 }186 }
200187
201 function typeIsGenericFn(typeIndex) {188 function typeIsGenericFn(typeIndex) {
202 var typeObj = zigAnalysis.types[typeIndex];189 var typeObj = zigAnalysis.types[typeIndex];
203 if (typeObj.kind !== typeKindFnId) {190 if (typeObj.kind !== typeKinds.Fn) {
204 return false;191 return false;
205 }192 }
206 return typeObj.generic;193 return typeObj.generic;
...@@ -219,9 +206,9 @@...@@ -219,9 +206,9 @@
219 var errSetTypeIndex = null;206 var errSetTypeIndex = null;
220 if (typeObj.ret != null) {207 if (typeObj.ret != null) {
221 var retType = zigAnalysis.types[typeObj.ret];208 var retType = zigAnalysis.types[typeObj.ret];
222 if (retType.kind === typeKindErrSetId) {209 if (retType.kind === typeKinds.ErrorSet) {
223 errSetTypeIndex = typeObj.ret;210 errSetTypeIndex = typeObj.ret;
224 } else if (retType.kind === typeKindErrUnionId) {211 } else if (retType.kind === typeKinds.Union) {
225 errSetTypeIndex = retType.err;212 errSetTypeIndex = retType.err;
226 }213 }
227 }214 }
...@@ -404,7 +391,7 @@...@@ -404,7 +391,7 @@
404391
405 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, skipFnName) {392 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, skipFnName) {
406 switch (typeObj.kind) {393 switch (typeObj.kind) {
407 case typeKindPtrId:394 case typeKinds.Pointer:
408 var name = "";395 var name = "";
409 switch (typeObj.len) {396 switch (typeObj.len) {
410 case 0:397 case 0:
...@@ -464,13 +451,13 @@...@@ -464,13 +451,13 @@
464 }451 }
465 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);452 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
466 return name;453 return name;
467 case typeKindFloatId:454 case typeKinds.Float:
468 if (wantHtml) {455 if (wantHtml) {
469 return '<span class="tok-type">f' + typeObj.bits + '</span>';456 return '<span class="tok-type">f' + typeObj.bits + '</span>';
470 } else {457 } else {
471 return "f" + typeObj.bits;458 return "f" + typeObj.bits;
472 }459 }
473 case typeKindIntId:460 case typeKinds.Int:
474 var signed = (typeObj.i != null) ? 'i' : 'u';461 var signed = (typeObj.i != null) ? 'i' : 'u';
475 var bits = typeObj[signed];462 var bits = typeObj[signed];
476 if (wantHtml) {463 if (wantHtml) {
...@@ -478,31 +465,43 @@...@@ -478,31 +465,43 @@
478 } else {465 } else {
479 return signed + bits;466 return signed + bits;
480 }467 }
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:
482 if (wantHtml) {481 if (wantHtml) {
483 return '<span class="tok-type">type</span>';482 return '<span class="tok-type">type</span>';
484 } else {483 } else {
485 return "type";484 return "type";
486 }485 }
487 case typeKindBoolId:486 case typeKinds.Bool:
488 if (wantHtml) {487 if (wantHtml) {
489 return '<span class="tok-type">bool</span>';488 return '<span class="tok-type">bool</span>';
490 } else {489 } else {
491 return "bool";490 return "bool";
492 }491 }
493 case typeKindVoidId:492 case typeKinds.Void:
494 if (wantHtml) {493 if (wantHtml) {
495 return '<span class="tok-type">void</span>';494 return '<span class="tok-type">void</span>';
496 } else {495 } else {
497 return "void";496 return "void";
498 }497 }
499 case typeKindNoReturnId:498 case typeKinds.NoReturn:
500 if (wantHtml) {499 if (wantHtml) {
501 return '<span class="tok-type">noreturn</span>';500 return '<span class="tok-type">noreturn</span>';
502 } else {501 } else {
503 return "noreturn";502 return "noreturn";
504 }503 }
505 case typeKindErrSetId:504 case typeKinds.ErrorSet:
506 if (typeObj.errors == null) {505 if (typeObj.errors == null) {
507 if (wantHtml) {506 if (wantHtml) {
508 return '<span class="tok-type">anyerror</span>';507 return '<span class="tok-type">anyerror</span>';
...@@ -516,7 +515,7 @@...@@ -516,7 +515,7 @@
516 return typeObj.name;515 return typeObj.name;
517 }516 }
518 }517 }
519 case typeKindErrUnionId:518 case typeKinds.Union:
520 var errSetTypeObj = zigAnalysis.types[typeObj.err];519 var errSetTypeObj = zigAnalysis.types[typeObj.err];
521 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);520 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
522 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {521 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
...@@ -525,7 +524,7 @@...@@ -525,7 +524,7 @@
525 } else {524 } else {
526 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;525 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
527 }526 }
528 case typeKindFnId:527 case typeKinds.Fn:
529 var payloadHtml = "";528 var payloadHtml = "";
530 if (wantHtml) {529 if (wantHtml) {
531 payloadHtml += '<span class="tok-kw">fn</span>';530 payloadHtml += '<span class="tok-kw">fn</span>';
...@@ -576,7 +575,7 @@...@@ -576,7 +575,7 @@
576 domHdrName.innerText = name + " (" + zigAnalysis.typeKinds[typeObj.kind] + ")";575 domHdrName.innerText = name + " (" + zigAnalysis.typeKinds[typeObj.kind] + ")";
577 domHdrName.classList.remove("hidden");576 domHdrName.classList.remove("hidden");
578 }577 }
579 if (typeObj.kind == typeKindErrSetId) {578 if (typeObj.kind == typeKinds.ErrorSet) {
580 renderErrorSet(typeObj);579 renderErrorSet(typeObj);
581 }580 }
582 }581 }
...@@ -662,7 +661,7 @@...@@ -662,7 +661,7 @@
662 }661 }
663 } else {662 } else {
664 var typeKind = zigAnalysis.types[decl.type].kind;663 var typeKind = zigAnalysis.types[decl.type].kind;
665 if (typeKind === typeKindFnId) {664 if (typeKind === typeKinds.Fn) {
666 if (allCompTimeFnCallsHaveTypeResult(decl.type, decl.value)) {665 if (allCompTimeFnCallsHaveTypeResult(decl.type, decl.value)) {
667 typesList.push(decl);666 typesList.push(decl);
668 } else {667 } else {
...@@ -817,80 +816,24 @@...@@ -817,80 +816,24 @@
817 return rootPkg.file === stdPkg.file;816 return rootPkg.file === stdPkg.file;
818 }817 }
819818
820 function findTypeKinds() {819 function indexTypeKinds() {
820 var map = {};
821 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {821 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
822 if (zigAnalysis.typeKinds[i] === "Type") {822 map[zigAnalysis.typeKinds[i]] = i;
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");
855 }823 }
856 if (typeKindPtrId == null) {824 // This is just for debugging purposes, not needed to function
857 throw new Error("No type kind 'Pointer' found");825 var assertList = ["Type","Void","Bool","NoReturn","Int","Float","Pointer","Array","Struct",
858 }826 "ComptimeFloat","ComptimeInt","Undefined","Null","Optional","ErrorUnion","ErrorSet","Enum",
859 if (typeKindFloatId == null) {827 "Union","Fn","BoundFn","ArgTuple","Opaque","Frame","AnyFrame","Vector","EnumLiteral"];
860 throw new Error("No type kind 'Float' found");828 for (var i = 0; i < assertList.length; i += 1) {
861 }829 if (map[assertList[i]] == null) throw new Error("No type kind '" + assertList[i] + "' found");
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");
888 }830 }
831 return map;
889 }832 }
890833
891 function findTypeTypeId() {834 function findTypeTypeId() {
892 for (var i = 0; i < zigAnalysis.types.length; i += 1) {835 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) {
894 return i;837 return i;
895 }838 }
896 }839 }
...@@ -976,10 +919,10 @@...@@ -976,10 +919,10 @@
976 }919 }
977920
978 function declCanRepresentTypeKind(typeKind) {921 function declCanRepresentTypeKind(typeKind) {
979 return typeKind === typeKindErrSetId ||922 return typeKind === typeKinds.ErrorSet ||
980 typeKind === typeKindStructId ||923 typeKind === typeKinds.Struct ||
981 typeKind === typeKindUnionId ||924 typeKind === typeKinds.Union ||
982 typeKind === typeKindEnumId;925 typeKind === typeKinds.Enum;
983 }926 }
984927
985 function computeCanonDeclPaths() {928 function computeCanonDeclPaths() {