#include <constant_pointer_abstract_object.h>
+ Inheritance diagram for constant_pointer_abstract_objectt:
+ Collaboration diagram for constant_pointer_abstract_objectt:
To try and find a constant expression for this abstract object.
Print the value of the pointer.
A helper function to dereference a value from a pointer.
A helper function to evaluate writing to a pointers value.
Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true.
Interface for transforms.
A helper function to evaluate writing to a component of an abstract object.
Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true.
Construct an abstract object from the expression.
Get the real type of the variable this abstract object is representing.
Find out if the abstract object is top.
Find out if the abstract object is bottom.
Verify the internal structure of an abstract_object is correct.
Converts to an invariant expression.
Print the value of the abstract object.
Determine whether 'this' abstract_object has been modified in comparison to a previous 'before' state.
Base implementation of the meet operation: only used if no more precise abstraction can be used, can only result in {TOP, BOTTOM, one of the original objects}.
Update the write location context for an abstract object.
Update the merge location context for an abstract object.
Apply a visitor operation to all sub elements of this abstract_object.
Protected Member Functions
Set this abstract object to be the result of merging this abstract object.
to_predicate implementation - derived classes will override
Create a new abstract object that is the result of the merge, unless the object would be unchanged, then would return itself.
To detect the cases where the base merge is sufficient to do a merge We can't do if this->
is_bottom() since we want the specific.
Helper function for base meet.
Helper function to decide if base meet implementation should be used.
Merges two constant pointers.
Additional Inherited Members
Dump all elements in m1 that are different or missing in m2.
Interface method for the meet operation.
Detailed Description
Member Typedef Documentation
◆ constant_pointer_abstract_pointert
Constructor & Destructor Documentation
◆ constant_pointer_abstract_objectt() [1/3]
constant_pointer_abstract_objectt::constant_pointer_abstract_objectt
(
const typet &
type,
)
- Parameters
-
type the type the abstract_object is representing
top is the abstract_object starting as top
bottom is the abstract_object starting as bottom
Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true
Definition at line 22 of file constant_pointer_abstract_object.cpp.
◆ constant_pointer_abstract_objectt() [2/3]
constant_pointer_abstract_objectt::constant_pointer_abstract_objectt
(
const typet &
type,
)
◆ constant_pointer_abstract_objectt() [3/3]
constant_pointer_abstract_objectt::constant_pointer_abstract_objectt
(
const exprt &
expr,
)
- Parameters
-
expr the expression to use as the starting pointer for an abstract object
environment the environment in which we evaluate expr
ns the current namespace
Definition at line 39 of file constant_pointer_abstract_object.cpp.
Member Function Documentation
◆ get_statistics()
◆ merge()
)
const
overrideprotectedvirtual
Set this abstract object to be the result of merging this abstract object.
This calls the merge_constant_pointers if we are trying to merge a constant pointer we use the constant pointer constant pointer merge
- Parameters
-
op1 the pointer being merged
widen_mode Indicates if this is a widening merge
- Returns
- Returns the result of the merge.
Reimplemented from abstract_objectt.
Definition at line 57 of file constant_pointer_abstract_object.cpp.
◆ merge_constant_pointers()
Merges two constant pointers.
If they are pointing at the same value, we merge, otherwise we set to top.
- Parameters
-
other the pointer being merged
widen_mode Indicates if this is a widening merge
- Returns
- Returns a new abstract object that is the result of the merge unless the merge is the same as this abstract object, in which case it returns this.
Definition at line 112 of file constant_pointer_abstract_object.cpp.
◆ mutable_clone()
inlineoverrideprotectedvirtual
◆ offset()
exprt constant_pointer_abstract_objectt::offset
(
)
const
private
◆ offset_from()
◆ output()
void constant_pointer_abstract_objectt::output
(
std::ostream &
out,
)
const
override
Print the value of the pointer.
Either NULL if nullpointer or ptr -> ( output of what the pointer is pointing to).
- Parameters
-
out the stream to write to
ai the domain in which this object appears given as
ai_baset so that the interface is the same across all domains
ns the current namespace
Definition at line 142 of file constant_pointer_abstract_object.cpp.
◆ ptr_comparison_expr()
exprt constant_pointer_abstract_objectt::ptr_comparison_expr
(
const exprt &
expr,
)
const
overridevirtual
◆ ptr_diff()
◆ read_dereference()
A helper function to dereference a value from a pointer.
Providing the pointer can only be pointing at one thing, returns an abstract object representing that thing. If null or top will return top.
- Parameters
-
env the environment
ns the namespace
- Returns
- An abstract object representing the value this pointer is pointing to
Implements abstract_pointer_objectt.
Definition at line 189 of file constant_pointer_abstract_object.cpp.
◆ same_target()
◆ to_constant()
exprt constant_pointer_abstract_objectt::to_constant
(
)
const
overridevirtual
To try and find a constant expression for this abstract object.
- Returns
- Returns an expression representing the value if it can. Returns a nil expression if it can be more than one value. Returns null_pointer expression if it must be null Returns an address_of_exprt with the value set to the result of to_constant called on whatever abstract object this pointer is pointing to.
Reimplemented from abstract_objectt.
Definition at line 128 of file constant_pointer_abstract_object.cpp.
◆ to_predicate_internal()
exprt constant_pointer_abstract_objectt::to_predicate_internal
(
const exprt &
name )
const
overrideprotectedvirtual
to_predicate implementation - derived classes will override
- Parameters
-
name - the variable name to substitute into the expression
- Returns
- Returns an exprt representing the object as an invariant.
Reimplemented from abstract_objectt.
Definition at line 387 of file constant_pointer_abstract_object.cpp.
◆ typecast()
◆ write_dereference()
A helper function to evaluate writing to a pointers value.
If the pointer can only be pointing to one element that it overwrites that element (or merges if merging_write) with the new value. If don't know what we are pointing to, we delegate to the parent.
- Parameters
-
environment the environment
ns the namespace
stack the remaining stack
value the value to write to the dereferenced pointer
merging_write is it a merging write (i.e. we aren't certain we are writing to this particular pointer therefore the value should be merged with whatever is already there or we are certain we are writing to this pointer so therefore the value can be replaced
- Returns
- A modified abstract object representing this pointer after it has been written to.
Implements abstract_pointer_objectt.
Definition at line 207 of file constant_pointer_abstract_object.cpp.
Member Data Documentation
◆ value_stack
The documentation for this class was generated from the following files: