func WalkOnce()

in build/walk.go [87:203]


func WalkOnce(v Expr, f func(x *Expr)) {
	switch v := v.(type) {
	case *File:
		for i := range v.Stmt {
			f(&v.Stmt[i])
		}
	case *DotExpr:
		f(&v.X)
	case *IndexExpr:
		f(&v.X)
		f(&v.Y)
	case *KeyValueExpr:
		f(&v.Key)
		f(&v.Value)
	case *SliceExpr:
		f(&v.X)
		if v.From != nil {
			f(&v.From)
		}
		if v.To != nil {
			f(&v.To)
		}
		if v.Step != nil {
			f(&v.Step)
		}
	case *ParenExpr:
		f(&v.X)
	case *UnaryExpr:
		f(&v.X)
	case *BinaryExpr:
		f(&v.X)
		f(&v.Y)
	case *AssignExpr:
		f(&v.LHS)
		f(&v.RHS)
	case *LambdaExpr:
		for i := range v.Params {
			f(&v.Params[i])
		}
		for i := range v.Body {
			f(&v.Body[i])
		}
	case *CallExpr:
		f(&v.X)
		for i := range v.List {
			f(&v.List[i])
		}
	case *ListExpr:
		for i := range v.List {
			f(&v.List[i])
		}
	case *SetExpr:
		for i := range v.List {
			f(&v.List[i])
		}
	case *TupleExpr:
		for i := range v.List {
			f(&v.List[i])
		}
	case *DictExpr:
		for i := range v.List {
			e := Expr(v.List[i])
			f(&e)
		}
	case *Comprehension:
		f(&v.Body)
		for _, c := range v.Clauses {
			f(&c)
		}
	case *IfClause:
		f(&v.Cond)
	case *ForClause:
		f(&v.Vars)
		f(&v.X)
	case *ConditionalExpr:
		f(&v.Then)
		f(&v.Test)
		f(&v.Else)
	case *LoadStmt:
		module := (Expr)(v.Module)
		f(&module)
		v.Module = module.(*StringExpr)
		for i := range v.From {
			from := (Expr)(v.From[i])
			f(&from)
			v.From[i] = from.(*Ident)
			to := (Expr)(v.To[i])
			f(&to)
			v.To[i] = to.(*Ident)
		}
	case *DefStmt:
		for i := range v.Params {
			f(&v.Params[i])
		}
		for i := range v.Body {
			f(&v.Body[i])
		}
	case *IfStmt:
		f(&v.Cond)
		for i := range v.True {
			f(&v.True[i])
		}
		for i := range v.False {
			f(&v.False[i])
		}
	case *ForStmt:
		f(&v.Vars)
		f(&v.X)
		for i := range v.Body {
			f(&v.Body[i])
		}
	case *ReturnStmt:
		if v.Result != nil {
			f(&v.Result)
		}
	}
}