joeq.Compiler.BytecodeAnalysis
Class BytecodeVisitor

java.lang.Object
  extended by joeq.Compiler.BytecodeAnalysis.BytecodeVisitor
All Implemented Interfaces:
jq_ClassFileConstants, CompilationConstants
Direct Known Subclasses:
BytecodeToQuad, ControlFlowGraph.InitialPass, LiveRefAnalysis.FirstPassVisitor, LiveRefAnalysis.SecondPassVisitor, ModRefAnalysis, StackDepthVisitor

public class BytecodeVisitor
extends Object
implements jq_ClassFileConstants, CompilationConstants


Field Summary
protected  byte[] bcs
           
static byte BINOP_ADD
           
static byte BINOP_AND
           
static byte BINOP_DIV
           
static byte BINOP_MUL
           
static byte BINOP_OR
           
static byte BINOP_REM
           
static byte BINOP_SUB
           
static byte BINOP_XOR
           
static String[] binopnames
           
protected  jq_Class clazz
           
static byte CMP_AE
           
static byte CMP_EQ
           
static byte CMP_G
           
static byte CMP_GE
           
static byte CMP_GT
           
static byte CMP_L
           
static byte CMP_LE
           
static byte CMP_LT
           
static byte CMP_NE
           
static byte CMP_UNCOND
           
static String[] cmpopnames
           
static String[] fcmpopnames
           
protected  int i_end
           
protected  int i_start
           
static byte INVOKE_INTERFACE
           
static byte INVOKE_SPECIAL
           
static byte INVOKE_STATIC
           
static byte INVOKE_VIRTUAL
           
static String[] invokeopnames
           
protected  jq_Method method
           
static byte MONITOR_ENTER
           
static byte MONITOR_EXIT
           
static String[] monitoropnames
           
protected  PrintStream out
           
static byte SHIFT_LEFT
           
static byte SHIFT_RIGHT
           
static byte SHIFT_URIGHT
           
static String[] shiftopnames
           
protected  CompilationState state
           
protected  boolean TRACE
           
static byte UNOP_NEG
           
