Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Compil3r.BytecodeAnalysis
Class LiveRefAnalysis.FirstPassVisitor  view LiveRefAnalysis.FirstPassVisitor download LiveRefAnalysis.FirstPassVisitor.java

java.lang.Object
  extended byCompil3r.BytecodeAnalysis.BytecodeVisitor
      extended byCompil3r.BytecodeAnalysis.LiveRefAnalysis.FirstPassVisitor
All Implemented Interfaces:
Clazz.jq_ClassFileConstants
Enclosing class:
LiveRefAnalysis

public class LiveRefAnalysis.FirstPassVisitor
extends BytecodeVisitor


Field Summary
private  Util.BitString bytecode_start
           
private  ControlFlowGraph cfg
           
private  BasicBlock current_bb
           
private  LiveRefAnalysis.ExactState current_state
           
(package private)  boolean endsWithJSR
           
(package private)  boolean endsWithRET
           
(package private)  boolean go_again
           
 
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
 
Constructor Summary
(package private) LiveRefAnalysis.FirstPassVisitor(Clazz.jq_Method method, ControlFlowGraph cfg)
           
 
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)
           
 
Methods inherited from class Compil3r.BytecodeAnalysis.BytecodeVisitor
forwardTraversal, resolve, resolve, resolve, resolve, resolve, updateCPIndex, updateMemberReference, visitBytecode, visitPEI
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

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
Constructor Detail

LiveRefAnalysis.FirstPassVisitor

LiveRefAnalysis.FirstPassVisitor(Clazz.jq_Method method,
                                 ControlFlowGraph cfg)
Method Detail

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