| ... | @@ -187,7 +187,7 @@ | ... | @@ -187,7 +187,7 @@ |
| 187 | i += 1; | 187 | i += 1; |
| 188 | console.assert(isDecl(decl)); | 188 | console.assert(isDecl(decl)); |
| 189 | if ("type" in decl.value) { | 189 | if ("type" in decl.value) { |
| 190 | return typeTypeId; | 190 | return { type: typeTypeId }; |
| 191 | } | 191 | } |
| 192 | | 192 | |
| 193 | if ("declPath" in decl.value) { | 193 | if ("declPath" in decl.value) { |
| ... | @@ -232,6 +232,10 @@ | ... | @@ -232,6 +232,10 @@ |
| 232 | return fn_type.ret; | 232 | return fn_type.ret; |
| 233 | } | 233 | } |
| 234 | | 234 | |
| | 235 | if ("void" in decl.value) { |
| | 236 | return { type: typeTypeId }; |
| | 237 | } |
| | 238 | |
| 235 | console.log("TODO: handle in `typeOfDecl` more cases: ", decl); | 239 | console.log("TODO: handle in `typeOfDecl` more cases: ", decl); |
| 236 | console.assert(false); | 240 | console.assert(false); |
| 237 | throw {}; | 241 | throw {}; |
| ... | @@ -472,22 +476,9 @@ | ... | @@ -472,22 +476,9 @@ |
| 472 | var html = '<pre>' + escapeHtml(fieldNode.name) + ": "; | 476 | var html = '<pre>' + escapeHtml(fieldNode.name) + ": "; |
| 473 | if (isVarArgs && i === typeObj.params.length - 1) { | 477 | if (isVarArgs && i === typeObj.params.length - 1) { |
| 474 | html += '...'; | 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 | } else { | 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 | html += ',</pre>'; | 484 | html += ',</pre>'; |
| ... | @@ -657,24 +648,52 @@ | ... | @@ -657,24 +648,52 @@ |
| 657 | } | 648 | } |
| 658 | | 649 | |
| 659 | function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) { | 650 | function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| 660 | if ("declPath" in typeValue) { | 651 | |
| 661 | if (typeValue.hasCte) { | 652 | if ("int" in typeValue) { |
| 662 | // TODO: find the cte, print it nicely | 653 | return typeValue.int.value; |
| 663 | if (wantLink) { | 654 | } |
| 664 | return '<a href="">[ComptimeExpr]</a>'; | 655 | if ("call" in typeValue) { |
| 665 | } else { | 656 | var result = ""; |
| 666 | return "[ComptimeExpr]"; | 657 | var call = zigAnalysis.calls[typeValue.call]; |
| 667 | } | 658 | var functionName = typeValueName(call.func); |
| 668 | } | 659 | result += functionName + "("; |
| 669 | var declIndex = typeValue.declPath[0]; | 660 | for (var j = 0; j < call.args.length; j += 1) { |
| 670 | var name = zigAnalysis.decls[declIndex].name; | 661 | result += typeValueName(call.args[j]); |
| 671 | var declPath = getCanonDeclPath(declIndex); | 662 | if (j != call.args.length -1) result += ","; |
| 672 | if (wantLink) { | | |
| 673 | var nl = navLink(declPath.pkgNames, declPath.declNames); | | |
| 674 | return '<a href="' + nl + '">' + name + '</a>'; | | |
| 675 | } else { | | |
| 676 | return name; | | |
| 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 | console.assert("type" in typeValue) | 699 | console.assert("type" in typeValue) |
| ... | @@ -760,10 +779,11 @@ | ... | @@ -760,10 +779,11 @@ |
| 760 | switch (typeObj.kind) { | 779 | switch (typeObj.kind) { |
| 761 | case typeKinds.Array: | 780 | case typeKinds.Array: |
| 762 | var name = "["; | 781 | var name = "["; |
| | 782 | var lenName = typeValueName(typeObj.len, wantHtml); |
| 763 | if (wantHtml) { | 783 | if (wantHtml) { |
| 764 | name += '<span class="tok-number">' + typeObj.len + '</span>'; | 784 | name += '<span class="tok-number">' + lenName + '</span>'; |
| 765 | } else { | 785 | } else { |
| 766 | name += typeObj.len; | 786 | name += lenName; |
| 767 | } | 787 | } |
| 768 | name += "]"; | 788 | name += "]"; |
| 769 | name += typeValueName(typeObj.child, wantHtml, wantSubLink, null); | 789 | name += typeValueName(typeObj.child, wantHtml, wantSubLink, null); |
| ... | @@ -986,12 +1006,16 @@ | ... | @@ -986,12 +1006,16 @@ |
| 986 | } else { | 1006 | } else { |
| 987 | var decl = zigAnalysis.decls[value.declPath[0]]; | 1007 | var decl = zigAnalysis.decls[value.declPath[0]]; |
| 988 | var val = resolveValue(decl.value); | 1008 | var val = resolveValue(decl.value); |
| 989 | var valType = zigAnalysis.types[argTypeIndex]; | 1009 | if ("comptimeExpr" in val) { |
| 990 | | 1010 | payloadHtml += "[ComptimeExpr]"; |
| 991 | var valTypeName = typeShorthandName(valType); | 1011 | } else { |
| 992 | payloadHtml += '<a href="'+navLinkDecl(decl.name)+'">'; | 1012 | console.assert("type" in val); |
| 993 | payloadHtml += '<span class="tok-kw" style="color:lightblue;">' + escapeHtml(decl.name) + '</span>'; | 1013 | var valType = zigAnalysis.types[val.type]; |
| 994 | payloadHtml += '</a>'; | 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 | } else if ("type" in value) { | 1020 | } else if ("type" in value) { |
| 997 | var name = typeValueName(value, false); | 1021 | var name = typeValueName(value, false); |
| ... | @@ -1258,6 +1282,43 @@ | ... | @@ -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 | typesList.sort(byNameProperty); | 1322 | typesList.sort(byNameProperty); |
| 1262 | namespacesList.sort(byNameProperty); | 1323 | namespacesList.sort(byNameProperty); |
| 1263 | errSetsList.sort(byNameProperty); | 1324 | errSetsList.sort(byNameProperty); |
| ... | @@ -1349,35 +1410,9 @@ | ... | @@ -1349,35 +1410,9 @@ |
| 1349 | html += ": "; | 1410 | html += ": "; |
| 1350 | if (field.failure === true) { | 1411 | if (field.failure === true) { |
| 1351 | html += '<span class="tok-kw" style="color:red;">#FAILURE#</span>'; | 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 | } else { | 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,6 +1579,14 @@ |
| 1544 | return childDecl; | 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 | return null; | 1590 | return null; |
| 1548 | } | 1591 | } |
| 1549 | | 1592 | |