static String[] unopnames
           
 
Fields inherited from interface joeq.Class.jq_ClassFileConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_Long, CONSTANT_MethodRef, CONSTANT_NameAndType, CONSTANT_ResolvedClass, CONSTANT_ResolvedIFieldRef, CONSTANT_ResolvedIMethodRef, CONSTANT_ResolvedSFieldRef, CONSTANT_ResolvedSMethodRef, CONSTANT_String, CONSTANT_Utf8, CONSUME_STACK, ILLEGAL_OPCODE, ILLEGAL_TYPE, jbc_AALOAD, jbc_AASTORE, jbc_ACONST_NULL, jbc_ALOAD, jbc_ALOAD_0, jbc_ALOAD_1, jbc_ALOAD_2, jbc_ALOAD_3, jbc_ANEWARRAY, jbc_ARETURN, jbc_ARRAYLENGTH, jbc_ASTORE, jbc_ASTORE_0, jbc_ASTORE_1, jbc_ASTORE_2, jbc_ASTORE_3, jbc_ATHROW, jbc_BALOAD, jbc_BASTORE, jbc_BIPUSH, jbc_BREAKPOINT, jbc_CALOAD, jbc_CASTORE, jbc_CHECKCAST, jbc_D2F, jbc_D2I, jbc_D2L, jbc_DADD, jbc_DALOAD, jbc_DASTORE, jbc_DCMPG, jbc_DCMPL, jbc_DCONST_0, jbc_DCONST_1, jbc_DDIV, jbc_DLOAD, jbc_DLOAD_0, jbc_DLOAD_1, jbc_DLOAD_2, jbc_DLOAD_3, jbc_DMUL, jbc_DNEG, jbc_DREM, jbc_DRETURN, jbc_DSTORE, jbc_DSTORE_0, jbc_DSTORE_1, jbc_DSTORE_2, jbc_DSTORE_3, jbc_DSUB, jbc_DUP, jbc_DUP_X1, jbc_DUP_X2, jbc_DUP2, jbc_DUP2_X1, jbc_DUP2_X2, jbc_F2D, jbc_F2I, jbc_F2L, jbc_FADD, jbc_FALOAD, jbc_FASTORE, jbc_FCMPG, jbc_FCMPL, jbc_FCONST_0, jbc_FCONST_1, jbc_FCONST_2, jbc_FDIV, jbc_FLOAD, jbc_FLOAD_0, jbc_FLOAD_1, jbc_FLOAD_2, jbc_FLOAD_3, jbc_FMUL, jbc_FNEG, jbc_FREM, jbc_FRETURN, jbc_FSTORE, jbc_FSTORE_0, jbc_FSTORE_1, jbc_FSTORE_2, jbc_FSTORE_3, jbc_FSUB, jbc_GETFIELD, jbc_GETSTATIC, jbc_GOTO, jbc_GOTO_W, jbc_I2B, jbc_I2C, jbc_I2D, jbc_I2F, jbc_I2L, jbc_I2S, jbc_IADD, jbc_IALOAD, jbc_IAND, jbc_IASTORE, jbc_ICONST_0, jbc_ICONST_1, jbc_ICONST_2, jbc_ICONST_3, jbc_ICONST_4, jbc_ICONST_5, jbc_ICONST_M1, jbc_IDIV, jbc_IF_ACMPEQ, jbc_IF_ACMPNE, jbc_IF_ICMPEQ, jbc_IF_ICMPGE, jbc_IF_ICMPGT, jbc_IF_ICMPLE, jbc_IF_ICMPLT, jbc_IF_ICMPNE, jbc_IFEQ, jbc_IFGE, jbc_IFGT, jbc_IFLE, jbc_IFLT, jbc_IFNE, jbc_IFNONNULL, jbc_IFNULL, jbc_IINC, jbc_ILOAD, jbc_ILOAD_0, jbc_ILOAD_1, jbc_ILOAD_2, jbc_ILOAD_3, jbc_IMUL, jbc_INEG, jbc_INSTANCEOF, jbc_INT2BYTE, jbc_INT2CHAR, jbc_INT2SHORT, jbc_INVOKEINTERFACE, jbc_INVOKENONVIRTUAL, jbc_INVOKESPECIAL, jbc_INVOKESTATIC, jbc_INVOKEVIRTUAL, jbc_IOR, jbc_IREM, jbc_IRETURN, jbc_ISHL, jbc_ISHR, jbc_ISTORE, jbc_ISTORE_0, jbc_ISTORE_1, jbc_ISTORE_2, jbc_ISTORE_3, jbc_ISUB, jbc_IUSHR, jbc_IXOR, jbc_JSR, jbc_JSR_W, jbc_L2D, jbc_L2F, jbc_L2I, jbc_LADD, jbc_LALOAD, jbc_LAND, jbc_LASTORE, jbc_LCMP, jbc_LCONST_0, jbc_LCONST_1, jbc_LDC, jbc_LDC_W, jbc_LDC2_W, jbc_LDIV, jbc_LLOAD, jbc_LLOAD_0, jbc_LLOAD_1, jbc_LLOAD_2, jbc_LLOAD_3, jbc_LMUL, jbc_LNEG, jbc_LOOKUPSWITCH, jbc_LOR, jbc_LREM, jbc_LRETURN, jbc_LSHL, jbc_LSHR, jbc_LSTORE, jbc_LSTORE_0, jbc_LSTORE_1, jbc_LSTORE_2, jbc_LSTORE_3, jbc_LSUB, jbc_LUSHR, jbc_LXOR, jbc_MONITORENTER, jbc_MONITOREXIT, jbc_MULTIANEWARRAY, jbc_NEW, jbc_NEWARRAY, jbc_NOP, jbc_POP, jbc_POP2, jbc_PUTFIELD, jbc_PUTSTATIC, jbc_RET, jbc_RETURN, jbc_SALOAD, jbc_SASTORE, jbc_SIPUSH, jbc_SWAP, jbc_TABLESWITCH, jbc_WIDE, NO_OF_OPERANDS, OPCODE_NAMES, PRODUCE_STACK, RESERVED, STATE_CLSINITERROR, STATE_CLSINITIALIZED, STATE_CLSINITIALIZING, STATE_CLSINITRUNNING, STATE_COMPILED, STATE_COMPILING, STATE_LOADED, STATE_LOADERROR, STATE_LOADING1, STATE_LOADING2, STATE_LOADING3, STATE_PREPARED, STATE_PREPAREERROR, STATE_PREPARING, STATE_SFINITERROR, STATE_SFINITIALIZED, STATE_SFINITIALIZING, STATE_UNLOADED, STATE_VERIFIED, STATE_VERIFYERROR, STATE_VERIFYING, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_CLASSEND, TC_DOUBLE, TC_FLOAT, TC_INT, TC_LONG, TC_PARAM, TC_PARAMEND, TC_SHORT, TC_VOID, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE
 
