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