| ... | ... | @@ -93,8 +93,7 @@ var zigAnalysis; |
| 93 | 93 | // empty array means refers to the package itself |
| 94 | 94 | declNames: [], |
| 95 | 95 | // these will be all types, except the last one may be a type or a decl |
| 96 | | declObjs: [], |
| 97 | | |
| 96 | declObjs: [], |
| 98 | 97 | // (a, b, c, d) comptime call; result is the value the docs refer to |
| 99 | 98 | callName: null, |
| 100 | 99 | }; |
| ... | ... | @@ -451,6 +450,8 @@ var zigAnalysis; |
| 451 | 450 | curNav.declObjs.push(currentType); |
| 452 | 451 | } |
| 453 | 452 | |
| 453 | |
| 454 | |
| 454 | 455 | window.x = currentType; |
| 455 | 456 | |
| 456 | 457 | renderNav(); |
| ... | ... | @@ -819,6 +820,27 @@ var zigAnalysis; |
| 819 | 820 | return navLink(curNav.pkgNames, curNav.declNames.concat([childName])); |
| 820 | 821 | } |
| 821 | 822 | |
| 823 | function findDeclNavLink(declName) { |
| 824 | if (curNav.declObjs.length == 0) return null; |
| 825 | const curFile = getAstNode(curNav.declObjs[curNav.declObjs.length-1].src).file; |
| 826 | |
| 827 | for (let i = curNav.declObjs.length -1; i >= 0; i--) { |
| 828 | const curDecl = curNav.declObjs[i]; |
| 829 | const curDeclName = curNav.declNames[i-1]; |
| 830 | if (curDeclName == declName) { |
| 831 | const declPath = curNav.declNames.slice(0,i); |
| 832 | return navLink(curNav.pkgNames, declPath); |
| 833 | } |
| 834 | |
| 835 | if (findSubDecl(curDecl, declName) != null) { |
| 836 | const declPath = curNav.declNames.slice(0,i).concat([declName]); |
| 837 | return navLink(curNav.pkgNames, declPath); |
| 838 | } |
| 839 | } |
| 840 | |
| 841 | //throw("could not resolve links for '" + declName + "'"); |
| 842 | } |
| 843 | |
| 822 | 844 | // |
| 823 | 845 | // function navLinkCall(callObj) { |
| 824 | 846 | // let declNamesCopy = curNav.declNames.concat([]); |
| ... | ... | @@ -879,7 +901,7 @@ var zigAnalysis; |
| 879 | 901 | return "false"; |
| 880 | 902 | } |
| 881 | 903 | case "&": { |
| 882 | | return "&" + exprName(zigAnalysis.exprs[expr["&"]]); |
| 904 | return "&" + exprName(zigAnalysis.exprs[expr["&"]], opts); |
| 883 | 905 | } |
| 884 | 906 | case "compileError": { |
| 885 | 907 | let compileError = expr.compileError; |
| ... | ... | @@ -896,18 +918,18 @@ var zigAnalysis; |
| 896 | 918 | let payloadHtml = ""; |
| 897 | 919 | const lhsExpr = zigAnalysis.exprs[expr.slice.lhs]; |
| 898 | 920 | const startExpr = zigAnalysis.exprs[expr.slice.start]; |
| 899 | | let decl = exprName(lhsExpr); |
| 900 | | let start = exprName(startExpr); |
| 921 | let decl = exprName(lhsExpr, opts); |
| 922 | let start = exprName(startExpr, opts); |
| 901 | 923 | let end = ""; |
| 902 | 924 | let sentinel = ""; |
| 903 | 925 | if (expr.slice["end"]) { |
| 904 | 926 | const endExpr = zigAnalysis.exprs[expr.slice.end]; |
| 905 | | let end_ = exprName(endExpr); |
| 927 | let end_ = exprName(endExpr, opts); |
| 906 | 928 | end += end_; |
| 907 | 929 | } |
| 908 | 930 | if (expr.slice["sentinel"]) { |
| 909 | 931 | const sentinelExpr = zigAnalysis.exprs[expr.slice.sentinel]; |
| 910 | | let sentinel_ = exprName(sentinelExpr); |
| 932 | let sentinel_ = exprName(sentinelExpr, opts); |
| 911 | 933 | sentinel += " :" + sentinel_; |
| 912 | 934 | } |
| 913 | 935 | payloadHtml += decl + "[" + start + ".." + end + sentinel + "]"; |
| ... | ... | @@ -915,7 +937,7 @@ var zigAnalysis; |
| 915 | 937 | } |
| 916 | 938 | case "sliceIndex": { |
| 917 | 939 | const sliceIndex = zigAnalysis.exprs[expr.sliceIndex]; |
| 918 | | return exprName(sliceIndex, opts); |
| 940 | return exprName(sliceIndex, opts, opts); |
| 919 | 941 | } |
| 920 | 942 | case "cmpxchg": { |
| 921 | 943 | const typeIndex = zigAnalysis.exprs[expr.cmpxchg.type]; |
| ... | ... | @@ -1019,19 +1041,6 @@ var zigAnalysis; |
| 1019 | 1041 | const switchIndex = zigAnalysis.exprs[expr.switchIndex]; |
| 1020 | 1042 | return exprName(switchIndex, opts); |
| 1021 | 1043 | } |
| 1022 | | case "refPath": { |
| 1023 | | let name = exprName(expr.refPath[0]); |
| 1024 | | for (let i = 1; i < expr.refPath.length; i++) { |
| 1025 | | let component = undefined; |
| 1026 | | if ("string" in expr.refPath[i]) { |
| 1027 | | component = expr.refPath[i].string; |
| 1028 | | } else { |
| 1029 | | component = exprName(expr.refPath[i]); |
| 1030 | | } |
| 1031 | | name += "." + component; |
| 1032 | | } |
| 1033 | | return name; |
| 1034 | | } |
| 1035 | 1044 | case "fieldRef": { |
| 1036 | 1045 | const enumObj = exprName({ type: expr.fieldRef.type }, opts); |
| 1037 | 1046 | const field = |
| ... | ... | @@ -1581,10 +1590,46 @@ var zigAnalysis; |
| 1581 | 1590 | return exprName(exprArg, opts); |
| 1582 | 1591 | } |
| 1583 | 1592 | case "declRef": { |
| 1584 | | return getDecl(expr.declRef).name; |
| 1593 | const name = getDecl(expr.declRef).name; |
| 1594 | |
| 1595 | if (opts.wantHtml) { |
| 1596 | let payloadHtml = ""; |
| 1597 | if (opts.wantLink) { |
| 1598 | payloadHtml += '<a href="'+ findDeclNavLink(name) +'">'; |
| 1599 | } |
| 1600 | payloadHtml += |
| 1601 | '<span class="tok-kw" style="color:lightblue;">' + |
| 1602 | name + |
| 1603 | "</span>"; |
| 1604 | if (opts.wantLink) payloadHtml += "</a>"; |
| 1605 | return payloadHtml; |
| 1606 | } else { |
| 1607 | return name; |
| 1608 | } |
| 1585 | 1609 | } |
| 1586 | 1610 | case "refPath": { |
| 1587 | | return expr.refPath.map((x) => exprName(x, opts)).join("."); |
| 1611 | let firstComponent = expr.refPath[0]; |
| 1612 | let name = exprName(firstComponent, opts); |
| 1613 | let url = undefined; |
| 1614 | if (opts.wantLink && "declRef" in firstComponent) { |
| 1615 | url = findDeclNavLink(getDecl(firstComponent.declRef).name); |
| 1616 | } |
| 1617 | for (let i = 1; i < expr.refPath.length; i++) { |
| 1618 | let component = undefined; |
| 1619 | if ("string" in expr.refPath[i]) { |
| 1620 | component = expr.refPath[i].string; |
| 1621 | } else { |
| 1622 | component = exprName(expr.refPath[i], {...opts, wantLink: false}); |
| 1623 | if (opts.wantLink && "declRef" in expr.refPath[i]) { |
| 1624 | url += "." + getDecl(expr.refPath[i].declRef).name; |
| 1625 | component = '<a href="'+ url +'">' + |
| 1626 | component + |
| 1627 | "</a>"; |
| 1628 | } |
| 1629 | } |
| 1630 | name += "." + component; |
| 1631 | } |
| 1632 | return name; |
| 1588 | 1633 | } |
| 1589 | 1634 | case "int": { |
| 1590 | 1635 | return "" + expr.int; |
| ... | ... | @@ -1929,78 +1974,20 @@ var zigAnalysis; |
| 1929 | 1974 | if (isVarArgs && i === fnObj.params.length - 1) { |
| 1930 | 1975 | payloadHtml += "..."; |
| 1931 | 1976 | } else if ("alignOf" in value) { |
| 1932 | | if (opts.wantHtml) { |
| 1933 | | payloadHtml += '<a href="">'; |
| 1934 | | payloadHtml += |
| 1935 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1936 | | exprName(value, opts) + |
| 1937 | | "</span>"; |
| 1938 | | payloadHtml += "</a>"; |
| 1939 | | } else { |
| 1940 | | payloadHtml += exprName(value, opts); |
| 1941 | | } |
| 1977 | payloadHtml += exprName(value, opts); |
| 1942 | 1978 | } else if ("typeOf" in value) { |
| 1943 | | if (opts.wantHtml) { |
| 1944 | | payloadHtml += '<a href="">'; |
| 1945 | | payloadHtml += |
| 1946 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1947 | | exprName(value, opts) + |
| 1948 | | "</span>"; |
| 1949 | | payloadHtml += "</a>"; |
| 1950 | | } else { |
| 1951 | | payloadHtml += exprName(value, opts); |
| 1952 | | } |
| 1979 | payloadHtml += exprName(value, opts); |
| 1953 | 1980 | } else if ("typeOf_peer" in value) { |
| 1954 | | if (opts.wantHtml) { |
| 1955 | | payloadHtml += '<a href="">'; |
| 1956 | | payloadHtml += |
| 1957 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1958 | | exprName(value, opts) + |
| 1959 | | "</span>"; |
| 1960 | | payloadHtml += "</a>"; |
| 1961 | | } else { |
| 1962 | 1981 | payloadHtml += exprName(value, opts); |
| 1963 | | } |
| 1964 | 1982 | } else if ("declRef" in value) { |
| 1965 | | if (opts.wantHtml) { |
| 1966 | | payloadHtml += '<a href="">'; |
| 1967 | | payloadHtml += |
| 1968 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1969 | | exprName(value, opts) + |
| 1970 | | "</span>"; |
| 1971 | | payloadHtml += "</a>"; |
| 1972 | | } else { |
| 1973 | 1983 | payloadHtml += exprName(value, opts); |
| 1974 | | } |
| 1975 | 1984 | } else if ("call" in value) { |
| 1976 | | if (opts.wantHtml) { |
| 1977 | | payloadHtml += '<a href="">'; |
| 1978 | | payloadHtml += |
| 1979 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1980 | | exprName(value, opts) + |
| 1981 | | "</span>"; |
| 1982 | | payloadHtml += "</a>"; |
| 1983 | | } else { |
| 1984 | 1985 | payloadHtml += exprName(value, opts); |
| 1985 | | } |
| 1986 | 1986 | } else if ("refPath" in value) { |
| 1987 | | if (opts.wantHtml) { |
| 1988 | | payloadHtml += '<a href="">'; |
| 1989 | | payloadHtml += |
| 1990 | | '<span class="tok-kw" style="color:lightblue;">' + |
| 1991 | | exprName(value, opts) + |
| 1992 | | "</span>"; |
| 1993 | | payloadHtml += "</a>"; |
| 1994 | | } else { |
| 1995 | 1987 | payloadHtml += exprName(value, opts); |
| 1996 | | } |
| 1997 | 1988 | } else if ("type" in value) { |
| 1998 | | let name = exprName(value, { |
| 1999 | | ...opts, |
| 2000 | | wantHtml: false, |
| 2001 | | wantLink: false, |
| 2002 | | }); |
| 2003 | | payloadHtml += '<span class="tok-kw">' + name + "</span>"; |
| 1989 | payloadHtml += exprName(value, opts); |
| 1990 | //payloadHtml += '<span class="tok-kw">' + name + "</span>"; |
| 2004 | 1991 | } else if ("binOpIndex" in value) { |
| 2005 | 1992 | payloadHtml += exprName(value, opts); |
| 2006 | 1993 | } else if ("comptimeExpr" in value) { |
| ... | ... | @@ -2405,11 +2392,10 @@ var zigAnalysis; |
| 2405 | 2392 | } |
| 2406 | 2393 | |
| 2407 | 2394 | if (typesList.length !== 0) { |
| 2408 | | window.x = typesList; |
| 2409 | 2395 | resizeDomList( |
| 2410 | 2396 | domListTypes, |
| 2411 | 2397 | typesList.length, |
| 2412 | | '<li><a href="#"></a></li>' |
| 2398 | '<li><a href=""></a></li>' |
| 2413 | 2399 | ); |
| 2414 | 2400 | for (let i = 0; i < typesList.length; i += 1) { |
| 2415 | 2401 | let liDom = domListTypes.children[i]; |
| ... | ... | @@ -2511,8 +2497,7 @@ var zigAnalysis; |
| 2511 | 2497 | } else { |
| 2512 | 2498 | let fieldTypeExpr = container.fields[i]; |
| 2513 | 2499 | html += ": "; |
| 2514 | | let name = exprName(fieldTypeExpr, false, false); |
| 2515 | | html += '<span class="tok-kw">' + name + "</span>"; |
| 2500 | html += exprName(fieldTypeExpr, {wantHtml:true, wantLink:true}); |
| 2516 | 2501 | let tsn = typeShorthandName(fieldTypeExpr); |
| 2517 | 2502 | if (tsn) { |
| 2518 | 2503 | html += "<span> (" + tsn + ")</span>"; |
| ... | ... | @@ -2746,13 +2731,15 @@ var zigAnalysis; |
| 2746 | 2731 | } |
| 2747 | 2732 | } |
| 2748 | 2733 | |
| 2749 | | function findSubDecl(parentType, childName) { |
| 2734 | function findSubDecl(parentTypeOrDecl, childName) { |
| 2735 | let parentType = parentTypeOrDecl; |
| 2750 | 2736 | { |
| 2751 | | // Generic functions |
| 2737 | // Generic functions / resorlving decls |
| 2752 | 2738 | if ("value" in parentType) { |
| 2753 | 2739 | const rv = resolveValue(parentType.value); |
| 2754 | 2740 | if ("type" in rv.expr) { |
| 2755 | 2741 | const t = getType(rv.expr.type); |
| 2742 | parentType = t; |
| 2756 | 2743 | if (t.kind == typeKinds.Fn && t.generic_ret != null) { |
| 2757 | 2744 | let resolvedGenericRet = resolveValue({ expr: t.generic_ret }); |
| 2758 | 2745 | |