Skip to content

Commit

Permalink
cmd/api: fix signatures like func(x, y, z int)
Browse files Browse the repository at this point in the history
Fixes writing of function parameter, result lists which
consist of multiple named or unnamed items with same type.

Fixes #4011.

R=golang-dev, bsiegert, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/6475062
  • Loading branch information
cixtor committed Sep 18, 2012
1 parent 51e8561 commit 1ad5f87
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/cmd/api/goapi.go
Expand Up @@ -1017,18 +1017,38 @@ func (w *Walker) walkFuncDecl(f *ast.FuncDecl) {

func (w *Walker) funcSigString(ft *ast.FuncType) string {
var b bytes.Buffer
writeField := func(b *bytes.Buffer, f *ast.Field) {
if n := len(f.Names); n > 1 {
for i := 0; i < n; i++ {
if i > 0 {
b.WriteString(", ")
}
b.WriteString(w.nodeString(w.namelessType(f.Type)))
}
} else {
b.WriteString(w.nodeString(w.namelessType(f.Type)))
}
}
b.WriteByte('(')
if ft.Params != nil {
for i, f := range ft.Params.List {
if i > 0 {
b.WriteString(", ")
}
b.WriteString(w.nodeString(w.namelessType(f.Type)))
writeField(&b, f)
}
}
b.WriteByte(')')
if ft.Results != nil {
if nr := len(ft.Results.List); nr > 0 {
nr := 0
for _, f := range ft.Results.List {
if n := len(f.Names); n > 1 {
nr += n
} else {
nr++
}
}
if nr > 0 {
b.WriteByte(' ')
if nr > 1 {
b.WriteByte('(')
Expand All @@ -1037,7 +1057,7 @@ func (w *Walker) funcSigString(ft *ast.FuncType) string {
if i > 0 {
b.WriteString(", ")
}
b.WriteString(w.nodeString(w.namelessType(f.Type)))
writeField(&b, f)
}
if nr > 1 {
b.WriteByte(')')
Expand Down
3 changes: 3 additions & 0 deletions src/cmd/api/testdata/src/pkg/p3/golden.txt
@@ -0,0 +1,3 @@
pkg p3, method (*ThirdBase) GoodPlayer() (int, int, int)
pkg p3, func BadHop(int, int, int) (bool, bool, *ThirdBase, *ThirdBase, error)
pkg p3, type ThirdBase struct
6 changes: 6 additions & 0 deletions src/cmd/api/testdata/src/pkg/p3/p3.go
@@ -0,0 +1,6 @@
package p3

type ThirdBase struct{}

func (tb *ThirdBase) GoodPlayer() (i, j, k int)
func BadHop(i, j, k int) (l, m bool, n, o *ThirdBase, err error)

0 comments on commit 1ad5f87

Please sign in to comment.