mirror of
https://github.com/golang/go
synced 2024-11-12 09:30:25 -07:00
Allow a nil Ident to print without crashing.
Allow Walk of []Decl R=gri CC=golang-dev, rsc https://golang.org/cl/183112
This commit is contained in:
parent
c05f86a46a
commit
f221067fe8
@ -357,7 +357,12 @@ func IsExported(name string) bool {
|
||||
// (i.e., whether it begins with an uppercase letter).
|
||||
func (name *Ident) IsExported() bool { return IsExported(name.Value) }
|
||||
|
||||
func (name *Ident) String() string { return name.Value }
|
||||
func (name *Ident) String() string {
|
||||
if name != nil {
|
||||
return name.Value
|
||||
}
|
||||
return "<nil>"
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -598,7 +603,7 @@ type (
|
||||
TypeSpec struct {
|
||||
Doc *CommentGroup // associated documentation; or nil
|
||||
Name *Ident // type name
|
||||
Type Expr
|
||||
Type Expr // *ArrayType, *StructType, *FuncType, *InterfaceType, *MapType, *ChanType or *Ident
|
||||
Comment *CommentGroup // line comments; or nil
|
||||
}
|
||||
)
|
||||
|
@ -41,7 +41,7 @@ func walkBlockStmt(v Visitor, b *BlockStmt) {
|
||||
// followed by a call of w.Visit(nil).
|
||||
//
|
||||
// Walk may be called with any of the named ast node types. It also
|
||||
// accepts arguments of type []*Field, []*Ident, []Expr and []Stmt;
|
||||
// accepts arguments of type []*Field, []*Ident, []Expr, []Stmt and []Decl;
|
||||
// the respective children are the slice elements.
|
||||
//
|
||||
func Walk(v Visitor, node interface{}) {
|
||||
@ -291,9 +291,7 @@ func Walk(v Visitor, node interface{}) {
|
||||
case *File:
|
||||
walkCommentGroup(v, n.Doc)
|
||||
walkIdent(v, n.Name)
|
||||
for _, d := range n.Decls {
|
||||
Walk(v, d)
|
||||
}
|
||||
Walk(v, n.Decls)
|
||||
walkCommentGroup(v, n.Comments)
|
||||
|
||||
case *Package:
|
||||
@ -321,6 +319,11 @@ func Walk(v Visitor, node interface{}) {
|
||||
Walk(v, x)
|
||||
}
|
||||
|
||||
case []Decl:
|
||||
for _, x := range n {
|
||||
Walk(v, x)
|
||||
}
|
||||
|
||||
default:
|
||||
fmt.Printf("ast.Walk: unexpected type %T", n)
|
||||
panic()
|
||||
|
Loading…
Reference in New Issue
Block a user