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