| ... | ... | @@ -130,17 +130,17 @@ |
| 130 | 130 | return typeKind === typeKinds.ErrorSet || typeKindIsContainer(typeKind); |
| 131 | 131 | } |
| 132 | 132 | |
| 133 | | function resolveDeclValue(decl) { |
| 133 | function resolveValue(value) { |
| 134 | 134 | var i = 0; |
| 135 | 135 | while(i < 1000) { |
| 136 | 136 | i += 1; |
| 137 | 137 | |
| 138 | | if ("declRef" in decl.value) { |
| 139 | | decl = zigAnalysis.decls[decl.value.declRef]; |
| 138 | if ("declRef" in value) { |
| 139 | value = zigAnalysis.decls[value.declRef].value; |
| 140 | 140 | continue; |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | | return decl.value; |
| 143 | return value; |
| 144 | 144 | |
| 145 | 145 | } |
| 146 | 146 | console.assert(false); |
| ... | ... | @@ -249,8 +249,9 @@ |
| 249 | 249 | return render404(); |
| 250 | 250 | } |
| 251 | 251 | |
| 252 | | var childDeclValue = resolveDeclValue(childDecl); |
| 253 | | if ("type" in childDeclValue){ |
| 252 | var childDeclValue = resolveValue(childDecl.value); |
| 253 | if ("type" in childDeclValue && |
| 254 | zigAnalysis.types[childDeclValue.type].kind !== typeKinds.Fn){ |
| 254 | 255 | if (i + 1 === curNav.declNames.length) { |
| 255 | 256 | curNav.declObjs.push(zigAnalysis.types[childDeclValue.type]); |
| 256 | 257 | break; |
| ... | ... | @@ -277,7 +278,7 @@ |
| 277 | 278 | } else if (lastIsDecl && last.kind === 'var') { |
| 278 | 279 | return renderVar(last); |
| 279 | 280 | } else if (lastIsDecl && last.kind === 'const' && !(declContainsType(last))) { |
| 280 | | var typeObj = zigAnalysis.types[resolveDeclValueTypeId(last)]; |
| 281 | var typeObj = zigAnalysis.types[resolveValue(last.value).type]; |
| 281 | 282 | if (typeObj.kind === typeKinds.Fn) { |
| 282 | 283 | return renderFn(last); |
| 283 | 284 | } else { |
| ... | ... | @@ -321,7 +322,11 @@ |
| 321 | 322 | } |
| 322 | 323 | |
| 323 | 324 | function renderFn(fnDecl) { |
| 324 | | domFnProtoCode.innerHTML = typeIndexName(fnDecl.type, true, true, fnDecl); |
| 325 | var value = resolveValue(fnDecl.value); |
| 326 | console.assert("type" in value); |
| 327 | var typeObj = zigAnalysis.types[value.type]; |
| 328 | |
| 329 | domFnProtoCode.innerHTML = typeIndexName(value.type, true, true, fnDecl); |
| 325 | 330 | |
| 326 | 331 | var docsSource = null; |
| 327 | 332 | var srcNode = zigAnalysis.astNodes[fnDecl.src]; |
| ... | ... | @@ -329,26 +334,23 @@ |
| 329 | 334 | docsSource = srcNode.docs; |
| 330 | 335 | } |
| 331 | 336 | |
| 332 | | var typeObj = zigAnalysis.types[fnDecl.type]; |
| 337 | var retIndex = resolveValue(typeObj.ret).type; |
| 333 | 338 | renderFnParamDocs(fnDecl, typeObj); |
| 334 | 339 | |
| 335 | 340 | var errSetTypeIndex = null; |
| 336 | | if (typeObj.ret != null) { |
| 337 | | var retType = zigAnalysis.types[typeObj.ret]; |
| 338 | | if (retType.kind === typeKinds.ErrorSet) { |
| 339 | | errSetTypeIndex = typeObj.ret; |
| 340 | | } else if (retType.kind === typeKinds.ErrorUnion) { |
| 341 | | errSetTypeIndex = retType.err; |
| 342 | | } |
| 341 | var retType = zigAnalysis.types[retIndex]; |
| 342 | if (retType.kind === typeKinds.ErrorSet) { |
| 343 | errSetTypeIndex = retIndex; |
| 344 | } else if (retType.kind === typeKinds.ErrorUnion) { |
| 345 | errSetTypeIndex = retType.err; |
| 343 | 346 | } |
| 344 | 347 | if (errSetTypeIndex != null) { |
| 345 | 348 | var errSetType = zigAnalysis.types[errSetTypeIndex]; |
| 346 | 349 | renderErrorSet(errSetType); |
| 347 | 350 | } |
| 348 | 351 | |
| 349 | | var fnObj = zigAnalysis.fns[fnDecl.value]; |
| 350 | | var protoSrcIndex = fnObj.src; |
| 351 | | if (typeIsGenericFn(fnDecl.type)) { |
| 352 | var protoSrcIndex = fnDecl.src; |
| 353 | if (typeIsGenericFn(value.type)) { |
| 352 | 354 | var instantiations = nodesToFnsMap[protoSrcIndex]; |
| 353 | 355 | var calls = nodesToCallsMap[protoSrcIndex]; |
| 354 | 356 | if (instantiations == null && calls == null) { |
| ... | ... | @@ -388,8 +390,7 @@ |
| 388 | 390 | function renderFnParamDocs(fnDecl, typeObj) { |
| 389 | 391 | var docCount = 0; |
| 390 | 392 | |
| 391 | | var fnObj = zigAnalysis.fns[fnDecl.value]; |
| 392 | | var fnNode = zigAnalysis.astNodes[fnObj.src]; |
| 393 | var fnNode = zigAnalysis.astNodes[fnDecl.src]; |
| 393 | 394 | var fields = fnNode.fields; |
| 394 | 395 | var isVarArgs = fnNode.varArgs; |
| 395 | 396 | |
| ... | ... | @@ -415,10 +416,11 @@ |
| 415 | 416 | } |
| 416 | 417 | var divDom = domListParams.children[domIndex]; |
| 417 | 418 | domIndex += 1; |
| 418 | | var argTypeIndex = typeObj.args[i]; |
| 419 | | |
| 419 | var value = resolveValue(typeObj.params[i]); |
| 420 | console.assert("type" in value); |
| 421 | var argTypeIndex = value.type; |
| 420 | 422 | var html = '<pre>' + escapeHtml(fieldNode.name) + ": "; |
| 421 | | if (isVarArgs && i === typeObj.args.length - 1) { |
| 423 | if (isVarArgs && i === typeObj.params.length - 1) { |
| 422 | 424 | html += '...'; |
| 423 | 425 | } else if (argTypeIndex != null) { |
| 424 | 426 | html += typeIndexName(argTypeIndex, true, true); |
| ... | ... | @@ -741,11 +743,7 @@ |
| 741 | 743 | return "f" + typeObj.bits; |
| 742 | 744 | } |
| 743 | 745 | case typeKinds.Int: |
| 744 | | var signed = (typeObj.i != null) ? 'i' : 'u'; |
| 745 | | var bits = typeObj[signed] || typeObj.name; |
| 746 | | |
| 747 | | var name = typeObj.name ? typeObj.name : signed + bits; |
| 748 | | |
| 746 | var name = typeObj.name; |
| 749 | 747 | if (wantHtml) { |
| 750 | 748 | return '<span class="tok-type">' + name + '</span>'; |
| 751 | 749 | } else { |
| ... | ... | @@ -834,22 +832,21 @@ |
| 834 | 832 | payloadHtml += 'fn' |
| 835 | 833 | } |
| 836 | 834 | payloadHtml += '('; |
| 837 | | if (typeObj.args != null) { |
| 835 | if (typeObj.params) { |
| 838 | 836 | var fields = null; |
| 839 | 837 | var isVarArgs = false; |
| 840 | | if (fnDecl != null) { |
| 841 | | var fnObj = zigAnalysis.fns[fnDecl.value]; |
| 842 | | var fnNode = zigAnalysis.astNodes[fnObj.src]; |
| 843 | | fields = fnNode.fields; |
| 844 | | isVarArgs = fnNode.varArgs; |
| 845 | | } |
| 838 | var fnNode = zigAnalysis.astNodes[fnDecl.src]; |
| 839 | fields = fnNode.fields; |
| 840 | isVarArgs = fnNode.varArgs; |
| 846 | 841 | |
| 847 | | for (var i = 0; i < typeObj.args.length; i += 1) { |
| 842 | for (var i = 0; i < typeObj.params.length; i += 1) { |
| 848 | 843 | if (i != 0) { |
| 849 | 844 | payloadHtml += ', '; |
| 850 | 845 | } |
| 851 | 846 | |
| 852 | | var argTypeIndex = typeObj.args[i]; |
| 847 | var paramValue = resolveValue(typeObj.params[i]); |
| 848 | console.assert("type" in paramValue); |
| 849 | var argTypeIndex = paramValue.type; |
| 853 | 850 | |
| 854 | 851 | if (fields != null) { |
| 855 | 852 | var paramNode = zigAnalysis.astNodes[fields[i]]; |
| ... | ... | @@ -896,13 +893,17 @@ |
| 896 | 893 | } |
| 897 | 894 | } |
| 898 | 895 | |
| 896 | var retValue = resolveValue(typeObj.ret); |
| 897 | console.assert("type" in retValue); |
| 898 | var retTypeIndex = retValue.type; |
| 899 | |
| 899 | 900 | payloadHtml += ') '; |
| 900 | | if (typeObj.ret != null) { |
| 901 | | payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl); |
| 901 | if (retTypeIndex != null) { |
| 902 | payloadHtml += typeIndexName(retTypeIndex, wantHtml, wantSubLink, fnDecl); |
| 902 | 903 | } else if (wantHtml) { |
| 903 | | payloadHtml += '<span class="tok-kw">var</span>'; |
| 904 | payloadHtml += '<span class="tok-kw">anytype</span>'; |
| 904 | 905 | } else { |
| 905 | | payloadHtml += 'var'; |
| 906 | payloadHtml += 'anytype'; |
| 906 | 907 | } |
| 907 | 908 | return payloadHtml; |
| 908 | 909 | default: |
| ... | ... | @@ -1233,7 +1234,7 @@ |
| 1233 | 1234 | html += '<span class="tok-kw" style="color:red;">#FAILURE#</span>'; |
| 1234 | 1235 | } else if ("declRef" in field) { |
| 1235 | 1236 | var decl = zigAnalysis.decls[field.declRef]; |
| 1236 | | var val = resolveDeclValue(decl); |
| 1237 | var val = resolveValue(decl.value); |
| 1237 | 1238 | console.assert("type" in val); |
| 1238 | 1239 | var valType = zigAnalysis.types[val.type]; |
| 1239 | 1240 | |