Fields inherited from interface joeq.Compiler.CompilationConstants
MAYBE, NO, YES
 
Constructor Summary
BytecodeVisitor(CompilationState state, jq_Method method)
          Creates new BytecodeVisitor
BytecodeVisitor(jq_Method method)
          Creates new BytecodeVisitor
 
Method Summary
 void forwardTraversal()
           
 jq_InstanceField tryResolve(jq_InstanceField m)
           
 jq_InstanceMethod tryResolve(jq_InstanceMethod m)
           
 jq_Member tryResolve(jq_Member m)
           
 jq_StaticField tryResolve(jq_StaticField m)
           
 jq_StaticMethod tryResolve(jq_StaticMethod m)
           
 void updateCPIndex(char index)
           
 void updateMemberReference(jq_Member m, byte tag)
           
 void visitAALOAD()
           
 void visitAASTORE()
           
 void visitACONST(Object s)
           
 void visitAGETFIELD(jq_InstanceField f)
           
 void visitAGETSTATIC(jq_StaticField f)
           
 void visitAINVOKE(byte op, jq_Method f)
           
 void visitALOAD(int i)
           
 void visitAPUTFIELD(jq_InstanceField f)
           
 void visitAPUTSTATIC(jq_StaticField f)
           
 void visitARETURN()
           
 void visitARRAYLENGTH()
           
 void visitASTORE(int i)
           
 void visitATHROW()
           
 void visitBALOAD()
           
 void visitBASTORE()
           
 void visitBGETFIELD(jq_InstanceField f)
           
 void visitBGETSTATIC(jq_StaticField f)
           
 void visitBPUTFIELD(jq_InstanceField f)
           
 void visitBPUTSTATIC(jq_StaticField f)
           
 void visitBytecode()
           
 void visitCALOAD()
           
 void visitCASTORE()
           
 void visitCGETFIELD(jq_InstanceField f)
           
 void visitCGETSTATIC(jq_StaticField f)
           
 void visitCHECKCAST(jq_Type f)
           
 void visitCPUTFIELD(jq_InstanceField f)
           
 void visitCPUTSTATIC(jq_StaticField f)
           
 void visitD2F()
           
 void visitD2I()
           
 void visitD2L()
           
 void visitDALOAD()
           
 void visitDASTORE()
           
 void visitDBINOP(byte op)
           
 void visitDCMP2(byte op)
           
 void visitDCONST(double c)
           
 void visitDGETFIELD(jq_InstanceField f)
           
 void visitDGETSTATIC(jq_StaticField f)
           
 void visitDINVOKE(byte op, jq_Method f)
           
 void visitDLOAD(int i)
           
 void visitDPUTFIELD(jq_InstanceField f)
           
 void visitDPUTSTATIC(jq_StaticField f)
           
 void visitDRETURN()
           
 void visitDSTORE(int i)
           
 void visitDUNOP(byte op)
           
 void visitDUP_x1()
           
 void visitDUP_x2()
           
 void visitDUP()
           
 void visitDUP2_x1()
           
 void visitDUP2_x2()
           
 void visitDUP2()
           
 void visitF2D()
           
 void visitF2I()
           
 void visitF2L()
           
 void visitFALOAD()
           
 void visitFASTORE()
           
 void visitFBINOP(byte op)
           
 void visitFCMP2(byte op)
           
 void visitFCONST(float c)
           
 void visitFGETFIELD(jq_InstanceField f)
           
 void visitFGETSTATIC(jq_StaticField f)
           
 void visitFINVOKE(byte op, jq_Method f)
           
 void visitFLOAD(int i)
           
 void visitFPUTFIELD(jq_InstanceField f)
           
 void visitFPUTSTATIC(jq_StaticField f)
           
 void visitFRETURN()
           
 void visitFSTORE(int i)
           
 void visitFUNOP(byte op)
           
 void visitGOTO(int target)
           
 void visitI2B()
           
 void visitI2C()
           
 void visitI2D()
           
 void visitI2F()
           
 void visitI2L()
           
 void visitI2S()
           
 void visitIALOAD()
           
 void visitIASTORE()
           
 void visitIBINOP(byte op)
           
 void visitICONST(int c)
           
 void visitIF(byte op, int target)
           
 void visitIFCMP(byte op, int target)
           
 void visitIFREF(byte op, int target)
           
 void visitIFREFCMP(byte op, int target)
           
 void visitIGETFIELD(jq_InstanceField f)
           
 void visitIGETSTATIC(jq_StaticField f)
           
 void visitIINC(int i, int v)
           
 void visitIINVOKE(byte op, jq_Method f)
           
 void visitILOAD(int i)
           
 void visitINSTANCEOF(jq_Type f)
           
 void visitIPUTFIELD(jq_InstanceField f)
           
 void visitIPUTSTATIC(jq_StaticField f)
           
 void visitIRETURN()
           
 void visitISHIFT(byte op)
           
 void visitISTORE(int i)
           
 void visitIUNOP(byte op)
           
 void visitJSR(int target)
           
 void visitL2D()
           
 void visitL2F()
           
 void visitL2I()
           
 void visitLALOAD()
           
 void visitLASTORE()
           
 void visitLBINOP(byte op)
           
 void visitLCMP2()
           
 void visitLCONST(long c)
           
 void visitLGETFIELD(jq_InstanceField f)
           
 void visitLGETSTATIC(jq_StaticField f)
           
 void visitLINVOKE(byte op, jq_Method f)
           
 void visitLLOAD(int i)
           
 void visitLOOKUPSWITCH(int default_target, int[] values, int[] targets)
           
 void visitLPUTFIELD(jq_InstanceField f)
           
 void visitLPUTSTATIC(jq_StaticField f)
           
 void visitLRETURN()
           
 void visitLSHIFT(byte op)
           
 void visitLSTORE(int i)
           
 void visitLUNOP(byte op)
           
 void visitMONITOR(byte op)
           
 void visitMULTINEWARRAY(jq_Type f, char dim)
           
 void visitNEW(jq_Type f)
           
 void visitNEWARRAY(jq_Array f)
           
 void visitNOP()
           
 void visitPEI()
           
 void visitPOP()
           
 void visitPOP2()
           
 void visitRET(int i)
           
 void visitSALOAD()
           
 void visitSASTORE()
           
 void visitSGETFIELD(jq_InstanceField f)
           
 void visitSGETSTATIC(jq_StaticField f)
           
 void visitSPUTFIELD(jq_InstanceField f)
           
 void visitSPUTSTATIC(jq_StaticField f)
           
 void visitSWAP()
           
 void visitTABLESWITCH(int default_target, int low, int high, int[] targets)
           
 void visitVINVOKE(byte op, jq_Method f)
           
 void visitVRETURN()
           
 void visitZGETFIELD(jq_InstanceField f)
           
 void visitZGETSTATIC(jq_StaticField f)
           
 void visitZPUTFIELD(jq_InstanceField f)
           
 void visitZPUTSTATIC(jq_StaticField f)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

