| ... | ... | @@ -187,7 +187,7 @@ |
| 187 | 187 | i += 1; |
| 188 | 188 | console.assert(isDecl(decl)); |
| 189 | 189 | if ("type" in decl.value) { |
| 190 | | return typeTypeId; |
| 190 | return { type: typeTypeId }; |
| 191 | 191 | } |
| 192 | 192 | |
| 193 | 193 | if ("declPath" in decl.value) { |
| ... | ... | @@ -232,6 +232,10 @@ |
| 232 | 232 | return fn_type.ret; |
| 233 | 233 | } |
| 234 | 234 | |
| 235 | if ("void" in decl.value) { |
| 236 | return { type: typeTypeId }; |
| 237 | } |
| 238 | |
| 235 | 239 | console.log("TODO: handle in `typeOfDecl` more cases: ", decl); |
| 236 | 240 | console.assert(false); |
| 237 | 241 | throw {}; |
| ... | ... | @@ -472,22 +476,9 @@ |
| 472 | 476 | var html = '<pre>' + escapeHtml(fieldNode.name) + ": "; |
| 473 | 477 | if (isVarArgs && i === typeObj.params.length - 1) { |
| 474 | 478 | html += '...'; |
| 475 | | } else if ("declRef" in value) { |
| 476 | | var decl = zigAnalysis.decls[value.declRef]; |
| 477 | | var val = resolveValue(decl.value); |
| 478 | | var valType = zigAnalysis.types[argTypeIndex]; |
| 479 | | |
| 480 | | var valTypeName = typeShorthandName(valType); |
| 481 | | |
| 482 | | html += '<a href="'+navLinkDecl(decl.name)+'">'; |
| 483 | | html += '<span class="tok-kw" style="color:lightblue;">' + escapeHtml(decl.name) + '</span>'; |
| 484 | | html += '</a>'; |
| 485 | | html += ' ('+ valTypeName +')'; |
| 486 | | } else if ("type" in value) { |
| 487 | | var name = zigAnalysis.types[value.type].name; |
| 488 | | html += '<span class="tok-kw">' + escapeHtml(name) + '</span>'; |
| 489 | 479 | } else { |
| 490 | | html += '<span class="tok-kw">var</span>'; |
| 480 | var name = typeValueName(value); |
| 481 | html += '<span class="tok-kw">' + name + '</span>'; |
| 491 | 482 | } |
| 492 | 483 | |
| 493 | 484 | html += ',</pre>'; |
| ... | ... | @@ -657,24 +648,52 @@ |
| 657 | 648 | } |
| 658 | 649 | |
| 659 | 650 | function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| 660 | | if ("declPath" in typeValue) { |
| 661 | | if (typeValue.hasCte) { |
| 662 | | // TODO: find the cte, print it nicely |
| 663 | | if (wantLink) { |
| 664 | | return '<a href="">[ComptimeExpr]</a>'; |
| 665 | | } else { |
| 666 | | return "[ComptimeExpr]"; |
| 667 | | } |
| 668 | | } |
| 669 | | var declIndex = typeValue.declPath[0]; |
| 670 | | var name = zigAnalysis.decls[declIndex].name; |
| 671 | | var declPath = getCanonDeclPath(declIndex); |
| 672 | | if (wantLink) { |
| 673 | | var nl = navLink(declPath.pkgNames, declPath.declNames); |
| 674 | | return '<a href="' + nl + '">' + name + '</a>'; |
| 675 | | } else { |
| 676 | | return name; |
| 651 | |
| 652 | if ("int" in typeValue) { |
| 653 | return typeValue.int.value; |
| 654 | } |
| 655 | if ("call" in typeValue) { |
| 656 | var result = ""; |
| 657 | var call = zigAnalysis.calls[typeValue.call]; |
| 658 | var functionName = typeValueName(call.func); |
| 659 | result += functionName + "("; |
| 660 | for (var j = 0; j < call.args.length; j += 1) { |
| 661 | result += typeValueName(call.args[j]); |
| 662 | if (j != call.args.length -1) result += ","; |
| 677 | 663 | } |
| 664 | |
| 665 | return result + ")"; |
| 666 | } |
| 667 | if ("comptimeExpr" in typeValue) { |
| 668 | return "[ComptimeExpr]"; |
| 669 | } |
| 670 | if ("declPath" in typeValue) { |
| 671 | var result = ""; |
| 672 | for (var j = typeValue.declPath.length - 1; j >= 0; j--) { |
| 673 | var decl = zigAnalysis.decls[typeValue.declPath[j]]; |
| 674 | |
| 675 | // TODO: handle nested decl paths properly! |
| 676 | if (typeValue.hasCte) { |
| 677 | if (wantHtml) |
| 678 | result += "<a href=\"\">[ComptimeExpr]</a>"; |
| 679 | else |
| 680 | result += "[ComptimeExpr]"; |
| 681 | break; |
| 682 | } |
| 683 | var name = escapeHtml(decl.name); |
| 684 | if (wantHtml) { |
| 685 | result += '<a href="'+navLinkDecl(decl.name)+'">'; |
| 686 | result += '<span class="tok-kw" style="color:lightblue;">' + |
| 687 | name + '</span>'; |
| 688 | result += '</a>'; |
| 689 | } else { |
| 690 | result += name; |
| 691 | } |
| 692 | |
| 693 | if (j != 0) result += "."; |
| 694 | } |
| 695 | |
| 696 | return result; |
| 678 | 697 | } |
| 679 | 698 | |
| 680 | 699 | console.assert("type" in typeValue) |
| ... | ... | @@ -760,10 +779,11 @@ |
| 760 | 779 | switch (typeObj.kind) { |
| 761 | 780 | case typeKinds.Array: |
| 762 | 781 | var name = "["; |
| 782 | var lenName = typeValueName(typeObj.len, wantHtml); |
| 763 | 783 | if (wantHtml) { |
| 764 | | name += '<span class="tok-number">' + typeObj.len + '</span>'; |
| 784 | name += '<span class="tok-number">' + lenName + '</span>'; |
| 765 | 785 | } else { |
| 766 | | name += typeObj.len; |
| 786 | name += lenName; |
| 767 | 787 | } |
| 768 | 788 | name += "]"; |
| 769 | 789 | name += typeValueName(typeObj.child, wantHtml, wantSubLink, null); |
| ... | ... | @@ -986,12 +1006,16 @@ |
| 986 | 1006 | } else { |
| 987 | 1007 | var decl = zigAnalysis.decls[value.declPath[0]]; |
| 988 | 1008 | var val = resolveValue(decl.value); |
| 989 | | var valType = zigAnalysis.types[argTypeIndex]; |
| 990 | | |
| 991 | | var valTypeName = typeShorthandName(valType); |
| 992 | | payloadHtml += '<a href="'+navLinkDecl(decl.name)+'">'; |
| 993 | | payloadHtml += '<span class="tok-kw" style="color:lightblue;">' + escapeHtml(decl.name) + '</span>'; |
| 994 | | payloadHtml += '</a>'; |
| 1009 | if ("comptimeExpr" in val) { |
| 1010 | payloadHtml += "[ComptimeExpr]"; |
| 1011 | } else { |
| 1012 | console.assert("type" in val); |
| 1013 | var valType = zigAnalysis.types[val.type]; |
| 1014 | var valTypeName = typeShorthandName(valType); |
| 1015 | payloadHtml += '<a href="'+navLinkDecl(decl.name)+'">'; |
| 1016 | payloadHtml += '<span class="tok-kw" style="color:lightblue;">' + escapeHtml(decl.name) + '</span>'; |
| 1017 | payloadHtml += '</a>'; |
| 1018 | } |
| 995 | 1019 | } |
| 996 | 1020 | } else if ("type" in value) { |
| 997 | 1021 | var name = typeValueName(value, false); |
| ... | ... | @@ -1258,6 +1282,43 @@ |
| 1258 | 1282 | } |
| 1259 | 1283 | } |
| 1260 | 1284 | } |
| 1285 | |
| 1286 | declLen = container.privDecls ? container.privDecls.length : 0; |
| 1287 | for (var i = 0; i < declLen; i += 1) { |
| 1288 | var decl = zigAnalysis.decls[container.privDecls[i]]; |
| 1289 | var declValue = resolveValue(decl.value); |
| 1290 | |
| 1291 | if (decl.kind === 'var') { |
| 1292 | varsList.push(decl); |
| 1293 | continue; |
| 1294 | } |
| 1295 | |
| 1296 | if (decl.kind === 'const') { |
| 1297 | if (!("type" in declValue)){ |
| 1298 | valsList.push(decl); |
| 1299 | } else { |
| 1300 | var value = zigAnalysis.types[declValue.type]; |
| 1301 | var kind = value.kind; |
| 1302 | if (kind === typeKinds.Fn) { |
| 1303 | // TODO: handle CTE return types when we know their type. |
| 1304 | const resVal = resolveValue(value.ret); |
| 1305 | if ("type" in resVal && resVal.type == typeTypeId) { |
| 1306 | typesList.push(decl); |
| 1307 | } else { |
| 1308 | fnsList.push(decl); |
| 1309 | } |
| 1310 | |
| 1311 | } else if (typeIsErrSet(declValue.type)) { |
| 1312 | errSetsList.push(decl); |
| 1313 | } else if (typeIsStructWithNoFields(declValue.type)) { |
| 1314 | namespacesList.push(decl); |
| 1315 | } else { |
| 1316 | typesList.push(decl); |
| 1317 | } |
| 1318 | } |
| 1319 | } |
| 1320 | } |
| 1321 | |
| 1261 | 1322 | typesList.sort(byNameProperty); |
| 1262 | 1323 | namespacesList.sort(byNameProperty); |
| 1263 | 1324 | errSetsList.sort(byNameProperty); |
| ... | ... | @@ -1349,35 +1410,9 @@ |
| 1349 | 1410 | html += ": "; |
| 1350 | 1411 | if (field.failure === true) { |
| 1351 | 1412 | html += '<span class="tok-kw" style="color:red;">#FAILURE#</span>'; |
| 1352 | | } else if ("declPath" in field) { |
| 1353 | | for (var j = field.declPath.length - 1; j >= 0; j--) { |
| 1354 | | var decl = zigAnalysis.decls[field.declPath[j]]; |
| 1355 | | |
| 1356 | | // TODO: handle nested decl paths properly! |
| 1357 | | if (field.hasCte) { |
| 1358 | | html += "<a href=\"\">[ComptimeExpr]</a>"; |
| 1359 | | break; |
| 1360 | | } |
| 1361 | | |
| 1362 | | html += '<a href="'+navLinkDecl(decl.name)+'">'; |
| 1363 | | html += '<span class="tok-kw" style="color:lightblue;">' + |
| 1364 | | escapeHtml(decl.name) + '</span>'; |
| 1365 | | html += '</a>'; |
| 1366 | | if (j != 0) html += "."; |
| 1367 | | } |
| 1368 | | // at the end of the for loop this is the value of `decl` |
| 1369 | | //decl = zigAnalysis.decls[field.declPath[0]]; |
| 1370 | | |
| 1371 | | var val = resolveValue(decl.value); |
| 1372 | | console.assert("type" in val); |
| 1373 | | var valType = zigAnalysis.types[val.type]; |
| 1374 | | var valTypeName = typeShorthandName(valType); |
| 1375 | | html += ' ('+ valTypeName +')'; |
| 1376 | | } else if ("type" in field) { |
| 1377 | | var name = zigAnalysis.types[field.type].name; |
| 1378 | | html += '<span class="tok-kw">' + escapeHtml(name) + '</span>'; |
| 1379 | 1413 | } else { |
| 1380 | | html += '<span class="tok-kw">var</span>'; |
| 1414 | var name = typeValueName(field); |
| 1415 | html += '<span class="tok-kw">'+ name +'</span>'; |
| 1381 | 1416 | } |
| 1382 | 1417 | } |
| 1383 | 1418 | |
| ... | ... | @@ -1544,6 +1579,14 @@ |
| 1544 | 1579 | return childDecl; |
| 1545 | 1580 | } |
| 1546 | 1581 | } |
| 1582 | if (!parentType.privDecls) return null; |
| 1583 | for (var i = 0; i < parentType.privDecls.length; i += 1) { |
| 1584 | var declIndex = parentType.privDecls[i]; |
| 1585 | var childDecl = zigAnalysis.decls[declIndex]; |
| 1586 | if (childDecl.name === childName) { |
| 1587 | return childDecl; |
| 1588 | } |
| 1589 | } |
| 1547 | 1590 | return null; |
| 1548 | 1591 | } |
| 1549 | 1592 | |