| ... | ... | @@ -203,7 +203,7 @@ var zigAnalysis; |
| 203 | 203 | if (!("type" in resolvedExpr)) { |
| 204 | 204 | return null; |
| 205 | 205 | } |
| 206 | | let type = zigAnalysis.types[resolvedExpr.type]; |
| 206 | let type = getType(resolvedExpr.type); |
| 207 | 207 | |
| 208 | 208 | outer: for (let i = 0; i < 10000; i += 1) { |
| 209 | 209 | switch (type.kind) { |
| ... | ... | @@ -212,7 +212,7 @@ var zigAnalysis; |
| 212 | 212 | let child = type.child; |
| 213 | 213 | let resolvedChild = resolveValue(child); |
| 214 | 214 | if ("type" in resolvedChild) { |
| 215 | | type = zigAnalysis.types[resolvedChild.type]; |
| 215 | type = getType(resolvedChild.type); |
| 216 | 216 | continue; |
| 217 | 217 | } else { |
| 218 | 218 | return null; |
| ... | ... | @@ -276,7 +276,7 @@ var zigAnalysis; |
| 276 | 276 | } |
| 277 | 277 | |
| 278 | 278 | if ("declRef" in value.expr) { |
| 279 | | value = zigAnalysis.decls[value.expr.declRef].value; |
| 279 | value = getDecl(value.expr.declRef).value; |
| 280 | 280 | continue; |
| 281 | 281 | } |
| 282 | 282 | |
| ... | ... | @@ -430,7 +430,7 @@ var zigAnalysis; |
| 430 | 430 | curNav.pkgObjs.push(pkg); |
| 431 | 431 | } |
| 432 | 432 | |
| 433 | | let currentType = zigAnalysis.types[pkg.main]; |
| 433 | let currentType = getType(pkg.main); |
| 434 | 434 | curNav.declObjs = [currentType]; |
| 435 | 435 | for (let i = 0; i < curNav.declNames.length; i += 1) { |
| 436 | 436 | let childDecl = findSubDecl(currentType, curNav.declNames[i]); |
| ... | ... | @@ -440,7 +440,7 @@ var zigAnalysis; |
| 440 | 440 | |
| 441 | 441 | let childDeclValue = resolveValue(childDecl.value).expr; |
| 442 | 442 | if ("type" in childDeclValue) { |
| 443 | | const t = zigAnalysis.types[childDeclValue.type]; |
| 443 | const t = getType(childDeclValue.type); |
| 444 | 444 | if (t.kind != typeKinds.Fn) { |
| 445 | 445 | childDecl = t; |
| 446 | 446 | } |
| ... | ... | @@ -478,7 +478,7 @@ var zigAnalysis; |
| 478 | 478 | } |
| 479 | 479 | |
| 480 | 480 | if (lastIsDecl && last.kind === "const") { |
| 481 | | let typeObj = zigAnalysis.types[resolveValue(last.value).expr.type]; |
| 481 | let typeObj = getType(resolveValue(last.value).expr.type); |
| 482 | 482 | if (typeObj && typeObj.kind === typeKinds.Fn) { |
| 483 | 483 | return renderFn(last); |
| 484 | 484 | } |
| ... | ... | @@ -489,8 +489,8 @@ var zigAnalysis; |
| 489 | 489 | } |
| 490 | 490 | |
| 491 | 491 | function renderDocTest(decl) { |
| 492 | | if (!("decltest" in decl)) return; |
| 493 | | const astNode = zigAnalysis.astNodes[decl.decltest]; |
| 492 | if (!decl.decltest) return; |
| 493 | const astNode = getAstNode(decl.decltest); |
| 494 | 494 | domSectDocTests.classList.remove("hidden"); |
| 495 | 495 | domDocTestsCode.innerHTML = astNode.code; |
| 496 | 496 | } |
| ... | ... | @@ -498,7 +498,7 @@ var zigAnalysis; |
| 498 | 498 | function renderUnknownDecl(decl) { |
| 499 | 499 | domDeclNoRef.classList.remove("hidden"); |
| 500 | 500 | |
| 501 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 501 | let docs = getAstNode(decl.src).docs; |
| 502 | 502 | if (docs != null) { |
| 503 | 503 | domTldDocs.innerHTML = markdown(docs); |
| 504 | 504 | } else { |
| ... | ... | @@ -509,18 +509,18 @@ var zigAnalysis; |
| 509 | 509 | } |
| 510 | 510 | |
| 511 | 511 | function typeIsErrSet(typeIndex) { |
| 512 | | let typeObj = zigAnalysis.types[typeIndex]; |
| 512 | let typeObj = getType(typeIndex); |
| 513 | 513 | return typeObj.kind === typeKinds.ErrorSet; |
| 514 | 514 | } |
| 515 | 515 | |
| 516 | 516 | function typeIsStructWithNoFields(typeIndex) { |
| 517 | | let typeObj = zigAnalysis.types[typeIndex]; |
| 517 | let typeObj = getType(typeIndex); |
| 518 | 518 | if (typeObj.kind !== typeKinds.Struct) return false; |
| 519 | 519 | return typeObj.fields.length == 0; |
| 520 | 520 | } |
| 521 | 521 | |
| 522 | 522 | function typeIsGenericFn(typeIndex) { |
| 523 | | let typeObj = zigAnalysis.types[typeIndex]; |
| 523 | let typeObj = getType(typeIndex); |
| 524 | 524 | if (typeObj.kind !== typeKinds.Fn) { |
| 525 | 525 | return false; |
| 526 | 526 | } |
| ... | ... | @@ -532,12 +532,12 @@ var zigAnalysis; |
| 532 | 532 | let last = fnDecl.value.expr.refPath.length - 1; |
| 533 | 533 | let lastExpr = fnDecl.value.expr.refPath[last]; |
| 534 | 534 | console.assert("declRef" in lastExpr); |
| 535 | | fnDecl = zigAnalysis.decls[lastExpr.declRef]; |
| 535 | fnDecl = getDecl(lastExpr.declRef); |
| 536 | 536 | } |
| 537 | 537 | |
| 538 | 538 | let value = resolveValue(fnDecl.value); |
| 539 | 539 | console.assert("type" in value.expr); |
| 540 | | let typeObj = zigAnalysis.types[value.expr.type]; |
| 540 | let typeObj = getType(value.expr.type); |
| 541 | 541 | |
| 542 | 542 | domFnProtoCode.innerHTML = exprName(value.expr, { |
| 543 | 543 | wantHtml: true, |
| ... | ... | @@ -546,7 +546,7 @@ var zigAnalysis; |
| 546 | 546 | }); |
| 547 | 547 | |
| 548 | 548 | let docsSource = null; |
| 549 | | let srcNode = zigAnalysis.astNodes[fnDecl.src]; |
| 549 | let srcNode = getAstNode(fnDecl.src); |
| 550 | 550 | if (srcNode.docs != null) { |
| 551 | 551 | docsSource = srcNode.docs; |
| 552 | 552 | } |
| ... | ... | @@ -557,14 +557,14 @@ var zigAnalysis; |
| 557 | 557 | if ("type" in retExpr) { |
| 558 | 558 | let retIndex = retExpr.type; |
| 559 | 559 | let errSetTypeIndex = null; |
| 560 | | let retType = zigAnalysis.types[retIndex]; |
| 560 | let retType = getType(retIndex); |
| 561 | 561 | if (retType.kind === typeKinds.ErrorSet) { |
| 562 | 562 | errSetTypeIndex = retIndex; |
| 563 | 563 | } else if (retType.kind === typeKinds.ErrorUnion) { |
| 564 | 564 | errSetTypeIndex = retType.err.type; |
| 565 | 565 | } |
| 566 | 566 | if (errSetTypeIndex != null) { |
| 567 | | let errSetType = zigAnalysis.types[errSetTypeIndex]; |
| 567 | let errSetType = getType(errSetTypeIndex); |
| 568 | 568 | renderErrorSet(errSetType); |
| 569 | 569 | } |
| 570 | 570 | } |
| ... | ... | @@ -578,7 +578,7 @@ var zigAnalysis; |
| 578 | 578 | let call = zigAnalysis.calls[resolvedGenericRet.expr.call]; |
| 579 | 579 | let resolvedFunc = resolveValue({ expr: call.func }); |
| 580 | 580 | if (!("type" in resolvedFunc.expr)) return; |
| 581 | | let callee = zigAnalysis.types[resolvedFunc.expr.type]; |
| 581 | let callee = getType(resolvedFunc.expr.type); |
| 582 | 582 | if (!callee.generic_ret) return; |
| 583 | 583 | resolvedGenericRet = resolveValue({ expr: callee.generic_ret }); |
| 584 | 584 | } |
| ... | ... | @@ -591,7 +591,7 @@ var zigAnalysis; |
| 591 | 591 | } |
| 592 | 592 | |
| 593 | 593 | if (!("type" in resolvedGenericRet.expr)) return; |
| 594 | | const genericType = zigAnalysis.types[resolvedGenericRet.expr.type]; |
| 594 | const genericType = getType(resolvedGenericRet.expr.type); |
| 595 | 595 | if (isContainerType(genericType)) { |
| 596 | 596 | renderContainer(genericType); |
| 597 | 597 | } |
| ... | ... | @@ -621,7 +621,7 @@ var zigAnalysis; |
| 621 | 621 | domFnNoExamples.classList.add("hidden"); |
| 622 | 622 | } |
| 623 | 623 | |
| 624 | | let protoSrcNode = zigAnalysis.astNodes[protoSrcIndex]; |
| 624 | let protoSrcNode = getAstNode(protoSrcIndex); |
| 625 | 625 | if ( |
| 626 | 626 | docsSource == null && |
| 627 | 627 | protoSrcNode != null && |
| ... | ... | @@ -639,13 +639,13 @@ var zigAnalysis; |
| 639 | 639 | function renderFnParamDocs(fnDecl, typeObj) { |
| 640 | 640 | let docCount = 0; |
| 641 | 641 | |
| 642 | | let fnNode = zigAnalysis.astNodes[fnDecl.src]; |
| 642 | let fnNode = getAstNode(fnDecl.src); |
| 643 | 643 | let fields = fnNode.fields; |
| 644 | 644 | let isVarArgs = fnNode.varArgs; |
| 645 | 645 | |
| 646 | 646 | for (let i = 0; i < fields.length; i += 1) { |
| 647 | 647 | let field = fields[i]; |
| 648 | | let fieldNode = zigAnalysis.astNodes[field]; |
| 648 | let fieldNode = getAstNode(field); |
| 649 | 649 | if (fieldNode.docs != null) { |
| 650 | 650 | docCount += 1; |
| 651 | 651 | } |
| ... | ... | @@ -659,7 +659,7 @@ var zigAnalysis; |
| 659 | 659 | |
| 660 | 660 | for (let i = 0; i < fields.length; i += 1) { |
| 661 | 661 | let field = fields[i]; |
| 662 | | let fieldNode = zigAnalysis.astNodes[field]; |
| 662 | let fieldNode = getAstNode(field); |
| 663 | 663 | let docs = fieldNode.docs; |
| 664 | 664 | if (fieldNode.docs == null) { |
| 665 | 665 | continue; |
| ... | ... | @@ -967,17 +967,17 @@ var zigAnalysis; |
| 967 | 967 | } |
| 968 | 968 | case "switchOp": { |
| 969 | 969 | let condExpr = zigAnalysis.exprs[expr.switchOp.cond_index]; |
| 970 | | let ast = zigAnalysis.astNodes[expr.switchOp.ast]; |
| 970 | let ast = getAstNode(expr.switchOp.src); |
| 971 | 971 | let file_name = expr.switchOp.file_name; |
| 972 | 972 | let outer_decl_index = expr.switchOp.outer_decl; |
| 973 | | let outer_decl = zigAnalysis.types[outer_decl_index]; |
| 973 | let outer_decl = getType(outer_decl_index); |
| 974 | 974 | let line = 0; |
| 975 | 975 | // console.log(expr.switchOp) |
| 976 | 976 | // console.log(outer_decl) |
| 977 | 977 | while (outer_decl_index !== 0 && outer_decl.line_number > 0) { |
| 978 | 978 | line += outer_decl.line_number; |
| 979 | 979 | outer_decl_index = outer_decl.outer_decl; |
| 980 | | outer_decl = zigAnalysis.types[outer_decl_index]; |
| 980 | outer_decl = getType(outer_decl_index); |
| 981 | 981 | // console.log(outer_decl) |
| 982 | 982 | } |
| 983 | 983 | line += ast.line + 1; |
| ... | ... | @@ -1028,8 +1028,8 @@ var zigAnalysis; |
| 1028 | 1028 | case "fieldRef": { |
| 1029 | 1029 | const enumObj = exprName({ type: expr.fieldRef.type }, opts); |
| 1030 | 1030 | const field = |
| 1031 | | zigAnalysis.astNodes[enumObj.ast].fields[expr.fieldRef.index]; |
| 1032 | | const name = zigAnalysis.astNodes[field].name; |
| 1031 | getAstNode(enumObj.src).fields[expr.fieldRef.index]; |
| 1032 | const name = getAstNode(field).name; |
| 1033 | 1033 | return name; |
| 1034 | 1034 | } |
| 1035 | 1035 | case "enumToInt": { |
| ... | ... | @@ -1452,13 +1452,13 @@ var zigAnalysis; |
| 1452 | 1452 | return print_lhs + " " + operator + " " + print_rhs; |
| 1453 | 1453 | } |
| 1454 | 1454 | case "errorSets": { |
| 1455 | | const errUnionObj = zigAnalysis.types[expr.errorSets]; |
| 1455 | const errUnionObj = getType(expr.errorSets); |
| 1456 | 1456 | let lhs = exprName(errUnionObj.lhs, opts); |
| 1457 | 1457 | let rhs = exprName(errUnionObj.rhs, opts); |
| 1458 | 1458 | return lhs + " || " + rhs; |
| 1459 | 1459 | } |
| 1460 | 1460 | case "errorUnion": { |
| 1461 | | const errUnionObj = zigAnalysis.types[expr.errorUnion]; |
| 1461 | const errUnionObj = getType(expr.errorUnion); |
| 1462 | 1462 | let lhs = exprName(errUnionObj.lhs, opts); |
| 1463 | 1463 | let rhs = exprName(errUnionObj.rhs, opts); |
| 1464 | 1464 | return lhs + "!" + rhs; |
| ... | ... | @@ -1574,7 +1574,7 @@ var zigAnalysis; |
| 1574 | 1574 | return exprName(exprArg, opts); |
| 1575 | 1575 | } |
| 1576 | 1576 | case "declRef": { |
| 1577 | | return zigAnalysis.decls[expr.declRef].name; |
| 1577 | return getDecl(expr.declRef).name; |
| 1578 | 1578 | } |
| 1579 | 1579 | case "refPath": { |
| 1580 | 1580 | return expr.refPath.map((x) => exprName(x, opts)).join("."); |
| ... | ... | @@ -1611,7 +1611,7 @@ var zigAnalysis; |
| 1611 | 1611 | let name = ""; |
| 1612 | 1612 | |
| 1613 | 1613 | let typeObj = expr.type; |
| 1614 | | if (typeof typeObj === "number") typeObj = zigAnalysis.types[typeObj]; |
| 1614 | if (typeof typeObj === "number") typeObj = getType(typeObj); |
| 1615 | 1615 | switch (typeObj.kind) { |
| 1616 | 1616 | default: |
| 1617 | 1617 | throw "TODO"; |
| ... | ... | @@ -1865,7 +1865,7 @@ var zigAnalysis; |
| 1865 | 1865 | if (fnObj.params) { |
| 1866 | 1866 | let fields = null; |
| 1867 | 1867 | let isVarArgs = false; |
| 1868 | | let fnNode = zigAnalysis.astNodes[fnObj.src]; |
| 1868 | let fnNode = getAstNode(fnObj.src); |
| 1869 | 1869 | fields = fnNode.fields; |
| 1870 | 1870 | isVarArgs = fnNode.varArgs; |
| 1871 | 1871 | |
| ... | ... | @@ -1880,7 +1880,7 @@ var zigAnalysis; |
| 1880 | 1880 | let paramValue = resolveValue({ expr: value }); |
| 1881 | 1881 | |
| 1882 | 1882 | if (fields != null) { |
| 1883 | | let paramNode = zigAnalysis.astNodes[fields[i]]; |
| 1883 | let paramNode = getAstNode(fields[i]); |
| 1884 | 1884 | |
| 1885 | 1885 | if (paramNode.varArgs) { |
| 1886 | 1886 | payloadHtml += "..."; |
| ... | ... | @@ -2046,7 +2046,7 @@ var zigAnalysis; |
| 2046 | 2046 | function shouldSkipParamName(typeRef, paramName) { |
| 2047 | 2047 | let resolvedTypeRef = resolveValue({ expr: typeRef }); |
| 2048 | 2048 | if ("type" in resolvedTypeRef) { |
| 2049 | | let typeObj = zigAnalysis.types[resolvedTypeRef.type]; |
| 2049 | let typeObj = getType(resolvedTypeRef.type); |
| 2050 | 2050 | if (typeObj.kind === typeKinds.Pointer) { |
| 2051 | 2051 | let ptrObj = typeObj; |
| 2052 | 2052 | if (getPtrSize(ptrObj) === pointerSizeEnum.One) { |
| ... | ... | @@ -2067,7 +2067,7 @@ var zigAnalysis; |
| 2067 | 2067 | if ( |
| 2068 | 2068 | rootIsStd && |
| 2069 | 2069 | typeObj === |
| 2070 | | zigAnalysis.types[zigAnalysis.packages[zigAnalysis.rootPkg].main] |
| 2070 | getType(zigAnalysis.packages[zigAnalysis.rootPkg].main) |
| 2071 | 2071 | ) { |
| 2072 | 2072 | name = "std"; |
| 2073 | 2073 | } else { |
| ... | ... | @@ -2189,7 +2189,7 @@ var zigAnalysis; |
| 2189 | 2189 | |
| 2190 | 2190 | if (resolvedValue.expr.fieldRef) { |
| 2191 | 2191 | const declRef = decl.value.expr.refPath[0].declRef; |
| 2192 | | const type = zigAnalysis.decls[declRef]; |
| 2192 | const type = getDecl(declRef); |
| 2193 | 2193 | domFnProtoCode.innerHTML = |
| 2194 | 2194 | '<span class="tok-kw">const</span> ' + |
| 2195 | 2195 | escapeHtml(decl.name) + |
| ... | ... | @@ -2229,7 +2229,7 @@ var zigAnalysis; |
| 2229 | 2229 | ";"; |
| 2230 | 2230 | } |
| 2231 | 2231 | |
| 2232 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2232 | let docs = getAstNode(decl.src).docs; |
| 2233 | 2233 | if (docs != null) { |
| 2234 | 2234 | domTldDocs.innerHTML = markdown(docs); |
| 2235 | 2235 | domTldDocs.classList.remove("hidden"); |
| ... | ... | @@ -2246,7 +2246,7 @@ var zigAnalysis; |
| 2246 | 2246 | ": " + |
| 2247 | 2247 | typeValueName(declTypeRef, true, true); |
| 2248 | 2248 | |
| 2249 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2249 | let docs = getAstNode(decl.src).docs; |
| 2250 | 2250 | if (docs != null) { |
| 2251 | 2251 | domTldDocs.innerHTML = markdown(docs); |
| 2252 | 2252 | domTldDocs.classList.remove("hidden"); |
| ... | ... | @@ -2266,7 +2266,7 @@ var zigAnalysis; |
| 2266 | 2266 | testsList |
| 2267 | 2267 | ) { |
| 2268 | 2268 | for (let i = 0; i < decls.length; i += 1) { |
| 2269 | | let decl = zigAnalysis.decls[decls[i]]; |
| 2269 | let decl = getDecl(decls[i]); |
| 2270 | 2270 | let declValue = resolveValue(decl.value); |
| 2271 | 2271 | |
| 2272 | 2272 | if (decl.isTest) { |
| ... | ... | @@ -2282,7 +2282,7 @@ var zigAnalysis; |
| 2282 | 2282 | if (decl.kind === "const") { |
| 2283 | 2283 | if ("type" in declValue.expr) { |
| 2284 | 2284 | // We have the actual type expression at hand. |
| 2285 | | const typeExpr = zigAnalysis.types[declValue.expr.type]; |
| 2285 | const typeExpr = getType(declValue.expr.type); |
| 2286 | 2286 | if (typeExpr.kind == typeKinds.Fn) { |
| 2287 | 2287 | const funcRetExpr = resolveValue({ |
| 2288 | 2288 | expr: typeExpr.ret, |
| ... | ... | @@ -2310,7 +2310,7 @@ var zigAnalysis; |
| 2310 | 2310 | typesList.push(decl); |
| 2311 | 2311 | } |
| 2312 | 2312 | } |
| 2313 | | } else if ("typeRef" in declValue) { |
| 2313 | } else if (declValue.typeRef) { |
| 2314 | 2314 | if ("type" in declValue.typeRef && declValue.typeRef == typeTypeId) { |
| 2315 | 2315 | // We don't know what the type expression is, but we know it's a type. |
| 2316 | 2316 | typesList.push(decl); |
| ... | ... | @@ -2324,7 +2324,7 @@ var zigAnalysis; |
| 2324 | 2324 | } |
| 2325 | 2325 | } |
| 2326 | 2326 | function renderSourceFileLink(decl) { |
| 2327 | | let srcNode = zigAnalysis.astNodes[decl.src]; |
| 2327 | let srcNode = getAstNode(decl.src); |
| 2328 | 2328 | |
| 2329 | 2329 | return "<a style=\"float: right;\" href=\"" + |
| 2330 | 2330 | sourceFileUrlTemplate.replace("{{file}}", |
| ... | ... | @@ -2377,7 +2377,7 @@ var zigAnalysis; |
| 2377 | 2377 | testsList.sort(byNameProperty); |
| 2378 | 2378 | |
| 2379 | 2379 | if (container.src != null) { |
| 2380 | | let docs = zigAnalysis.astNodes[container.src].docs; |
| 2380 | let docs = getAstNode(container.src).docs; |
| 2381 | 2381 | if (docs != null) { |
| 2382 | 2382 | domTldDocs.innerHTML = markdown(docs); |
| 2383 | 2383 | domTldDocs.classList.remove("hidden"); |
| ... | ... | @@ -2457,7 +2457,7 @@ var zigAnalysis; |
| 2457 | 2457 | }); |
| 2458 | 2458 | tdFnSrc.innerHTML = renderSourceFileLink(decl); |
| 2459 | 2459 | |
| 2460 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2460 | let docs = getAstNode(decl.src).docs; |
| 2461 | 2461 | if (docs != null) { |
| 2462 | 2462 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 2463 | 2463 | } else { |
| ... | ... | @@ -2467,12 +2467,12 @@ var zigAnalysis; |
| 2467 | 2467 | domSectFns.classList.remove("hidden"); |
| 2468 | 2468 | } |
| 2469 | 2469 | |
| 2470 | | let containerNode = zigAnalysis.astNodes[container.src]; |
| 2470 | let containerNode = getAstNode(container.src); |
| 2471 | 2471 | if (containerNode.fields && containerNode.fields.length > 0) { |
| 2472 | 2472 | resizeDomList(domListFields, containerNode.fields.length, "<div></div>"); |
| 2473 | 2473 | |
| 2474 | 2474 | for (let i = 0; i < containerNode.fields.length; i += 1) { |
| 2475 | | let fieldNode = zigAnalysis.astNodes[containerNode.fields[i]]; |
| 2475 | let fieldNode = getAstNode(containerNode.fields[i]); |
| 2476 | 2476 | let divDom = domListFields.children[i]; |
| 2477 | 2477 | let fieldName = fieldNode.name; |
| 2478 | 2478 | let docs = fieldNode.docs; |
| ... | ... | @@ -2528,7 +2528,7 @@ var zigAnalysis; |
| 2528 | 2528 | |
| 2529 | 2529 | tdType.innerHTML = typeValueName(typeOfDecl(decl), true, true); |
| 2530 | 2530 | |
| 2531 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2531 | let docs = getAstNode(decl.src).docs; |
| 2532 | 2532 | if (docs != null) { |
| 2533 | 2533 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 2534 | 2534 | } else { |
| ... | ... | @@ -2561,7 +2561,7 @@ var zigAnalysis; |
| 2561 | 2561 | wantLink: true, |
| 2562 | 2562 | }); |
| 2563 | 2563 | |
| 2564 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2564 | let docs = getAstNode(decl.src).docs; |
| 2565 | 2565 | if (docs != null) { |
| 2566 | 2566 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 2567 | 2567 | } else { |
| ... | ... | @@ -2594,7 +2594,7 @@ var zigAnalysis; |
| 2594 | 2594 | wantLink: true, |
| 2595 | 2595 | }); |
| 2596 | 2596 | |
| 2597 | | let docs = zigAnalysis.astNodes[decl.src].docs; |
| 2597 | let docs = getAstNode(decl.src).docs; |
| 2598 | 2598 | if (docs != null) { |
| 2599 | 2599 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 2600 | 2600 | } else { |
| ... | ... | @@ -2668,7 +2668,7 @@ var zigAnalysis; |
| 2668 | 2668 | |
| 2669 | 2669 | function findTypeTypeId() { |
| 2670 | 2670 | for (let i = 0; i < zigAnalysis.types.length; i += 1) { |
| 2671 | | if (zigAnalysis.types[i].kind == typeKinds.Type) { |
| 2671 | if (getType(i).kind == typeKinds.Type) { |
| 2672 | 2672 | return i; |
| 2673 | 2673 | } |
| 2674 | 2674 | } |
| ... | ... | @@ -2732,11 +2732,11 @@ var zigAnalysis; |
| 2732 | 2732 | if ("value" in parentType) { |
| 2733 | 2733 | const rv = resolveValue(parentType.value); |
| 2734 | 2734 | if ("type" in rv.expr) { |
| 2735 | | const t = zigAnalysis.types[rv.expr.type]; |
| 2735 | const t = getType(rv.expr.type); |
| 2736 | 2736 | if (t.kind == typeKinds.Fn && t.generic_ret != null) { |
| 2737 | 2737 | const rgr = resolveValue({ expr: t.generic_ret }); |
| 2738 | 2738 | if ("type" in rgr.expr) { |
| 2739 | | parentType = zigAnalysis.types[rgr.expr.type]; |
| 2739 | parentType = getType(rgr.expr.type); |
| 2740 | 2740 | } |
| 2741 | 2741 | } |
| 2742 | 2742 | } |
| ... | ... | @@ -2746,7 +2746,7 @@ var zigAnalysis; |
| 2746 | 2746 | if (!parentType.pubDecls) return null; |
| 2747 | 2747 | for (let i = 0; i < parentType.pubDecls.length; i += 1) { |
| 2748 | 2748 | let declIndex = parentType.pubDecls[i]; |
| 2749 | | let childDecl = zigAnalysis.decls[declIndex]; |
| 2749 | let childDecl = getDecl(declIndex); |
| 2750 | 2750 | if (childDecl.name === childName) { |
| 2751 | 2751 | return childDecl; |
| 2752 | 2752 | } |
| ... | ... | @@ -2754,7 +2754,7 @@ var zigAnalysis; |
| 2754 | 2754 | if (!parentType.privDecls) return null; |
| 2755 | 2755 | for (let i = 0; i < parentType.privDecls.length; i += 1) { |
| 2756 | 2756 | let declIndex = parentType.privDecls[i]; |
| 2757 | | let childDecl = zigAnalysis.decls[declIndex]; |
| 2757 | let childDecl = getDecl(declIndex); |
| 2758 | 2758 | if (childDecl.name === childName) { |
| 2759 | 2759 | return childDecl; |
| 2760 | 2760 | } |
| ... | ... | @@ -2805,7 +2805,7 @@ var zigAnalysis; |
| 2805 | 2805 | let stack = [ |
| 2806 | 2806 | { |
| 2807 | 2807 | declNames: [], |
| 2808 | | type: zigAnalysis.types[pkg.main], |
| 2808 | type: getType(pkg.main), |
| 2809 | 2809 | }, |
| 2810 | 2810 | ]; |
| 2811 | 2811 | while (stack.length !== 0) { |
| ... | ... | @@ -2819,7 +2819,7 @@ var zigAnalysis; |
| 2819 | 2819 | let mainDeclIndex = t.pubDecls[declI]; |
| 2820 | 2820 | if (list[mainDeclIndex] != null) continue; |
| 2821 | 2821 | |
| 2822 | | let decl = zigAnalysis.decls[mainDeclIndex]; |
| 2822 | let decl = getDecl(mainDeclIndex); |
| 2823 | 2823 | let declVal = resolveValue(decl.value); |
| 2824 | 2824 | let declNames = item.declNames.concat([decl.name]); |
| 2825 | 2825 | list[mainDeclIndex] = { |
| ... | ... | @@ -2827,7 +2827,7 @@ var zigAnalysis; |
| 2827 | 2827 | declNames: declNames, |
| 2828 | 2828 | }; |
| 2829 | 2829 | if ("type" in declVal.expr) { |
| 2830 | | let value = zigAnalysis.types[declVal.expr.type]; |
| 2830 | let value = getType(declVal.expr.type); |
| 2831 | 2831 | if (declCanRepresentTypeKind(value.kind)) { |
| 2832 | 2832 | canonTypeDecls[declVal.type] = mainDeclIndex; |
| 2833 | 2833 | } |
| ... | ... | @@ -2843,7 +2843,7 @@ var zigAnalysis; |
| 2843 | 2843 | if (value.kind == typeKinds.Fn && value.generic_ret != null) { |
| 2844 | 2844 | let resolvedVal = resolveValue({ expr: value.generic_ret }); |
| 2845 | 2845 | if ("type" in resolvedVal.expr) { |
| 2846 | | let generic_type = zigAnalysis.types[resolvedVal.expr.type]; |
| 2846 | let generic_type = getType(resolvedVal.expr.type); |
| 2847 | 2847 | if (isContainerType(generic_type)) { |
| 2848 | 2848 | stack.push({ |
| 2849 | 2849 | declNames: declNames, |
| ... | ... | @@ -3394,11 +3394,11 @@ var zigAnalysis; |
| 3394 | 3394 | let canonPath = getCanonDeclPath(declIndex); |
| 3395 | 3395 | if (canonPath == null) continue; |
| 3396 | 3396 | |
| 3397 | | let decl = zigAnalysis.decls[declIndex]; |
| 3397 | let decl = getDecl(declIndex); |
| 3398 | 3398 | let lastPkgName = canonPath.pkgNames[canonPath.pkgNames.length - 1]; |
| 3399 | 3399 | let fullPathSearchText = |
| 3400 | 3400 | lastPkgName + "." + canonPath.declNames.join("."); |
| 3401 | | let astNode = zigAnalysis.astNodes[decl.src]; |
| 3401 | let astNode = getAstNode(decl.src); |
| 3402 | 3402 | let fileAndDocs = ""; //zigAnalysis.files[astNode.file]; |
| 3403 | 3403 | // TODO: understand what this piece of code is trying to achieve |
| 3404 | 3404 | // also right now `files` are expressed as a hashmap. |
| ... | ... | @@ -3513,4 +3513,169 @@ var zigAnalysis; |
| 3513 | 3513 | function byNameProperty(a, b) { |
| 3514 | 3514 | return operatorCompare(a.name, b.name); |
| 3515 | 3515 | } |
| 3516 | |
| 3517 | |
| 3518 | function getDecl(idx) { |
| 3519 | const decl = zigAnalysis.decls[idx]; |
| 3520 | return { |
| 3521 | name: decl[0], |
| 3522 | kind: decl[1], |
| 3523 | isTest: decl[2], |
| 3524 | src: decl[3], |
| 3525 | value: decl[4], |
| 3526 | decltest: decl[5], |
| 3527 | }; |
| 3528 | } |
| 3529 | |
| 3530 | function getAstNode(idx) { |
| 3531 | const ast = zigAnalysis.astNodes[idx]; |
| 3532 | return { |
| 3533 | file: ast[0], |
| 3534 | line: ast[1], |
| 3535 | col: ast[2], |
| 3536 | name: ast[3], |
| 3537 | code: ast[4], |
| 3538 | docs: ast[5], |
| 3539 | fields: ast[6], |
| 3540 | comptime: ast[7], |
| 3541 | }; |
| 3542 | } |
| 3543 | |
| 3544 | function getType(idx){ |
| 3545 | const ty = zigAnalysis.types[idx]; |
| 3546 | switch(ty[0]) { |
| 3547 | default: |
| 3548 | throw "unhandled type kind!"; |
| 3549 | case 0: // Unanalyzed |
| 3550 | throw "unanalyzed type!"; |
| 3551 | case 1: // Type |
| 3552 | case 2: // Void |
| 3553 | case 3: // Bool |
| 3554 | case 4: // NoReturn |
| 3555 | case 5: // Int |
| 3556 | case 6: // Float |
| 3557 | return { kind: ty[0], name: ty[1]}; |
| 3558 | case 7: // Pointer |
| 3559 | return { |
| 3560 | kind: ty[0], |
| 3561 | size: ty[1], |
| 3562 | child: ty[2], |
| 3563 | sentinel: ty[3], |
| 3564 | align: ty[4], |
| 3565 | address_space: ty[5], |
| 3566 | bit_start: ty[6], |
| 3567 | host_size: ty[7], |
| 3568 | is_ref: ty[8], |
| 3569 | is_allowzero: ty[9], |
| 3570 | is_mutable: ty[10], |
| 3571 | is_volatile: ty[11], |
| 3572 | has_sentinel: ty[12], |
| 3573 | has_align: ty[13], |
| 3574 | has_addrspace: ty[14], |
| 3575 | has_bit_range: ty[15], |
| 3576 | }; |
| 3577 | case 8: // Array |
| 3578 | return { |
| 3579 | kind: ty[0], |
| 3580 | len: ty[1], |
| 3581 | child: ty[2], |
| 3582 | sentinel: ty[3], |
| 3583 | }; |
| 3584 | case 9: // Struct |
| 3585 | return { |
| 3586 | kind: ty[0], |
| 3587 | name: ty[1], |
| 3588 | src: ty[2], |
| 3589 | privDecls: ty[3], |
| 3590 | pubDecls: ty[4], |
| 3591 | fields: ty[5], |
| 3592 | line_number: ty[6], |
| 3593 | outer_decl: ty[7], |
| 3594 | }; |
| 3595 | case 10: // ComptimeExpr |
| 3596 | case 11: // ComptimeFloat |
| 3597 | case 12: // ComptimeInt |
| 3598 | case 13: // Undefined |
| 3599 | case 14: // Null |
| 3600 | return { kind: ty[0], name: ty[1] }; |
| 3601 | case 15: // Optional |
| 3602 | return { |
| 3603 | kind: ty[0], |
| 3604 | name: ty[1], |
| 3605 | child: ty[2], |
| 3606 | }; |
| 3607 | case 16: // ErrorUnion |
| 3608 | return { |
| 3609 | kind: ty[0], |
| 3610 | lhs: ty[1], |
| 3611 | rhs: ty[2], |
| 3612 | }; |
| 3613 | case 17: // InferredErrorUnion |
| 3614 | return { |
| 3615 | kind: ty[0], |
| 3616 | payload: ty[1], |
| 3617 | }; |
| 3618 | case 18: // ErrorSet |
| 3619 | return { |
| 3620 | kind: ty[0], |
| 3621 | name: ty[1], |
| 3622 | fields: ty[2], |
| 3623 | }; |
| 3624 | case 19: // Enum |
| 3625 | return { |
| 3626 | kind: ty[0], |
| 3627 | name: ty[1], |
| 3628 | src: ty[2], |
| 3629 | privDecls: ty[3], |
| 3630 | pubDecls: ty[4], |
| 3631 | }; |
| 3632 | case 20: // Union |
| 3633 | return { |
| 3634 | kind: ty[0], |
| 3635 | name: ty[1], |
| 3636 | src: ty[2], |
| 3637 | privDecls: ty[3], |
| 3638 | pubDecls: ty[4], |
| 3639 | fields: ty[5], |
| 3640 | }; |
| 3641 | case 21: // Fn |
| 3642 | return { |
| 3643 | kind: ty[0], |
| 3644 | name: ty[1], |
| 3645 | src: ty[2], |
| 3646 | ret: ty[3], |
| 3647 | generic_ret: ty[4], |
| 3648 | params: ty[5], |
| 3649 | lib_name: ty[6], |
| 3650 | is_var_args: ty[7], |
| 3651 | is_inferred_error: ty[8], |
| 3652 | has_lib_name: ty[9], |
| 3653 | has_cc: ty[10], |
| 3654 | cc: ty[11], |
| 3655 | align: ty[12], |
| 3656 | has_align: ty[13], |
| 3657 | is_test: ty[14], |
| 3658 | is_extern: ty[15], |
| 3659 | }; |
| 3660 | case 22: // BoundFn |
| 3661 | return { kind: ty[0], name: ty[1] }; |
| 3662 | case 23: // Opaque |
| 3663 | return { |
| 3664 | kind: ty[0], |
| 3665 | name: ty[1], |
| 3666 | src: ty[2], |
| 3667 | privDecls: ty[3], |
| 3668 | pubDecls: ty[4], |
| 3669 | }; |
| 3670 | case 24: // Frame |
| 3671 | case 25: // AnyFrame |
| 3672 | case 26: // Vector |
| 3673 | case 27: // EnumLiteral |
| 3674 | return { kind: ty[0], name: ty[1] }; |
| 3675 | } |
| 3676 | } |
| 3677 | |
| 3516 | 3678 | })(); |
| 3679 | |
| 3680 | |
| 3681 | |