java.lang.Object
Compil3r.BytecodeAnalysis.BytecodeVisitor
Compil3r.BytecodeAnalysis.LiveRefAnalysis.FirstPassVisitor
- All Implemented Interfaces:
- Clazz.jq_ClassFileConstants
- Enclosing class:
- LiveRefAnalysis
- public class LiveRefAnalysis.FirstPassVisitor
- extends BytecodeVisitor
| Fields inherited from class Compil3r.BytecodeAnalysis.BytecodeVisitor |
bcs, BINOP_ADD, BINOP_AND, BINOP_DIV, BINOP_MUL, BINOP_OR, BINOP_REM, BINOP_SUB, BINOP_XOR, binopnames, clazz, CMP_AE, CMP_EQ, CMP_G, CMP_GE, CMP_GT, CMP_L, CMP_LE, CMP_LT, CMP_NE, CMP_UNCOND, cmpopnames, fcmpopnames, i_end, i_start, INVOKE_INTERFACE, INVOKE_SPECIAL, INVOKE_STATIC, INVOKE_VIRTUAL, invokeopnames, method, MONITOR_ENTER, MONITOR_EXIT, monitoropnames, out, SHIFT_LEFT, SHIFT_RIGHT, SHIFT_URIGHT, shiftopnames, TRACE, UNOP_NEG, unopnames |
| Fields inherited from interface Clazz.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_PREPARING, STATE_SFINITIALIZED, STATE_SFINITIALIZING, STATE_UNLOADED, STATE_VERIFIED, 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 |
|
Method Summary |
Util.BitString |
getBytecodeStart()
|
private void |
INVOKEhelper(Clazz.jq_Method f)
|
(package private) boolean |
isEndOfBB(BasicBlock bb)
|
private boolean |
mergeJSRStateWith(BasicBlock before,
BasicBlock after)
|
private boolean |
mergeStateWith(BasicBlock bb2,
boolean jsr)
|
private boolean |
mergeWithExceptionHandlers()
|
java.lang.String |
toString()
Convert this Object to a human-readable String. |
void |
traverseBB(BasicBlock bb)
|
void |
visitAALOAD()
|
void |
visitAASTORE()
|
void |
visitACONST(java.lang.Object s)
|
void |
visitAGETFIELD(Clazz.jq_InstanceField f)
|
void |
visitAGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitAINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitALOAD(int i)
|
void |
visitAPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitAPUTSTATIC(Clazz.jq_StaticField f)
|
void |
visitARETURN()
|
void |
visitARRAYLENGTH()
|
void |
visitASTORE(int i)
|
void |
visitATHROW()
|
void |
visitBALOAD()
|
void |
visitBASTORE()
|
void |
visitBGETFIELD(Clazz.jq_InstanceField f)
|
void |
visitBGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitBPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitBPUTSTATIC(Clazz.jq_StaticField f)
|
void |
visitCALOAD()
|
void |
visitCASTORE()
|
void |
visitCGETFIELD(Clazz.jq_InstanceField f)
|
void |
visitCGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitCHECKCAST(Clazz.jq_Type f)
|
void |
visitCPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitCPUTSTATIC(Clazz.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(Clazz.jq_InstanceField f)
|
void |
visitDGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitDINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitDLOAD(int i)
|
void |
visitDPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitDPUTSTATIC(Clazz.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(Clazz.jq_InstanceField f)
|
void |
visitFGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitFINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitFLOAD(int i)
|
void |
visitFPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitFPUTSTATIC(Clazz.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(Clazz.jq_InstanceField f)
|
void |
visitIGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitIINC(int i,
int v)
|
void |
visitIINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitILOAD(int i)
|
void |
visitINSTANCEOF(Clazz.jq_Type f)
|
void |
visitIPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitIPUTSTATIC(Clazz.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(Clazz.jq_InstanceField f)
|
void |
visitLGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitLINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitLLOAD(int i)
|
void |
visitLOOKUPSWITCH(int default_target,
int[] values,
int[] targets)
|
void |
visitLPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitLPUTSTATIC(Clazz.jq_StaticField f)
|
void |
visitLRETURN()
|
void |
visitLSHIFT(byte op)
|
void |
visitLSTORE(int i)
|
void |
visitLUNOP(byte op)
|
void |
visitMONITOR(byte op)
|
void |
visitMULTINEWARRAY(Clazz.jq_Type f,
char dim)
|
void |
visitNEW(Clazz.jq_Type f)
|
void |
visitNEWARRAY(Clazz.jq_Array f)
|
void |
visitNOP()
|
void |
visitPOP()
|
void |
visitPOP2()
|
void |
visitRET(int i)
|
void |
visitSALOAD()
|
void |
visitSASTORE()
|
void |
visitSGETFIELD(Clazz.jq_InstanceField f)
|
void |
visitSGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitSPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitSPUTSTATIC(Clazz.jq_StaticField f)
|
void |
visitSWAP()
|
void |
visitTABLESWITCH(int default_target,
int low,
int high,
int[] targets)
|
void |
visitVINVOKE(byte op,
Clazz.jq_Method f)
|
void |
visitVRETURN()
|
void |
visitZGETFIELD(Clazz.jq_InstanceField f)
|
void |
visitZGETSTATIC(Clazz.jq_StaticField f)
|
void |
visitZPUTFIELD(Clazz.jq_InstanceField f)
|
void |
visitZPUTSTATIC(Clazz.jq_StaticField f)
|
bytecode_start
private Util.BitString bytecode_start
current_state
private LiveRefAnalysis.ExactState current_state
current_bb
private BasicBlock current_bb
cfg
private ControlFlowGraph cfg
go_again
boolean go_again
endsWithJSR
boolean endsWithJSR
endsWithRET
boolean endsWithRET
LiveRefAnalysis.FirstPassVisitor
LiveRefAnalysis.FirstPassVisitor(Clazz.jq_Method method,
ControlFlowGraph cfg)
toString
public java.lang.String toString()
- Description copied from class:
java.lang.Object
- Convert this Object to a human-readable String.
There are no limits placed on how long this String
should be or what it should contain. We suggest you
make it as intuitive as possible to be able to place
it into System.out.println() 55
and such.
It is typical, but not required, to ensure that this method
never completes abruptly with a java.lang.RuntimeException.
This method will be called when performing string
concatenation with this object. If the result is
null, string concatenation will instead
use "null".
The default implementation returns
getClass().getName() + "@" +
Integer.toHexString(hashCode()).
isEndOfBB
boolean isEndOfBB(BasicBlock bb)
getBytecodeStart
public Util.BitString getBytecodeStart()
traverseBB
public void traverseBB(BasicBlock bb)
mergeWithExceptionHandlers
private boolean mergeWithExceptionHandlers()
mergeStateWith
private boolean mergeStateWith(BasicBlock bb2,
boolean jsr)
mergeJSRStateWith
private boolean mergeJSRStateWith(BasicBlock before,
BasicBlock after)
visitNOP
public void visitNOP()
- Overrides:
visitNOP in class BytecodeVisitor
visitACONST
public void visitACONST(java.lang.Object s)
- Overrides:
visitACONST in class BytecodeVisitor
visitICONST
public void visitICONST(int c)
- Overrides:
visitICONST in class BytecodeVisitor
visitLCONST
public void visitLCONST(long c)
- Overrides:
visitLCONST in class BytecodeVisitor
visitFCONST
public void visitFCONST(float c)
- Overrides:
visitFCONST in class BytecodeVisitor
visitDCONST
public void visitDCONST(double c)
- Overrides:
visitDCONST in class BytecodeVisitor
visitILOAD
public void visitILOAD(int i)
- Overrides:
visitILOAD in class BytecodeVisitor
visitLLOAD
public void visitLLOAD(int i)
- Overrides:
visitLLOAD in class BytecodeVisitor
visitFLOAD
public void visitFLOAD(int i)
- Overrides:
visitFLOAD in class BytecodeVisitor
visitDLOAD
public void visitDLOAD(int i)
- Overrides:
visitDLOAD in class BytecodeVisitor
visitALOAD
public void visitALOAD(int i)
- Overrides:
visitALOAD in class BytecodeVisitor
visitISTORE
public void visitISTORE(int i)
- Overrides:
visitISTORE in class BytecodeVisitor
visitLSTORE
public void visitLSTORE(int i)
- Overrides:
visitLSTORE in class BytecodeVisitor
visitFSTORE
public void visitFSTORE(int i)
- Overrides:
visitFSTORE in class BytecodeVisitor
visitDSTORE
public void visitDSTORE(int i)
- Overrides:
visitDSTORE in class BytecodeVisitor
visitASTORE
public void visitASTORE(int i)
- Overrides:
visitASTORE in class BytecodeVisitor
visitIALOAD
public void visitIALOAD()
- Overrides:
visitIALOAD in class BytecodeVisitor
visitLALOAD
public void visitLALOAD()
- Overrides:
visitLALOAD in class BytecodeVisitor
visitFALOAD
public void visitFALOAD()
- Overrides:
visitFALOAD in class BytecodeVisitor
visitDALOAD
public void visitDALOAD()
- Overrides:
visitDALOAD in class BytecodeVisitor
visitAALOAD
public void visitAALOAD()
- Overrides:
visitAALOAD in class BytecodeVisitor
visitBALOAD
public void visitBALOAD()
- Overrides:
visitBALOAD in class BytecodeVisitor
visitCALOAD
public void visitCALOAD()
- Overrides:
visitCALOAD in class BytecodeVisitor
visitSALOAD
public void visitSALOAD()
- Overrides:
visitSALOAD in class BytecodeVisitor
visitIASTORE
public void visitIASTORE()
- Overrides:
visitIASTORE in class BytecodeVisitor
visitLASTORE
public void visitLASTORE()
- Overrides:
visitLASTORE in class BytecodeVisitor
visitFASTORE
public void visitFASTORE()
- Overrides:
visitFASTORE in class BytecodeVisitor
visitDASTORE
public void visitDASTORE()
- Overrides:
visitDASTORE in class BytecodeVisitor
visitAASTORE
public void visitAASTORE()
- Overrides:
visitAASTORE in class BytecodeVisitor
visitBASTORE
public void visitBASTORE()
- Overrides:
visitBASTORE in class BytecodeVisitor
visitCASTORE
public void visitCASTORE()
- Overrides:
visitCASTORE in class BytecodeVisitor
visitSASTORE
public void visitSASTORE()
- Overrides:
visitSASTORE in class BytecodeVisitor
visitPOP
public void visitPOP()
- Overrides:
visitPOP in class BytecodeVisitor
visitPOP2
public void visitPOP2()
- Overrides:
visitPOP2 in class BytecodeVisitor
visitDUP
public void visitDUP()
- Overrides:
visitDUP in class BytecodeVisitor
visitDUP_x1
public void visitDUP_x1()
- Overrides:
visitDUP_x1 in class BytecodeVisitor
visitDUP_x2
public void visitDUP_x2()
- Overrides:
visitDUP_x2 in class BytecodeVisitor
visitDUP2
public void visitDUP2()
- Overrides:
visitDUP2 in class BytecodeVisitor
visitDUP2_x1
public void visitDUP2_x1()
- Overrides:
visitDUP2_x1 in class BytecodeVisitor
visitDUP2_x2
public void visitDUP2_x2()
- Overrides:
visitDUP2_x2 in class BytecodeVisitor
visitSWAP
public void visitSWAP()
- Overrides:
visitSWAP in class BytecodeVisitor
visitIBINOP
public void visitIBINOP(byte op)
- Overrides:
visitIBINOP in class BytecodeVisitor
visitLBINOP
public void visitLBINOP(byte op)
- Overrides:
visitLBINOP in class BytecodeVisitor
visitFBINOP
public void visitFBINOP(byte op)
- Overrides:
visitFBINOP in class BytecodeVisitor
visitDBINOP
public void visitDBINOP(byte op)
- Overrides:
visitDBINOP in class BytecodeVisitor
visitIUNOP
public void visitIUNOP(byte op)
- Overrides:
visitIUNOP in class BytecodeVisitor
visitLUNOP
public void visitLUNOP(byte op)
- Overrides:
visitLUNOP in class BytecodeVisitor
visitFUNOP
public void visitFUNOP(byte op)
- Overrides:
visitFUNOP in class BytecodeVisitor
visitDUNOP
public void visitDUNOP(byte op)
- Overrides:
visitDUNOP in class BytecodeVisitor
visitISHIFT
public void visitISHIFT(byte op)
- Overrides:
visitISHIFT in class BytecodeVisitor
visitLSHIFT
public void visitLSHIFT(byte op)
- Overrides:
visitLSHIFT in class BytecodeVisitor
visitIINC
public void visitIINC(int i,
int v)
- Overrides:
visitIINC in class BytecodeVisitor
visitI2L
public void visitI2L()
- Overrides:
visitI2L in class BytecodeVisitor
visitI2F
public void visitI2F()
- Overrides:
visitI2F in class BytecodeVisitor
visitI2D
public void visitI2D()
- Overrides:
visitI2D in class BytecodeVisitor
visitL2I
public void visitL2I()
- Overrides:
visitL2I in class BytecodeVisitor
visitL2F
public void visitL2F()
- Overrides:
visitL2F in class