com.ibm.wala.analysis.stackMachine
Class AbstractIntStackMachine

java.lang.Object
  extended by com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine
All Implemented Interfaces:
FixedPointConstants
Direct Known Subclasses:
SSABuilder

public abstract class AbstractIntStackMachine
extends java.lang.Object
implements FixedPointConstants

Skeleton of functionality to propogate information through the Java bytecode stack machine using ShrikeBT. This class computes properties the Java operand stack and of the local variables at the beginning of each basic block. In this implementation, each dataflow variable value is an integer, and the "meeter" object provides the meets


Nested Class Summary
protected static class AbstractIntStackMachine.BasicStackFlowProvider
          This gives some basic facilities for shoving things around on the stack.
static interface AbstractIntStackMachine.FlowProvider
          Interface which defines a flow function for a basic block
 class AbstractIntStackMachine.MachineState
          Representation of the state of the JVM stack machine at some program point.
protected static interface AbstractIntStackMachine.Meeter
          A Meeter object provides the dataflow logic needed to meet the abstract machine state for a dataflow meet.
 
Field Summary
static int BOTTOM
           
static int IGNORE
           
protected  int maxLocals
          the max number of locals in play
static boolean OPTIMISTIC
          Should uninitialized variables be considered TOP (optimistic) or BOTTOM (pessimistic);
static int TOP
           
static int UNANALYZED
           
 
Fields inherited from interface com.ibm.wala.fixpoint.FixedPointConstants
CHANGED, CHANGED_AND_FIXED, CHANGED_MASK, FIXED_MASK, NOT_CHANGED, NOT_CHANGED_AND_FIXED, SIDE_EFFECT_MASK
 
Constructor Summary
protected AbstractIntStackMachine(ShrikeCFG G)
           
 
Method Summary
 int[] allocateNewLocalsArray()
           
 AbstractIntStackMachine.MachineState getEntryState()
           
 AbstractIntStackMachine.MachineState getIn(ShrikeCFG.BasicBlock bb)
           
protected  void init(AbstractIntStackMachine.Meeter meeter, AbstractIntStackMachine.FlowProvider flow)
           
protected  void initializeVariables()
          Convenience method ...
 boolean solve()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TOP

public static final int TOP
See Also:
Constant Field Values

BOTTOM

public static final int BOTTOM
See Also:
Constant Field Values

UNANALYZED

public static final int UNANALYZED
See Also:
Constant Field Values

IGNORE

public static final int IGNORE
See Also:
Constant Field Values

maxLocals

protected final int maxLocals
the max number of locals in play


OPTIMISTIC

public static final boolean OPTIMISTIC
Should uninitialized variables be considered TOP (optimistic) or BOTTOM (pessimistic);

See Also:
Constant Field Values
Constructor Detail

AbstractIntStackMachine

protected AbstractIntStackMachine(ShrikeCFG G)
Method Detail

init

protected void init(AbstractIntStackMachine.Meeter meeter,
                    AbstractIntStackMachine.FlowProvider flow)
Parameters:
meeter -
flow -

solve

public boolean solve()

initializeVariables

protected void initializeVariables()
Convenience method ... a little ugly .. perhaps delete later.


getEntryState

public AbstractIntStackMachine.MachineState getEntryState()

getIn

public AbstractIntStackMachine.MachineState getIn(ShrikeCFG.BasicBlock bb)
Returns:
the state at the entry to a given block

allocateNewLocalsArray

public int[] allocateNewLocalsArray()