| ... | ... | @@ -43,6 +43,7 @@ |
| 43 | 43 | |
| 44 | 44 | var typeKinds = indexTypeKinds(); |
| 45 | 45 | var typeTypeId = findTypeTypeId(); |
| 46 | var pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 }; |
| 46 | 47 | |
| 47 | 48 | // for each package, is an array with packages to get to this one |
| 48 | 49 | var canonPkgPaths = computeCanonicalPackagePaths(); |
| ... | ... | @@ -378,21 +379,38 @@ |
| 378 | 379 | |
| 379 | 380 | function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| 380 | 381 | var typeObj = zigAnalysis.types[typeIndex]; |
| 382 | var declNameOk = declCanRepresentTypeKind(typeObj.kind); |
| 381 | 383 | if (wantLink) { |
| 382 | 384 | var declIndex = getCanonTypeDecl(typeIndex); |
| 383 | 385 | var declPath = getCanonDeclPath(declIndex); |
| 384 | | var haveLink = declPath != null; |
| 385 | | var typeNameHtml = typeName(typeObj, true, !haveLink, fnDecl, linkFnNameDecl); |
| 386 | | if (haveLink) { |
| 387 | | return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + typeNameHtml + '</a>'; |
| 386 | if (declPath == null) { |
| 387 | return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl); |
| 388 | } |
| 389 | var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ? |
| 390 | declPath.declNames[declPath.declNames.length - 1] : |
| 391 | typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl); |
| 392 | if (wantLink && wantHtml) { |
| 393 | return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + name + '</a>'; |
| 388 | 394 | } else { |
| 389 | | return typeNameHtml; |
| 395 | return name; |
| 390 | 396 | } |
| 391 | 397 | } else { |
| 392 | 398 | return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl); |
| 393 | 399 | } |
| 394 | 400 | } |
| 395 | 401 | |
| 402 | function shouldSkipParamName(typeIndex, paramName) { |
| 403 | var typeObj = zigAnalysis.types[typeIndex]; |
| 404 | if (typeObj.kind === typeKinds.Pointer && getPtrSize(typeObj) === pointerSizeEnum.One) { |
| 405 | typeIndex = typeObj.elem; |
| 406 | } |
| 407 | return typeIndexName(typeIndex, false, true).toLowerCase() === paramName; |
| 408 | } |
| 409 | |
| 410 | function getPtrSize(typeObj) { |
| 411 | return (typeObj.len == null) ? pointerSizeEnum.One : typeObj.len; |
| 412 | } |
| 413 | |
| 396 | 414 | function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) { |
| 397 | 415 | switch (typeObj.kind) { |
| 398 | 416 | case typeKinds.Array: |
| ... | ... | @@ -408,17 +426,17 @@ |
| 408 | 426 | case typeKinds.Pointer: |
| 409 | 427 | var name = ""; |
| 410 | 428 | switch (typeObj.len) { |
| 411 | | case 0: |
| 429 | case pointerSizeEnum.One: |
| 412 | 430 | default: |
| 413 | 431 | name += "*"; |
| 414 | 432 | break; |
| 415 | | case 1: |
| 433 | case pointerSizeEnum.Many: |
| 416 | 434 | name += "[*]"; |
| 417 | 435 | break; |
| 418 | | case 2: |
| 436 | case pointerSizeEnum.Slice: |
| 419 | 437 | name += "[]"; |
| 420 | 438 | break; |
| 421 | | case 3: |
| 439 | case pointerSizeEnum.C: |
| 422 | 440 | name += "[*c]"; |
| 423 | 441 | break; |
| 424 | 442 | } |
| ... | ... | @@ -562,16 +580,20 @@ |
| 562 | 580 | payloadHtml += ', '; |
| 563 | 581 | } |
| 564 | 582 | |
| 583 | var argTypeIndex = typeObj.args[i]; |
| 584 | |
| 565 | 585 | if (fnDecl != null && zigAnalysis.astNodes[fnDecl.src].fields != null) { |
| 566 | 586 | var paramDeclIndex = zigAnalysis.astNodes[fnDecl.src].fields[i]; |
| 567 | 587 | var paramName = zigAnalysis.astNodes[paramDeclIndex].name; |
| 568 | 588 | |
| 569 | 589 | if (paramName != null) { |
| 570 | | payloadHtml += paramName + ': '; |
| 590 | // skip if it matches the type name |
| 591 | if (argTypeIndex == null || !shouldSkipParamName(argTypeIndex, paramName)) { |
| 592 | payloadHtml += paramName + ': '; |
| 593 | } |
| 571 | 594 | } |
| 572 | 595 | } |
| 573 | 596 | |
| 574 | | var argTypeIndex = typeObj.args[i]; |
| 575 | 597 | if (argTypeIndex != null) { |
| 576 | 598 | payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink); |
| 577 | 599 | } else if (wantHtml) { |