public abstract class AbstractIntRegisterMachine extends Object implements FixedPointConstants
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
Modifier and Type | Class and Description |
---|---|
protected static class |
AbstractIntRegisterMachine.BasicRegisterFlowProvider
This gives some basic facilities for shoving things around on the stack.
|
static interface |
AbstractIntRegisterMachine.FlowProvider
Interface which defines a flow function for a basic block
|
class |
AbstractIntRegisterMachine.MachineState
Representation of the state of the JVM stack machine at some program point.
|
protected static interface |
AbstractIntRegisterMachine.Meeter
A Meeter object provides the dataflow logic needed to meet the abstract machine state for a dataflow meet.
|
Modifier and Type | Field and Description |
---|---|
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 |
CHANGED, CHANGED_AND_FIXED, CHANGED_MASK, FIXED_MASK, NOT_CHANGED, NOT_CHANGED_AND_FIXED, SIDE_EFFECT_MASK
Modifier | Constructor and Description |
---|---|
protected |
AbstractIntRegisterMachine(DexCFG G) |
Modifier and Type | Method and Description |
---|---|
int[] |
allocateNewLocalsArray() |
AbstractIntRegisterMachine.MachineState |
getEntryState() |
AbstractIntRegisterMachine.MachineState |
getIn(DexCFG.BasicBlock bb) |
protected void |
init(AbstractIntRegisterMachine.Meeter meeter,
AbstractIntRegisterMachine.FlowProvider flow) |
protected void |
initializeVariables()
Convenience method ...
|
boolean |
solve() |
public static final int TOP
public static final int BOTTOM
public static final int UNANALYZED
public static final int IGNORE
protected final int maxLocals
public static final boolean OPTIMISTIC
protected AbstractIntRegisterMachine(DexCFG G)
protected void init(AbstractIntRegisterMachine.Meeter meeter, AbstractIntRegisterMachine.FlowProvider flow)
public boolean solve()
protected void initializeVariables()
public AbstractIntRegisterMachine.MachineState getEntryState()
public AbstractIntRegisterMachine.MachineState getIn(DexCFG.BasicBlock bb)
public int[] allocateNewLocalsArray()