This type determines in which way the returned values are recorded.
This type determines in which way the returned values are recorded.
For example, if it is sufficient to just record the last value that was
returned by a specific return instruction, then the type could be DomainValue
and the implementation of joinReturnedValues(...)
would just return the last
given value. Furthermore, returnedValue
would be the identity function.
However, if you have a (more) precise domain you may want to collect all
returned values. In this case the type of ReturnedValue
could be Set[DomainValue].
This type determines in which way thrown exceptions are recorded.
This type determines in which way thrown exceptions are recorded.
For example, if you want to collect all thrown exceptions, then
the type of ThrownException
could be Set[ThrownException]
.
The implementation of org.opalj.ai.domain.RecordLastReturnedValues. It follows the same pattern.
The implementation of org.opalj.ai.domain.RecordAllThrownExceptions.
Joins the previously returned value and the newly given value
.
Joins the previously returned value and the newly given value
. Both values
are returned by the same return instruction (same pc
).
The program counter of the return instruction. The returned
values are automatically associated with the pc of the instruction. Hence,
it is not strictly required to store it in the ReturnedValue
.
For details study the documentation of the abstract type ReturnedValue
and study the subclass(es) of RecordReturnedValues
.
Joins the previously thrown exception(s) and the newly thrown exception.
Joins the previously thrown exception(s) and the newly thrown exception. Both
exceptions are thrown by the same instruction (same pc
).
The instruction might be an athrow
instruction or some other instruction
that throws an exception.
For details study the documentation of the abstract type ThrownException
and study the subclass(es) of RecordThrownExceptions
.
Wraps the given value into a ReturnedValue
.
Wraps the given value into a ReturnedValue
.
The program counter of the return instruction. The returned
values are automatically associated with the pc of the instruction. Hence,
it is not strictly required to store it in the ReturnedValue
.
For details study the documentation of the abstract type ReturnedValue
and study the subclass(es) of RecordReturnedValues
.
Wraps the given value into a ThrownException
.
Wraps the given value into a ThrownException
.
The program counter of the instruction that throws the exception. It is automatically stored in the map that associates instructions with the exceptions that are thrown.
For details study the documentation of the abstract type ThrownException
and study the subclass(es) of RecordThrownExceptions
.
Called by the abstract interpreter when an exception is thrown that is not (guaranteed to be) handled within the same method.
Called by the abstract interpreter when an exception is thrown that is not (guaranteed to be) handled within the same method.
If the original exception value is null
(/*E.g.*/throw null;
), then
the exception that is actually thrown is a new NullPointerException
. This
situation is, however, completely handled by OPAL and the exception value
is hence never null
.
Returns the set of all returned values.
Returns the set of all returned values.
The given value
, which is a value with computational type reference, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type reference, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type double, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type double, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type float, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type float, is returned
by the return instruction with the given pc
.
Override this method to perform custom initialization steps.
Override this method to perform custom initialization steps.
Always use abstract override
and call the super method; it is recommended
to complete the initialization of this domain before calling the super method.
The given value
, which is a value with computational type integer, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type integer, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type long, is returned
by the return instruction with the given pc
.
The given value
, which is a value with computational type long, is returned
by the return instruction with the given pc
.
Called when a return instruction with the given pc
is reached.
Called when a return instruction with the given pc
is reached.
In other words, when the method returns normally.
true
if the method returned due to a ("void"|a|i|l|f|d)return
instruction.
true
if the method returned due to a ("void"|a|i|l|f|d)return
instruction.
This method may only be called after the abstract interpretation of a method has completed.
Adapts and returns the returned value.
Adapts and returns the returned value.
This method may only be called after the abstract interpretation of a method has completed.
,This method is only defined if the method returned normally. In this case
None
is returned if the method's return type is void
;
Some(DomainValue)
is returned otherwise.
Maps the returned value back to the original operand value if possible.
Maps the returned value back to the original operand value if possible.
This method may only be called after the abstract interpretation of a method has completed.
,This method is only defined if the method returned normally. In this case
None
is returned if the method's return type is void
;
Some(DomainValue)
is returned otherwise.
Adapts and returns the exceptions that are thrown by the called method.
Adapts and returns the exceptions that are thrown by the called method.
In general, for each type of exception there should be at most one
ExceptionValue
.
This method may only be called after the abstract interpretation of a method has completed.
Records the results of the evaluation of the
current
method such that the results can directly be adapted to the calling context and can be used by the caller to continue the abstract interpretation of the calling method.