mirror of https://github.com/golang/go.git
go/printer: don't crash if ast.FuncType.Params is nil
The go/ast comment for FuncType.Params says that the field may be nil. Make sure the printer accepts such a value. The go/parser always sets the field (to provide parenthesis position information), but a program creating a Go AST from scatch may not. Added corresponding test case. Fixes #3870. R=golang-dev, r CC=golang-dev https://golang.org/cl/6448060
This commit is contained in:
parent
55f0c8b2cd
commit
a7c74d52dc
|
|
@ -325,9 +325,14 @@ func (p *printer) parameters(fields *ast.FieldList) {
|
|||
}
|
||||
|
||||
func (p *printer) signature(params, result *ast.FieldList) {
|
||||
p.parameters(params)
|
||||
if params != nil {
|
||||
p.parameters(params)
|
||||
} else {
|
||||
p.print(token.LPAREN, token.RPAREN)
|
||||
}
|
||||
n := result.NumFields()
|
||||
if n > 0 {
|
||||
// result != nil
|
||||
p.print(blank)
|
||||
if n == 1 && result.List[0].Names == nil {
|
||||
// single anonymous result; no ()'s
|
||||
|
|
|
|||
|
|
@ -385,6 +385,35 @@ func (t *t) foo(a, b, c int) int {
|
|||
}
|
||||
}
|
||||
|
||||
// TestFuncType tests that an ast.FuncType with a nil Params field
|
||||
// can be printed (per go/ast specification). Test case for issue 3870.
|
||||
func TestFuncType(t *testing.T) {
|
||||
src := &ast.File{
|
||||
Name: &ast.Ident{Name: "p"},
|
||||
Decls: []ast.Decl{
|
||||
&ast.FuncDecl{
|
||||
Name: &ast.Ident{Name: "f"},
|
||||
Type: &ast.FuncType{},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := Fprint(&buf, fset, src); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got := buf.String()
|
||||
|
||||
const want = `package p
|
||||
|
||||
func f()
|
||||
`
|
||||
|
||||
if got != want {
|
||||
t.Fatalf("got:\n%s\nwant:\n%s\n", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// TextX is a skeleton test that can be filled in for debugging one-off cases.
|
||||
// Do not remove.
|
||||
func TestX(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue