package x10.wala.translator;
import polyglot.ast.ArrayAccess;
import polyglot.ast.ArrayAccessAssign;
import polyglot.ast.ArrayInit;
import polyglot.ast.ArrayTypeNode;
import polyglot.ast.Assert;
import polyglot.ast.Binary;
import polyglot.ast.Block;
import polyglot.ast.BooleanLit;
import polyglot.ast.Branch;
import polyglot.ast.Call;
import polyglot.ast.CanonicalTypeNode;
import polyglot.ast.Case;
import polyglot.ast.Cast;
import polyglot.ast.Catch;
import polyglot.ast.CharLit;
import polyglot.ast.ClassBody;
import polyglot.ast.ClassDecl;
import polyglot.ast.ClassLit;
import polyglot.ast.Conditional;
import polyglot.ast.ConstructorCall;
import polyglot.ast.ConstructorDecl;
import polyglot.ast.Do;
import polyglot.ast.Empty;
import polyglot.ast.Eval;
import polyglot.ast.Field;
import polyglot.ast.FieldAssign;
import polyglot.ast.FieldDecl;
import polyglot.ast.FloatLit;
import polyglot.ast.For;
import polyglot.ast.Formal;
import polyglot.ast.If;
import polyglot.ast.Import;
import polyglot.ast.Initializer;
import polyglot.ast.Instanceof;
import polyglot.ast.IntLit;
import polyglot.ast.Labeled;
import polyglot.ast.Local;
import polyglot.ast.LocalAssign;
import polyglot.ast.LocalClassDecl;
import polyglot.ast.LocalDecl;
import polyglot.ast.MethodDecl;
import polyglot.ast.New;
import polyglot.ast.NewArray;
import polyglot.ast.Node;
import polyglot.ast.NullLit;
import polyglot.ast.PackageNode;
import polyglot.ast.Return;
import polyglot.ast.Special;
import polyglot.ast.StringLit;
import polyglot.ast.Switch;
import polyglot.ast.SwitchBlock;
import polyglot.ast.Throw;
import polyglot.ast.Try;
import polyglot.ast.Unary;
import polyglot.ast.While;
import x10.ast.AssignPropertyCall;
import x10.ast.Async;
import x10.ast.AtStmt;
import x10.ast.Atomic;
import x10.ast.Closure;
import x10.ast.ClosureCall;
import x10.ast.Finish;
import x10.ast.ForLoop;
import x10.ast.Here;
import x10.ast.LocalTypeDef;
import x10.ast.Next;
import x10.ast.ParExpr;
import x10.ast.SettableAssign;
import x10.ast.StmtSeq;
import x10.ast.Tuple;
import x10.ast.When;
import x10.ast.X10Formal;
import com.ibm.wala.cast.tree.CAstNode;
import com.ibm.wala.util.debug.Assertions;
public class X10ASTTraverser {
private X10ASTTraverser() {
}
public static CAstNode visit(Node n, X10TranslatorVisitor xtv, WalkContext wc) {
if (n instanceof Async)
return xtv.visit((Async) n, wc);
if (n instanceof AssignPropertyCall)
return xtv.visit((AssignPropertyCall) n, wc);
else if (n instanceof Atomic)
return xtv.visit((Atomic) n, wc);
else if (n instanceof AtStmt)
return xtv.visit((AtStmt) n, wc);
else if (n instanceof Closure)
return xtv.visit((Closure) n, wc);
else if (n instanceof ClosureCall)
return xtv.visit((ClosureCall) n, wc);
else if (n instanceof Finish)
return xtv.visit((Finish) n, wc);
else if (n instanceof ForLoop)
return xtv.visit((ForLoop) n, wc);
else if (n instanceof Here)
return xtv.visit((Here) n, wc);
else if (n instanceof Next)
return xtv.visit((Next) n, wc);
else if (n instanceof ParExpr)
return xtv.visit((ParExpr) n, wc);
else if (n instanceof When)
return xtv.visit((When) n, wc);
else if (n instanceof X10Formal)
return xtv.visit((X10Formal) n, wc);
else if (n instanceof Tuple)
return xtv.visit((Tuple) n, wc);
else if (n instanceof SettableAssign)
return xtv.visit((SettableAssign) n, wc);
else if (n instanceof LocalTypeDef)
return xtv.visit((LocalTypeDef) n, wc);
else if (n instanceof MethodDecl) {
return xtv.visit((MethodDecl) n, wc);
} else if (n instanceof ConstructorDecl) {
return xtv.visit((ConstructorDecl) n, wc);
} else if (n instanceof FieldDecl) {
return xtv.visit((FieldDecl) n, wc);
} else if (n instanceof Import) {
return xtv.visit((Import) n, wc);
} else if (n instanceof PackageNode) {
return xtv.visit((PackageNode) n, wc);
} else if (n instanceof CanonicalTypeNode) {
return xtv.visit((CanonicalTypeNode) n, wc);
} else if (n instanceof ArrayTypeNode) {
return xtv.visit((ArrayTypeNode) n, wc);
} else if (n instanceof ArrayInit) {
return xtv.visit((ArrayInit) n, wc);
} else if (n instanceof ArrayAccessAssign) {
return xtv.visit((ArrayAccessAssign) n, wc);
} else if (n instanceof FieldAssign) {
return xtv.visit((FieldAssign) n, wc);
} else if (n instanceof LocalAssign) {
return xtv.visit((LocalAssign) n, wc);
} else if (n instanceof Binary) {
return xtv.visit((Binary) n, wc);
} else if (n instanceof Call) {
return xtv.visit((Call) n, wc);
} else if (n instanceof ConstructorCall) {
return xtv.visit((ConstructorCall) n, wc);
} else if (n instanceof Cast) {
return xtv.visit((Cast) n, wc);
} else if (n instanceof Conditional) {
return xtv.visit((Conditional) n, wc);
} else if (n instanceof Instanceof) {
return xtv.visit((Instanceof) n, wc);
} else if (n instanceof BooleanLit) {
return xtv.visit((BooleanLit) n, wc);
} else if (n instanceof ClassLit) {
return xtv.visit((ClassLit) n, wc);
} else if (n instanceof FloatLit) {
return xtv.visit((FloatLit) n, wc);
} else if (n instanceof NullLit) {
return xtv.visit((NullLit) n, wc);
} else if (n instanceof CharLit) {
return xtv.visit((CharLit) n, wc);
} else if (n instanceof IntLit) {
return xtv.visit((IntLit) n, wc);
} else if (n instanceof StringLit) {
return xtv.visit((StringLit) n, wc);
} else if (n instanceof New) {
return xtv.visit((New) n, wc);
} else if (n instanceof NewArray) {
return xtv.visit((NewArray) n, wc);
} else if (n instanceof Special) {
return xtv.visit((Special) n, wc);
} else if (n instanceof Unary) {
return xtv.visit((Unary) n, wc);
} else if (n instanceof ArrayAccess) {
return xtv.visit((ArrayAccess) n, wc);
} else if (n instanceof Field) {
return xtv.visit((Field) n, wc);
} else if (n instanceof Local) {
return xtv.visit((Local) n, wc);
} else if (n instanceof ClassBody) {
return xtv.visit((ClassBody) n, wc);
} else if (n instanceof ClassDecl) {
return xtv.visit((ClassDecl) n, wc);
} else if (n instanceof Initializer) {
return xtv.visit((Initializer) n, wc);
} else if (n instanceof Assert) {
return xtv.visit((Assert) n, wc);
} else if (n instanceof Branch) {
return xtv.visit((Branch) n, wc);
} else if (n instanceof SwitchBlock) { // must test for this one before Block
return xtv.visit((SwitchBlock) n, wc);
} else if (n instanceof StmtSeq) { // must test for this one before Block
return xtv.visit((StmtSeq) n, wc);
} else if (n instanceof Block) { // must test for this one before Block
return xtv.visit((Block) n, wc);
} else if (n instanceof Catch) {
return xtv.visit((Catch) n, wc);
} else if (n instanceof If) {
return xtv.visit((If) n, wc);
} else if (n instanceof Labeled) {
return xtv.visit((Labeled) n, wc);
} else if (n instanceof LocalClassDecl) {
return xtv.visit((LocalClassDecl) n, wc);
} else if (n instanceof Do) {
return xtv.visit((Do) n, wc);
} else if (n instanceof For) {
return xtv.visit((For) n, wc);
} else if (n instanceof While) {
return xtv.visit((While) n, wc);
} else if (n instanceof Switch) {
return xtv.visit((Switch) n, wc);
} else if (n instanceof Try) {
return xtv.visit((Try) n, wc);
} else if (n instanceof Empty) {
return xtv.visit((Empty) n, wc);
} else if (n instanceof Eval) {
return xtv.visit((Eval) n, wc);
} else if (n instanceof LocalDecl) {
return xtv.visit((LocalDecl) n, wc);
} else if (n instanceof Return) {
return xtv.visit((Return) n, wc);
} else if (n instanceof Case) {
return xtv.visit((Case) n, wc);
} else if (n instanceof Throw) {
return xtv.visit((Throw) n, wc);
} else if (n instanceof Formal) {
return xtv.visit((Formal) n, wc);
} else {
Assertions.UNREACHABLE("Unhandled node " + n + " of type " + n.getClass().getName() + " in ASTTraverser.visit().");
return null;
} }
}