/****************************************************************************** * Copyright (c) 2009 - 2015 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *****************************************************************************/ /** * */ package com.ibm.wala.memsat.translation; import com.ibm.wala.cast.ir.ssa.AstAssertInstruction; import com.ibm.wala.cast.ir.ssa.AstEchoInstruction; import com.ibm.wala.cast.ir.ssa.AstGlobalRead; import com.ibm.wala.cast.ir.ssa.AstGlobalWrite; import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction; import com.ibm.wala.cast.ir.ssa.AstLexicalRead; import com.ibm.wala.cast.ir.ssa.AstLexicalWrite; import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction; import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction; import com.ibm.wala.cast.java.ssa.AstJavaInstructionVisitor; import com.ibm.wala.cast.java.ssa.AstJavaInvokeInstruction; import com.ibm.wala.cast.java.ssa.EnclosingObjectReference; import com.ibm.wala.cast.js.ssa.JSInstructionVisitor; import com.ibm.wala.cast.js.ssa.JavaScriptCheckReference; import com.ibm.wala.cast.js.ssa.JavaScriptInstanceOf; import com.ibm.wala.cast.js.ssa.JavaScriptInvoke; import com.ibm.wala.cast.js.ssa.JavaScriptPropertyRead; import com.ibm.wala.cast.js.ssa.JavaScriptPropertyWrite; import com.ibm.wala.cast.js.ssa.JavaScriptTypeOfInstruction; import com.ibm.wala.cast.js.ssa.JavaScriptWithRegion; import com.ibm.wala.cast.js.ssa.PrototypeLookup; import com.ibm.wala.cast.js.ssa.SetPrototype; import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; import com.ibm.wala.ssa.SSAArrayLengthInstruction; import com.ibm.wala.ssa.SSAArrayLoadInstruction; import com.ibm.wala.ssa.SSAArrayReferenceInstruction; import com.ibm.wala.ssa.SSAArrayStoreInstruction; import com.ibm.wala.ssa.SSABinaryOpInstruction; import com.ibm.wala.ssa.SSACheckCastInstruction; import com.ibm.wala.ssa.SSAComparisonInstruction; import com.ibm.wala.ssa.SSAConditionalBranchInstruction; import com.ibm.wala.ssa.SSAConversionInstruction; import com.ibm.wala.ssa.SSAFieldAccessInstruction; import com.ibm.wala.ssa.SSAGetCaughtExceptionInstruction; import com.ibm.wala.ssa.SSAGetInstruction; import com.ibm.wala.ssa.SSAGotoInstruction; import com.ibm.wala.ssa.SSAInstanceofInstruction; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSAInvokeInstruction; import com.ibm.wala.ssa.SSALoadMetadataInstruction; import com.ibm.wala.ssa.SSAMonitorInstruction; import com.ibm.wala.ssa.SSANewInstruction; import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SSAPiInstruction; import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.ssa.SSAReturnInstruction; import com.ibm.wala.ssa.SSASwitchInstruction; import com.ibm.wala.ssa.SSAThrowInstruction; import com.ibm.wala.ssa.SSAUnaryOpInstruction; /** * A default implementation of the InstructionVisitor interface. * * @author Emina Torlak */ abstract class AbstractInstructionVisitor<T> implements JSInstructionVisitor, AstJavaInstructionVisitor { /** * Returns the result of executing this visitor. * @return result of executing this visitor. */ protected abstract T execute(); /** * Default behavior of visitInstruction is to throw a * an assertion error, indicating that non-overriden methods are not reachable. */ protected void visitInstruction(SSAInstruction instruction) { throw new AssertionError("unreachable: " + instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ protected void visitAbstractInvoke(SSAAbstractInvokeInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ protected void visitFieldAccess(SSAFieldAccessInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitAbstractInvoke(SSAAbstractInvokeInstruction)}. */ public void visitJavaScriptInvoke(JavaScriptInvoke instruction) { visitAbstractInvoke(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitJavaScriptPropertyRead(JavaScriptPropertyRead instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitTypeOf(JavaScriptTypeOfInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitAssert(AstAssertInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitAstGlobalRead(AstGlobalRead instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitAstGlobalWrite(AstGlobalWrite instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitAstLexicalRead(AstLexicalRead instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitAstLexicalWrite(AstLexicalWrite instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitEachElementGet(EachElementGetInstruction inst) { visitInstruction(inst); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitEachElementHasNext(EachElementHasNextInstruction inst) { visitInstruction(inst); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitIsDefined(AstIsDefinedInstruction inst) { visitInstruction(inst); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitArrayLength(SSAArrayLengthInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitArrayReferenceInstruction(SSAArrayReferenceInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitArrayReferenceInstruction(SSAArrayReferenceInstruction)}. */ public void visitArrayLoad(SSAArrayLoadInstruction instruction) { visitArrayReferenceInstruction(instruction); } /** Calls {@linkplain #visitArrayReferenceInstruction(SSAArrayReferenceInstruction)}. */ public void visitArrayStore(SSAArrayStoreInstruction instruction) { visitArrayReferenceInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitBinaryOp(SSABinaryOpInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitCheckCast(SSACheckCastInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitComparison(SSAComparisonInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitConditionalBranch(SSAConditionalBranchInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitConversion(SSAConversionInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitFieldAccess(SSAFieldAccessInstruction)}. */ public void visitGet(SSAGetInstruction instruction) { visitFieldAccess(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitGetCaughtException(SSAGetCaughtExceptionInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitGoto(SSAGotoInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitInstanceof(SSAInstanceofInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitAbstractInvoke(SSAAbstractInvokeInstruction)}. */ public void visitInvoke(SSAInvokeInstruction instruction) { visitAbstractInvoke(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitLoadMetadata(SSALoadMetadataInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitMonitor(SSAMonitorInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitNew(SSANewInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitPhi(SSAPhiInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitPi(SSAPiInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitFieldAccess(SSAFieldAccessInstruction)}. */ public void visitPut(SSAPutInstruction instruction) { visitFieldAccess(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitReturn(SSAReturnInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitSwitch(SSASwitchInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitThrow(SSAThrowInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitUnaryOp(SSAUnaryOpInstruction instruction) { visitInstruction(instruction); } /** Calls {@linkplain #visitInstruction(SSAInstruction)}. */ public void visitEnclosingObjectReference(EnclosingObjectReference inst) { visitInstruction(inst); } /** Calls {@linkplain #visitAbstractInvoke(SSAAbstractInvokeInstruction)}. */ public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { visitAbstractInvoke(instruction); } public void visitCheckRef(JavaScriptCheckReference inst) { visitInstruction(inst); } public void visitJavaScriptInstanceOf(JavaScriptInstanceOf inst) { visitInstruction(inst); } public void visitWithRegion(JavaScriptWithRegion inst) { visitInstruction(inst); } public void visitEcho(AstEchoInstruction inst) { visitInstruction(inst); } @Override public void visitSetPrototype(SetPrototype instruction) { visitInstruction(instruction); } @Override public void visitPrototypeLookup(PrototypeLookup instruction) { visitInstruction(instruction); } }