An analyzer that uses AliasingFrames instead of bare Frames.
An analyzer that uses AliasingFrames instead of bare Frames. This can be used when an analysis needs to track aliases, but doesn't require a more specific Frame subclass.
A class for pseudo-instructions representing the initial producers of local values that have no producer instruction in the method:
A class for pseudo-instructions representing the initial producers of local values that have no producer instruction in the method:
this
The ASM built-in SourceValue analysis yields an empty producers set for such values. This leads to ambiguities. Example (in Java one can re-assign parameter):
void foo(int a) { if (a == 0) a = 1; return a; }
In the first frame of the method, the SoruceValue for parameter a
gives an empty set of
producer instructions.
In the frame of the IRETURN
instruction, the SoruceValue for parameter a
lists a single
producer instruction: the ISTORE 1
. This makes it look as if there was a single producer for
a
, where in fact it might still hold the parameter's initial value.
Type to represent nullness of values.
This class is required to override the newFrame
methods, which makes makes sure the analyzer
uses NullnessFrames.
Represents the nullness state for a local variable or stack value.
Represents the nullness state for a local variable or stack value.
Note that nullness of primitive values is not tracked, it will be always Unknown.
This class provides additional queries over ASM's built-in SourceValue
analysis.
This class provides additional queries over ASM's built-in SourceValue
analysis.
The analysis computes for each value in a frame a set of source instructions, which are the
potential producers. Most instructions produce either nothing or a stack value. For example,
a LOAD
instruction is the producer of the value pushed onto the stack. The exception are
STORE
instructions, which produce a new value for a local variable slot, so they are used
as producers for the value they stored.
Note that pseudo-instructions are used as initial producers for parameters and local variables. See the documentation on class InitialProducer.
This class implements the following queries over the data computed by the SourceValue analysis:
The following operations are considered as copying operations:
If ever needed, we could introduce a mode where primitive conversions (l2i) are considered as copying operations.