state

protected final CompilationState state

clazz

protected final jq_Class clazz

method

protected final jq_Method method

bcs

protected final byte[] bcs

i_start

protected int i_start

i_end

protected int i_end

TRACE

protected boolean TRACE

out

protected PrintStream out

BINOP_ADD

public static final byte BINOP_ADD
See Also:
Constant Field Values

BINOP_SUB

public static final byte BINOP_SUB
See Also:
Constant Field Values

BINOP_MUL

public static final byte BINOP_MUL
See Also:
Constant Field Values

BINOP_DIV

public static final byte BINOP_DIV
See Also:
Constant Field Values

BINOP_REM

public static final byte BINOP_REM
See Also:
Constant Field Values

BINOP_AND

public static final byte BINOP_AND
See Also:
Constant Field Values

BINOP_OR

public static final byte BINOP_OR
See Also:
Constant Field Values

BINOP_XOR

public static final byte BINOP_XOR
See Also:
Constant Field Values

binopnames

public static final String[] binopnames

UNOP_NEG

public static final byte UNOP_NEG
See Also:
Constant Field Values

unopnames

public static final String[] unopnames

SHIFT_LEFT

public static final byte SHIFT_LEFT
See Also:
Constant Field Values

SHIFT_RIGHT

public static final byte SHIFT_RIGHT
See Also:
Constant Field Values

SHIFT_URIGHT

public static final byte SHIFT_URIGHT
See Also:
Constant Field Values

shiftopnames

public static final String[] shiftopnames

CMP_L

public static final byte CMP_L
See Also:
Constant Field Values

CMP_G

public static final byte CMP_G
See Also:
Constant Field Values

fcmpopnames

public static final String[] fcmpopnames

CMP_EQ

public static final byte CMP_EQ
See Also:
Constant Field Values

CMP_NE

public static final byte CMP_NE
See Also:
Constant Field Values

CMP_LT

public static final byte CMP_LT
See Also:
Constant Field Values

CMP_GE

public static final byte CMP_GE
See Also:
Constant Field Values

CMP_LE

public static final byte CMP_LE
See Also:
Constant Field Values

CMP_GT

public static final byte CMP_GT
See Also:
Constant Field Values

CMP_AE

public static final byte CMP_AE
See Also:
Constant Field Values

CMP_UNCOND

public static final byte CMP_UNCOND
See Also:
Constant Field Values

cmpopnames

public static final String[] cmpopnames

INVOKE_VIRTUAL

public static final byte INVOKE_VIRTUAL
See Also:
Constant Field Values

INVOKE_STATIC

public static final byte INVOKE_STATIC
See Also:
Constant Field Values

INVOKE_SPECIAL

public static final byte INVOKE_SPECIAL
See Also:
Constant Field Values

INVOKE_INTERFACE

public static final byte INVOKE_INTERFACE
See Also:
Constant Field Values

invokeopnames

public static final String[] invokeopnames

MONITOR_ENTER

public static final byte MONITOR_ENTER
See Also:
Constant Field Values

MONITOR_EXIT

public static final byte MONITOR_EXIT
See Also:
Constant Field Values

monitoropnames

public static final String[] monitoropnames
Constructor Detail

BytecodeVisitor

public BytecodeVisitor(jq_Method method)
Creates new BytecodeVisitor


BytecodeVisitor

public BytecodeVisitor(CompilationState state,
                       jq_Method method)
Creates new BytecodeVisitor

Method Detail

forwardTraversal

public void forwardTraversal()
                      throws VerifyError
Throws:
VerifyError

tryResolve

public jq_StaticField tryResolve(jq_StaticField m)

tryResolve

public jq_InstanceField tryResolve(jq_InstanceField m)

tryResolve

public jq_StaticMethod tryResolve(jq_StaticMethod m)

tryResolve

public jq_InstanceMethod tryResolve(jq_InstanceMethod m)

tryResolve

public jq_Member tryResolve(jq_Member m)

updateCPIndex

public void updateCPIndex(char index)

updateMemberReference

public void updateMemberReference(jq_Member m,
                                  byte tag)

visitBytecode

public void visitBytecode()
                   throws VerifyError
Throws:
VerifyError

visitPEI

public void visitPEI()

visitNOP

public void visitNOP()

visitACONST

public void visitACONST(Object s)

visitICONST

public void visitICONST(int c)

visitLCONST

public void visitLCONST(long c)

visitFCONST

public void visitFCONST(float c)

visitDCONST

public void visitDCONST(double c)

visitILOAD

public void visitILOAD(int i)

visitLLOAD

public void visitLLOAD(int i)

visitFLOAD

public void visitFLOAD(int i)

visitDLOAD

public void visitDLOAD(int i)

visitALOAD

public void visitALOAD(int i)

visitISTORE

public void visitISTORE(int i)

visitLSTORE

public void visitLSTORE(int i)

visitFSTORE

public void visitFSTORE(int i)

visitDSTORE

public void visitDSTORE(int i)

visitASTORE

public void visitASTORE(int i)

visitIALOAD

public void visitIALOAD()

visitLALOAD

public void visitLALOAD()

visitFALOAD

public void visitFALOAD()