func (expr *IndirectionExpr) Walk(v Visitor) Expr {
	ret := expr

	e, changed := WalkExpr(v, expr.Expr)
	if changed {
		if ret == expr {
			ret = expr.copyNode()
		}
		ret.Expr = e
	}

	for i, t := range expr.Indirection {
		if t.Begin != nil {
			e, changed := WalkExpr(v, t.Begin)
			if changed {
				if ret == expr {
					ret = expr.copyNode()
				}
				ret.Indirection[i].Begin = e
			}
		}
		if t.End != nil {
			e, changed := WalkExpr(v, t.End)
			if changed {
				if ret == expr {
					ret = expr.copyNode()
				}
				ret.Indirection[i].End = e
			}
		}
	}

	return ret
}
// Walk implements the Expr interface.
Walk implements the Expr interface.
// Walk implements the Expr interface .
func (expr *IndirectionExpr) Walk(v Visitor) Expr {
	ret := expr
	e, changed := WalkExpr(v, expr.Expr)
	if changed {
		if ret == expr {
			ret = expr.copyNode()
		}
		ret.Expr = e
	}
	for i, t := range expr.Indirection {
		if t.Begin != nil {
			e, changed := WalkExpr(v, t.Begin)
			if changed {
				if ret == expr {
					ret = expr.copyNode()
				}
				ret.Indirection[i].Begin = e
			}
		}
		if t.End != nil {
			e, changed := WalkExpr(v, t.End)
			if changed {
				if ret == expr {
					ret = expr.copyNode()
				}
				ret.Indirection[i].End = e
			}
		}
	}
	return ret
}
func ( expr * IndirectionExpr ) Walk ( v Visitor ) Expr { ret := expr e , changed := WalkExpr ( v , expr . Expr ) if changed { if ret == expr { ret = expr . copyNode ( ) } ret . Expr = e } for i , t := range expr . Indirection { if t . Begin != nil { e , changed := WalkExpr ( v , t . Begin ) if changed { if ret == expr { ret = expr . copyNode ( ) } ret . Indirection [ i ] . Begin = e } } if t . End != nil { e , changed := WalkExpr ( v , t . End ) if changed { if ret == expr { ret = expr . copyNode ( ) } ret . Indirection [ i ] . End = e } } } return ret }
Walk implements the Expr interface.
Walk implements the Expr interface .