| ... | ... | @@ -391,8 +391,35 @@ var zigAnalysis; |
| 391 | 391 | return isType(x) && typeKindIsContainer(/** @type {Type} */(x).kind) ; |
| 392 | 392 | } |
| 393 | 393 | |
| 394 | | /** @param {Type} type */ |
| 395 | | function typeShorthandName(type) { |
| 394 | /** @param {WalkResult} wr */ |
| 395 | function typeShorthandName(wr) { |
| 396 | let resolvedWr = resolveValue(wr); |
| 397 | if (!("type" in resolvedWr)) { |
| 398 | return null; |
| 399 | } |
| 400 | let type = /** @type {Type} */(zigAnalysis.types[resolvedWr.type]); |
| 401 | |
| 402 | outer: for (let i = 0; i < 10000; i += 1) { |
| 403 | switch (type.kind) { |
| 404 | case typeKinds.Optional: |
| 405 | case typeKinds.Pointer: |
| 406 | let child = /** @type {PointerType | OptionalType} */(type).child; |
| 407 | let resolvedChild = resolveValue(child); |
| 408 | if ("type" in resolvedChild) { |
| 409 | type = zigAnalysis.types[resolvedChild.type]; |
| 410 | continue; |
| 411 | } else { |
| 412 | return null; |
| 413 | } |
| 414 | default: |
| 415 | break outer; |
| 416 | } |
| 417 | |
| 418 | if (i == 9999) throw "Exhausted typeShorthandName quota"; |
| 419 | } |
| 420 | |
| 421 | |
| 422 | |
| 396 | 423 | let name = undefined; |
| 397 | 424 | if (type.kind === typeKinds.Struct) { |
| 398 | 425 | name = "struct"; |
| ... | ... | @@ -401,8 +428,10 @@ var zigAnalysis; |
| 401 | 428 | } else if (type.kind === typeKinds.Union) { |
| 402 | 429 | name = "union"; |
| 403 | 430 | } else { |
| 404 | | name = /** @type {any} */(type).name; |
| 431 | console.log("TODO: unhalndled case in typeShortName"); |
| 432 | return null; |
| 405 | 433 | } |
| 434 | |
| 406 | 435 | return escapeHtml(name); |
| 407 | 436 | } |
| 408 | 437 | |
| ... | ... | @@ -954,8 +983,7 @@ var zigAnalysis; |
| 954 | 983 | */ |
| 955 | 984 | function resizeDomListDl(dlDom, desiredLen) { |
| 956 | 985 | // add the missing dom entries |
| 957 | | let i, ev; |
| 958 | | for (i = dlDom.childElementCount / 2; i < desiredLen; i += 1) { |
| 986 | for (let i = dlDom.childElementCount / 2; i < desiredLen; i += 1) { |
| 959 | 987 | dlDom.insertAdjacentHTML('beforeend', '<dt></dt><dd></dd>'); |
| 960 | 988 | } |
| 961 | 989 | // remove extra dom entries |
| ... | ... | @@ -972,8 +1000,7 @@ var zigAnalysis; |
| 972 | 1000 | */ |
| 973 | 1001 | function resizeDomList(listDom, desiredLen, templateHtml) { |
| 974 | 1002 | // add the missing dom entries |
| 975 | | let i, ev; |
| 976 | | for (i = listDom.childElementCount; i < desiredLen; i += 1) { |
| 1003 | for (let i = listDom.childElementCount; i < desiredLen; i += 1) { |
| 977 | 1004 | listDom.insertAdjacentHTML('beforeend', templateHtml); |
| 978 | 1005 | } |
| 979 | 1006 | // remove extra dom entries |
| ... | ... | @@ -1050,7 +1077,6 @@ var zigAnalysis; |
| 1050 | 1077 | console.assert("type" in typeValue) |
| 1051 | 1078 | let typeIndex = typeValue.type; |
| 1052 | 1079 | let typeObj = zigAnalysis.types[typeIndex]; |
| 1053 | | let declNameOk = declCanRepresentTypeKind(typeObj.kind); |
| 1054 | 1080 | if (wantLink) { |
| 1055 | 1081 | let declIndex = getCanonTypeDecl(typeIndex); |
| 1056 | 1082 | let declPath = getCanonDeclPath(declIndex); |
| ... | ... | @@ -1359,7 +1385,6 @@ var zigAnalysis; |
| 1359 | 1385 | |
| 1360 | 1386 | let value = fnObj.params[i]; |
| 1361 | 1387 | let paramValue = resolveValue(value); |
| 1362 | | let isCte = "comptimeExpr" in paramValue; |
| 1363 | 1388 | |
| 1364 | 1389 | if (fields != null) { |
| 1365 | 1390 | let paramNode = zigAnalysis.astNodes[fields[i]]; |
| ... | ... | @@ -1402,7 +1427,7 @@ var zigAnalysis; |
| 1402 | 1427 | payloadHtml += '</a>'; |
| 1403 | 1428 | |
| 1404 | 1429 | } else if ("type" in value) { |
| 1405 | | let name = typeValueName(value, wantHtml, wantSubLink, fnDecl, linkFnNameDecl); |
| 1430 | let name = typeValueName(value, false, false, fnDecl, linkFnNameDecl); |
| 1406 | 1431 | payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>'; |
| 1407 | 1432 | } else if ("comptimeExpr" in value) { |
| 1408 | 1433 | payloadHtml += '<span class="tok-kw">[ComptimeExpr]</span>'; |
| ... | ... | @@ -1815,10 +1840,15 @@ var zigAnalysis; |
| 1815 | 1840 | if (container.kind === typeKinds.Enum) { |
| 1816 | 1841 | html += ' = <span class="tok-number">' + fieldName + '</span>'; |
| 1817 | 1842 | } else { |
| 1818 | | let field = container.fields[i]; |
| 1843 | let fieldTypeWr = container.fields[i]; |
| 1819 | 1844 | html += ": "; |
| 1820 | | let name = typeValueName(field, false, false); |
| 1845 | let name = typeValueName(fieldTypeWr, false, false); |
| 1821 | 1846 | html += '<span class="tok-kw">'+ name +'</span>'; |
| 1847 | let tsn = typeShorthandName(fieldTypeWr); |
| 1848 | if (tsn) { |
| 1849 | html += '<span> ('+ tsn +')</span>'; |
| 1850 | |
| 1851 | } |
| 1822 | 1852 | } |
| 1823 | 1853 | |
| 1824 | 1854 | html += ',</pre></div>'; |
| ... | ... | @@ -2751,18 +2781,5 @@ function byNameProperty(a, b) { |
| 2751 | 2781 | } |
| 2752 | 2782 | |
| 2753 | 2783 | |
| 2754 | | /** |
| 2755 | | * @template T |
| 2756 | | * @param {T} obj |
| 2757 | | * @returns {T} |
| 2758 | | */ |
| 2759 | | function clone(obj) { |
| 2760 | | let res = /** @type T */({}); |
| 2761 | | for (let key in obj) { |
| 2762 | | res[key] = obj[key]; |
| 2763 | | } |
| 2764 | | return res; |
| 2765 | | } |
| 2766 | | |
| 2767 | 2784 | |
| 2768 | 2785 | })(); |