Package org.objectweb.asm.tree.analysis
Class Frame<V extends Value>
- java.lang.Object
-
- org.objectweb.asm.tree.analysis.Frame<V>
-
- Type Parameters:
V
- type of the Value used for the analysis.
public class Frame<V extends Value> extends Object
A symbolic execution stack frame. A stack frame contains a set of local variable slots, and an operand stack. Warning: long and double values are represented by two slots in local variables, and by one slot in the operand stack.- Author:
- Eric Bruneton
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearStack()
Clears the operand stack of this frame.void
execute(AbstractInsnNode insn, Interpreter<V> interpreter)
V
getLocal(int i)
Returns the value of the given local variable.int
getLocals()
Returns the maximum number of local variables of this frame.int
getMaxStackSize()
Returns the maximum stack size of this frame.V
getStack(int i)
Returns the value of the given operand stack slot.int
getStackSize()
Returns the number of values in the operand stack of this frame.Frame<V>
init(Frame<? extends V> src)
Copies the state of the given frame into this frame.boolean
merge(Frame<? extends V> frame, boolean[] access)
Merges this frame with the given frame (case of a RET instruction).boolean
merge(Frame<? extends V> frame, Interpreter<V> interpreter)
Merges this frame with the given frame.V
pop()
Pops a value from the operand stack of this frame.void
push(V value)
Pushes a value into the operand stack of this frame.void
setLocal(int i, V value)
Sets the value of the given local variable.void
setReturn(V v)
Sets the expected return type of the analyzed method.String
toString()
Returns a string representation of this frame.
-
-
-
Method Detail
-
init
public Frame<V> init(Frame<? extends V> src)
Copies the state of the given frame into this frame.- Parameters:
src
- a frame.- Returns:
- this frame.
-
setReturn
public void setReturn(V v)
Sets the expected return type of the analyzed method.- Parameters:
v
- the expected return type of the analyzed method, or null if the method returns void.
-
getLocals
public int getLocals()
Returns the maximum number of local variables of this frame.- Returns:
- the maximum number of local variables of this frame.
-
getMaxStackSize
public int getMaxStackSize()
Returns the maximum stack size of this frame.- Returns:
- the maximum stack size of this frame.
-
getLocal
public V getLocal(int i) throws IndexOutOfBoundsException
Returns the value of the given local variable.- Parameters:
i
- a local variable index.- Returns:
- the value of the given local variable.
- Throws:
IndexOutOfBoundsException
- if the variable does not exist.
-
setLocal
public void setLocal(int i, V value) throws IndexOutOfBoundsException
Sets the value of the given local variable.- Parameters:
i
- a local variable index.value
- the new value of this local variable.- Throws:
IndexOutOfBoundsException
- if the variable does not exist.
-
getStackSize
public int getStackSize()
Returns the number of values in the operand stack of this frame. Long and double values are treated as single values.- Returns:
- the number of values in the operand stack of this frame.
-
getStack
public V getStack(int i) throws IndexOutOfBoundsException
Returns the value of the given operand stack slot.- Parameters:
i
- the index of an operand stack slot.- Returns:
- the value of the given operand stack slot.
- Throws:
IndexOutOfBoundsException
- if the operand stack slot does not exist.
-
clearStack
public void clearStack()
Clears the operand stack of this frame.
-
pop
public V pop() throws IndexOutOfBoundsException
Pops a value from the operand stack of this frame.- Returns:
- the value that has been popped from the stack.
- Throws:
IndexOutOfBoundsException
- if the operand stack is empty.
-
push
public void push(V value) throws IndexOutOfBoundsException
Pushes a value into the operand stack of this frame.- Parameters:
value
- the value that must be pushed into the stack.- Throws:
IndexOutOfBoundsException
- if the operand stack is full.
-
execute
public void execute(AbstractInsnNode insn, Interpreter<V> interpreter) throws AnalyzerException
- Throws:
AnalyzerException
-
merge
public boolean merge(Frame<? extends V> frame, Interpreter<V> interpreter) throws AnalyzerException
Merges this frame with the given frame.- Parameters:
frame
- a frame.interpreter
- the interpreter used to merge values.- Returns:
- true if this frame has been changed as a result of the merge operation, or false otherwise.
- Throws:
AnalyzerException
- if the frames have incompatible sizes.
-
merge
public boolean merge(Frame<? extends V> frame, boolean[] access)
Merges this frame with the given frame (case of a RET instruction).- Parameters:
frame
- a frameaccess
- the local variables that have been accessed by the subroutine to which the RET instruction corresponds.- Returns:
- true if this frame has been changed as a result of the merge operation, or false otherwise.
-
-