/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package EDU.purdue.cs.bloat.tree;
import EDU.purdue.cs.bloat.cfg.*;
/**
* TreeVisitor performs a traversal of a tree. It does so by having a method of
* every kind of node in the tree. This abstract class performs default
* operations for each kind of node visited. It must be subclasses to perform a
* more interesting traversal.
*
* @see Node
* @see Tree
*
* @see PrintVisitor
* @see ReplaceVisitor
*
*/
public abstract class TreeVisitor {
public static final int FORWARD = 0;
public static final int REVERSE = 1;
boolean prune;
int direction;
public TreeVisitor() {
this(TreeVisitor.FORWARD);
}
public TreeVisitor(final int direction) {
this.direction = direction;
}
/**
* @param prune
* Is the tree pruned during traversal?
*/
public void setPrune(final boolean prune) {
this.prune = prune;
}
public boolean prune() {
return prune;
}
/**
* @return The direction in which the tree is traversed.
*/
public int direction() {
return direction;
}
/**
* Returns <tt>true</tt> if the traversal traverses in the forward
* direction?
*/
public boolean forward() {
return direction == TreeVisitor.FORWARD;
}
public boolean reverse() {
return direction == TreeVisitor.REVERSE;
}
public void visitFlowGraph(final FlowGraph graph) {
graph.visitChildren(this);
}
public void visitBlock(final Block block) {
block.visitChildren(this);
}
public void visitTree(final Tree tree) {
visitNode(tree);
}
public void visitExprStmt(final ExprStmt stmt) {
visitStmt(stmt);
}
public void visitIfStmt(final IfStmt stmt) {
visitStmt(stmt);
}
public void visitIfCmpStmt(final IfCmpStmt stmt) {
visitIfStmt(stmt);
}
public void visitIfZeroStmt(final IfZeroStmt stmt) {
visitIfStmt(stmt);
}
public void visitInitStmt(final InitStmt stmt) {
visitStmt(stmt);
}
public void visitGotoStmt(final GotoStmt stmt) {
visitStmt(stmt);
}
public void visitLabelStmt(final LabelStmt stmt) {
visitStmt(stmt);
}
public void visitMonitorStmt(final MonitorStmt stmt) {
visitStmt(stmt);
}
public void visitPhiStmt(final PhiStmt stmt) {
visitStmt(stmt);
}
public void visitCatchExpr(final CatchExpr expr) {
visitExpr(expr);
}
public void visitDefExpr(final DefExpr expr) {
visitExpr(expr);
}
public void visitStackManipStmt(final StackManipStmt stmt) {
visitStmt(stmt);
}
public void visitPhiCatchStmt(final PhiCatchStmt stmt) {
visitPhiStmt(stmt);
}
public void visitPhiJoinStmt(final PhiJoinStmt stmt) {
visitPhiStmt(stmt);
}
public void visitRetStmt(final RetStmt stmt) {
visitStmt(stmt);
}
public void visitReturnExprStmt(final ReturnExprStmt stmt) {
visitStmt(stmt);
}
public void visitReturnStmt(final ReturnStmt stmt) {
visitStmt(stmt);
}
public void visitAddressStoreStmt(final AddressStoreStmt stmt) {
visitStmt(stmt);
}
public void visitStoreExpr(final StoreExpr expr) {
visitExpr(expr);
}
public void visitJsrStmt(final JsrStmt stmt) {
visitStmt(stmt);
}
public void visitSwitchStmt(final SwitchStmt stmt) {
visitStmt(stmt);
}
public void visitThrowStmt(final ThrowStmt stmt) {
visitStmt(stmt);
}
public void visitStmt(final Stmt stmt) {
visitNode(stmt);
}
public void visitSCStmt(final SCStmt stmt) {
visitStmt(stmt);
}
public void visitSRStmt(final SRStmt stmt) {
visitStmt(stmt);
}
public void visitArithExpr(final ArithExpr expr) {
visitExpr(expr);
}
public void visitArrayLengthExpr(final ArrayLengthExpr expr) {
visitExpr(expr);
}
public void visitMemExpr(final MemExpr expr) {
visitDefExpr(expr);
}
public void visitMemRefExpr(final MemRefExpr expr) {
visitMemExpr(expr);
}
public void visitArrayRefExpr(final ArrayRefExpr expr) {
visitMemRefExpr(expr);
}
public void visitCallExpr(final CallExpr expr) {
visitExpr(expr);
}
public void visitCallMethodExpr(final CallMethodExpr expr) {
visitCallExpr(expr);
}
public void visitCallStaticExpr(final CallStaticExpr expr) {
visitCallExpr(expr);
}
public void visitCastExpr(final CastExpr expr) {
visitExpr(expr);
}
public void visitConstantExpr(final ConstantExpr expr) {
visitExpr(expr);
}
public void visitFieldExpr(final FieldExpr expr) {
visitMemRefExpr(expr);
}
public void visitInstanceOfExpr(final InstanceOfExpr expr) {
visitExpr(expr);
}
public void visitLocalExpr(final LocalExpr expr) {
visitVarExpr(expr);
}
public void visitNegExpr(final NegExpr expr) {
visitExpr(expr);
}
public void visitNewArrayExpr(final NewArrayExpr expr) {
visitExpr(expr);
}
public void visitNewExpr(final NewExpr expr) {
visitExpr(expr);
}
public void visitNewMultiArrayExpr(final NewMultiArrayExpr expr) {
visitExpr(expr);
}
public void visitCheckExpr(final CheckExpr expr) {
visitExpr(expr);
}
public void visitZeroCheckExpr(final ZeroCheckExpr expr) {
visitCheckExpr(expr);
}
public void visitRCExpr(final RCExpr expr) {
visitCheckExpr(expr);
}
public void visitUCExpr(final UCExpr expr) {
visitCheckExpr(expr);
}
public void visitReturnAddressExpr(final ReturnAddressExpr expr) {
visitExpr(expr);
}
public void visitShiftExpr(final ShiftExpr expr) {
visitExpr(expr);
}
public void visitStackExpr(final StackExpr expr) {
visitVarExpr(expr);
}
public void visitVarExpr(final VarExpr expr) {
visitMemExpr(expr);
}
public void visitStaticFieldExpr(final StaticFieldExpr expr) {
visitMemRefExpr(expr);
}
public void visitExpr(final Expr expr) {
visitNode(expr);
}
public void visitNode(final Node node) {
node.visitChildren(this);
}
}