joeq.Compiler.Quad
Class BytecodeToQuad
java.lang.Object
joeq.Compiler.BytecodeAnalysis.BytecodeVisitor
joeq.Compiler.Quad.BytecodeToQuad
- All Implemented Interfaces:
- jq_ClassFileConstants, CompilationConstants
public class BytecodeToQuad
- extends BytecodeVisitor
Converts stack-based Java bytecode to Quad intermediate format.
This utilizes the ControlFlowGraph in the BytecodeAnalysis package to build
up a control flow graph, then iterates over the graph to generate the Quad
code.
- Version:
- $Id: BytecodeToQuad.java 2465 2006-06-07 23:03:17Z joewhaley $
- Author:
- John Whaley
- See Also:
BytecodeVisitor,
ControlFlowGraph
| Fields inherited from class joeq.Compiler.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, state, TRACE, UNOP_NEG, 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 |
|
Method Summary |
ControlFlowGraph |
convert()
Perform conversion process from bytecode to quad. |
boolean |
isLocal(Operand op,
int index,
jq_Type type)
|
String |
toString()
Returns a string with the name of the pass and the method being converted. |
void |
traverseBB(BasicBlock bc_bb)
|
void |
UNOPhelper(Operator.Unary operator,
jq_Type tr,
jq_Type t1)
|
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 |
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 |
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)
|
ALWAYS_TRACE
public static boolean ALWAYS_TRACE
peek
public static final Utf8 peek
peek1
public static final Utf8 peek1
peek2
public static final Utf8 peek2
peek4
public static final Utf8 peek4
peek8
public static final Utf8 peek8
poke
public static final Utf8 poke
poke1
public static final Utf8 poke1
poke2
public static final Utf8 poke2
poke4
public static final Utf8 poke4
poke8
public static final Utf8 poke8
offset
public static final Utf8 offset
align
public static final Utf8 align
difference
public static final Utf8 difference
isNull
public static final Utf8 isNull
addressOf
public static final Utf8 addressOf
address32
public static final Utf8 address32
asObject
public static final Utf8 asObject
asReferenceType
public static final Utf8 asReferenceType
to32BitValue
public static final Utf8 to32BitValue
stringRep
public static final Utf8 stringRep
getNull
public static final Utf8 getNull
size
public static final Utf8 size
getBasePointer
public static final Utf8 getBasePointer
getStackPointer
public static final Utf8 getStackPointer
alloca
public static final Utf8 alloca
atomicAdd
public static final Utf8 atomicAdd
atomicSub
public static final Utf8 atomicSub
atomicCas4
public static final Utf8 atomicCas4
atomicCas8
public static final Utf8 atomicCas8
atomicAnd
public static final Utf8 atomicAnd
min
public static final Utf8 min
max
public static final Utf8 max
ELIM_NULL_CHECKS
public static final boolean ELIM_NULL_CHECKS
- See Also:
- Constant Field Values
BytecodeToQuad
public BytecodeToQuad(jq_Method method)
- Initializes the conversion from bytecode to quad format for the given method.
- Parameters:
method - the method to convert.
BytecodeToQuad
public BytecodeToQuad(CompilationState state,
jq_Method method)
- Initializes the conversion from bytecode to quad format for the given method.
- Parameters:
method - the method to convert.
toString
public String toString()
- Returns a string with the name of the pass and the method being converted.
- Overrides:
toString in class Object
- Returns:
- a string with the name of the pass and the method being converted.
convert
public ControlFlowGraph convert()
- Perform conversion process from bytecode to quad.
- Returns:
- the control flow graph of the resulting quad representation.
traverseBB
public void traverseBB(BasicBlock bc_bb)
- Parameters:
bc_bb -
isLocal
public boolean isLocal(Operand op,
int index,
jq_Type type)
visitNOP
public void visitNOP()
- Overrides:
visitNOP in class BytecodeVisitor
visitACONST
public void visitACONST(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