Skip to content

Commit

Permalink
minor changes to walk
Browse files Browse the repository at this point in the history
R=rsc
http://go/go-review/1012008
  • Loading branch information
griesemer committed Oct 23, 2009
1 parent ba15bbe commit abc6ad4
Showing 1 changed file with 52 additions and 59 deletions.
111 changes: 52 additions & 59 deletions src/pkg/go/ast/walk.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@ func walkFieldList(v Visitor, list []*Field) {

func walkIdentList(v Visitor, list []*Ident) {
for _, x := range list {
walk(v, x);
Walk(v, x);
}
}


func walkExprList(v Visitor, list []Expr) {
for _, x := range list {
walk(v, x);
Walk(v, x);
}
}


func walkStmtList(v Visitor, list []Stmt) {
for _, s := range list {
walk(v, s);
Walk(v, s);
}
}

Expand All @@ -64,19 +64,12 @@ func walkBlockStmt(v Visitor, b *BlockStmt) {
}


func walk(v Visitor, n Node) {
if n != nil {
Walk(v, n);
}
}


// Walk recursively traverses an AST invokes v.Visit(n) for each
// node n encountered (starting with node). If v.Visit(n) returns
// true, Walk is invoked for each of the children of n.
// Walk traverses an AST in depth-first order and invokes v.Visit(n) for each
// non-nil node n encountered, starting with node. If v.Visit(n) returns true,
// Walk visits each of the children of n.
//
func Walk(v Visitor, node interface{}) {
if !v.Visit(node) {
if node != nil && !v.Visit(node) {
return;
}

Expand All @@ -91,7 +84,7 @@ func Walk(v Visitor, node interface{}) {
case *Field:
walkCommentGroup(v, n.Doc);
walkIdentList(v, n.Names);
walk(v, n.Type);
Walk(v, n.Type);
for _, x := range n.Tag {
Walk(v, x);
}
Expand All @@ -104,53 +97,53 @@ func Walk(v Visitor, node interface{}) {
}

case *FuncLit:
walk(v, n.Type);
Walk(v, n.Type);
walkBlockStmt(v, n.Body);

case *CompositeLit:
walk(v, n.Type);
Walk(v, n.Type);
walkExprList(v, n.Elts);

case *ParenExpr:
walk(v, n.X);
Walk(v, n.X);

case *SelectorExpr:
walk(v, n.X);
Walk(v, n.X);
if n.Sel != nil {
Walk(v, n.Sel);
}

case *IndexExpr:
walk(v, n.X);
walk(v, n.Index);
walk(v, n.End);
Walk(v, n.X);
Walk(v, n.Index);
Walk(v, n.End);

case *TypeAssertExpr:
walk(v, n.X);
walk(v, n.Type);
Walk(v, n.X);
Walk(v, n.Type);

case *CallExpr:
walk(v, n.Fun);
Walk(v, n.Fun);
walkExprList(v, n.Args);

case *StarExpr:
walk(v, n.X);
Walk(v, n.X);

case *UnaryExpr:
walk(v, n.X);
Walk(v, n.X);

case *BinaryExpr:
walk(v, n.X);
walk(v, n.Y);
Walk(v, n.X);
Walk(v, n.Y);

case *KeyValueExpr:
walk(v, n.Key);
walk(v, n.Value);
Walk(v, n.Key);
Walk(v, n.Value);

// Types
case *ArrayType:
walk(v, n.Len);
walk(v, n.Elt);
Walk(v, n.Len);
Walk(v, n.Elt);

case *StructType:
walkFieldList(v, n.Fields);
Expand All @@ -163,25 +156,25 @@ func Walk(v Visitor, node interface{}) {
walkFieldList(v, n.Methods);

case *MapType:
walk(v, n.Key);
walk(v, n.Value);
Walk(v, n.Key);
Walk(v, n.Value);

case *ChanType:
walk(v, n.Value);
Walk(v, n.Value);

// Statements
case *DeclStmt:
walk(v, n.Decl);
Walk(v, n.Decl);

case *LabeledStmt:
walkIdent(v, n.Label);
walk(v, n.Stmt);
Walk(v, n.Stmt);

case *ExprStmt:
walk(v, n.X);
Walk(v, n.X);

case *IncDecStmt:
walk(v, n.X);
Walk(v, n.X);

case *AssignStmt:
walkExprList(v, n.Lhs);
Expand All @@ -207,47 +200,47 @@ func Walk(v Visitor, node interface{}) {
walkStmtList(v, n.List);

case *IfStmt:
walk(v, n.Init);
walk(v, n.Cond);
Walk(v, n.Init);
Walk(v, n.Cond);
walkBlockStmt(v, n.Body);
walk(v, n.Else);
Walk(v, n.Else);

case *CaseClause:
walkExprList(v, n.Values);
walkStmtList(v, n.Body);

case *SwitchStmt:
walk(v, n.Init);
walk(v, n.Tag);
Walk(v, n.Init);
Walk(v, n.Tag);
walkBlockStmt(v, n.Body);

case *TypeCaseClause:
walkExprList(v, n.Types);
walkStmtList(v, n.Body);

case *TypeSwitchStmt:
walk(v, n.Init);
walk(v, n.Assign);
Walk(v, n.Init);
Walk(v, n.Assign);
walkBlockStmt(v, n.Body);

case *CommClause:
walk(v, n.Lhs);
walk(v, n.Rhs);
Walk(v, n.Lhs);
Walk(v, n.Rhs);
walkStmtList(v, n.Body);

case *SelectStmt:
walkBlockStmt(v, n.Body);

case *ForStmt:
walk(v, n.Init);
walk(v, n.Cond);
walk(v, n.Post);
Walk(v, n.Init);
Walk(v, n.Cond);
Walk(v, n.Post);
walkBlockStmt(v, n.Body);

case *RangeStmt:
walk(v, n.Key);
walk(v, n.Value);
walk(v, n.X);
Walk(v, n.Key);
Walk(v, n.Value);
Walk(v, n.X);
walkBlockStmt(v, n.Body);

// Declarations
Expand All @@ -263,14 +256,14 @@ func Walk(v Visitor, node interface{}) {
case *ValueSpec:
walkCommentGroup(v, n.Doc);
walkIdentList(v, n.Names);
walk(v, n.Type);
Walk(v, n.Type);
walkExprList(v, n.Values);
walkCommentGroup(v, n.Comment);

case *TypeSpec:
walkCommentGroup(v, n.Doc);
walkIdent(v, n.Name);
walk(v, n.Type);
Walk(v, n.Type);
walkCommentGroup(v, n.Comment);

case *GenDecl:
Expand All @@ -285,15 +278,15 @@ func Walk(v Visitor, node interface{}) {
Walk(v, n.Recv);
}
walkIdent(v, n.Name);
walk(v, n.Type);
Walk(v, n.Type);
walkBlockStmt(v, n.Body);

// Files and packages
case *File:
walkCommentGroup(v, n.Doc);
walkIdent(v, n.Name);
for _, d := range n.Decls {
walk(v, d);
Walk(v, d);
}
walkCommentGroup(v, n.Comments);

Expand Down

0 comments on commit abc6ad4

Please sign in to comment.