com.ibm.wala.cfg
Class InducedCFG

java.lang.Object
  extended by com.ibm.wala.cfg.AbstractCFG
      extended by com.ibm.wala.cfg.InducedCFG
All Implemented Interfaces:
ControlFlowGraph, Constants, EdgeManager<IBasicBlock>, Graph<IBasicBlock>, NodeManager<IBasicBlock>, NumberedEdgeManager<IBasicBlock>, NumberedGraph<IBasicBlock>, NumberedNodeManager<IBasicBlock>, java.lang.Iterable<IBasicBlock>
Direct Known Subclasses:
AstInducedCFG

public class InducedCFG
extends AbstractCFG

A ControlFlowGraph computed from a set of SSA instructions This is a funny CFG ... we assume that there are always fallthru edges, even from throws and returns.


Nested Class Summary
 class InducedCFG.BranchVisitor
           
 class InducedCFG.PEIVisitor
           
 
Field Summary
 
Fields inherited from interface com.ibm.wala.shrikeBT.Constants
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_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, OP_xxxunusedxxx, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES
 
Constructor Summary
InducedCFG(SSAInstruction[] instructions, IMethod method, Context context)
          TODO: we do not yet support induced CFGS with exception handlers.
 
Method Summary
 boolean equals(java.lang.Object o)
           
 IBasicBlock getBlockForInstruction(int index)
           
 java.util.Set getExceptionHandlers()
           
 IInstruction[] getInstructions()
           
 int getProgramCounter(int index)
          Since this CFG is synthetic, for now we assume the instruction index is the same as the program counter
 int hashCode()
           
protected  InducedCFG.BranchVisitor makeBranchVisitor(boolean[] r)
           
protected  InducedCFG.PEIVisitor makePEIVisitor(boolean[] r)
           
 java.lang.String toString()
           
 
Methods inherited from class com.ibm.wala.cfg.AbstractCFG
addEdge, addExceptionalEdge, addNode, addNormalEdge, containsNode, entry, exit, getCatchBlocks, getExceptionalPredecessors, getExceptionalSuccessors, getExceptionalToExit, getMaxNumber, getMethod, getNode, getNormalPredecessors, getNormalSuccessors, getNormalToExit, getNumber, getNumberOfExceptionalIn, getNumberOfExceptionalOut, getNumberOfExceptionalOut, getNumberOfNodes, getNumberOfNormalIn, getNumberOfNormalOut, getPredNodeCount, getPredNodeNumbers, getPredNodes, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasEdge, hasExceptionalEdge, hasNormalEdge, init, isCatchBlock, iterateNodes, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, setCatchBlock
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

InducedCFG

public InducedCFG(SSAInstruction[] instructions,
                  IMethod method,
                  Context context)
TODO: we do not yet support induced CFGS with exception handlers.

Parameters:
instructions -
Throws:
java.lang.IllegalArgumentException - if instructions is null
Method Detail

hashCode

public int hashCode()
Specified by:
hashCode in class AbstractCFG

equals

public boolean equals(java.lang.Object o)
Specified by:
equals in class AbstractCFG

getInstructions

public IInstruction[] getInstructions()
Returns:
the instructions of this CFG, as an array.

makeBranchVisitor

protected InducedCFG.BranchVisitor makeBranchVisitor(boolean[] r)

makePEIVisitor

protected InducedCFG.PEIVisitor makePEIVisitor(boolean[] r)

getBlockForInstruction

public IBasicBlock getBlockForInstruction(int index)
Parameters:
index - an instruction index
Returns:
the basic block which contains this instruction.

getExceptionHandlers

public java.util.Set getExceptionHandlers()

toString

public java.lang.String toString()
Overrides:
toString in class AbstractCFG
See Also:
Object.toString()

getProgramCounter

public int getProgramCounter(int index)
Since this CFG is synthetic, for now we assume the instruction index is the same as the program counter

Parameters:
index - an instruction index
Returns:
the program counter (bytecode index) corresponding to that instruction
See Also:
ControlFlowGraph.getProgramCounter(int)