#include <abstract_object.h>
Definition at line 72 of file abstract_object.h.
Definition at line 409 of file abstract_object.h.
Definition at line 406 of file abstract_object.h.
Definition at line 204 of file abstract_object.h.
Definition at line 206 of file abstract_object.h.
Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true.
Definition at line 19 of file abstract_object.cpp.
Construct an abstract object from the expression.
Definition at line 25 of file abstract_object.cpp.
Definition at line 95 of file abstract_object.h.
Helper function for base meet.
Two cases: return itself (if trivially contained in other); return BOTTOM otherwise.
Definition at line 70 of file abstract_object.cpp.
Helper function for base meet, in case additional work was needed.
Base implementation simply return pointer to itself.
Definition at line 85 of file abstract_object.cpp.
Create a new abstract object that is the result of the merge, unless the object would be unchanged, then would return itself.
Definition at line 45 of file abstract_object.cpp.
Helper function for abstract_objectt::abstract_object_merge to perform any additional actions after the base abstract_object_merge has completed it's actions but immediately prior to it returning.
As such, this function gives the ability to perform additional work for a merge.
This default implementation just returns itself.
Reimplemented in data_dependency_contextt, liveness_contextt, and write_location_contextt.
Definition at line 57 of file abstract_object.cpp.
Definition at line 313 of file abstract_object.h.
Definition at line 256 of file abstract_object.cpp.
Dump all elements in m1 that are different or missing in m2.
Definition at line 273 of file abstract_object.cpp.
Interface for transforms.
To try and resolve different expressions with the maximum level of precision available.
Reimplemented in abstract_value_objectt, abstract_aggregate_objectt< aggregate_typet, aggregate_traitst >, abstract_aggregate_objectt< full_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< full_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< two_value_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_union_abstract_objectt, union_aggregate_typet >, abstract_pointer_objectt, and context_abstract_objectt.
Definition at line 98 of file abstract_object.cpp.
Reimplemented in abstract_aggregate_objectt< aggregate_typet, aggregate_traitst >, abstract_aggregate_objectt< full_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< full_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< two_value_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_union_abstract_objectt, union_aggregate_typet >, abstract_pointer_objectt, constant_abstract_valuet, constant_pointer_abstract_objectt, context_abstract_objectt, and interval_abstract_valuet.
Definition at line 296 of file abstract_object.cpp.
Determine whether 'this' abstract_object has been modified in comparison to a previous 'before' state.
Default implementation, with no other information to go on falls back to relying on copy-on-write and pointer inequality to indicate if an abstract_objectt has been modified
Reimplemented in context_abstract_objectt, data_dependency_contextt, and write_location_contextt.
Definition at line 227 of file abstract_object.h.
Reimplemented in constant_abstract_valuet, and interval_abstract_valuet.
Definition at line 357 of file abstract_object.h.
Reimplemented in constant_abstract_valuet, and interval_abstract_valuet.
Definition at line 352 of file abstract_object.h.
Find out if the abstract object is bottom.
Reimplemented in context_abstract_objectt.
Definition at line 146 of file abstract_object.cpp.
Find out if the abstract object is top.
Reimplemented in context_abstract_objectt.
Definition at line 141 of file abstract_object.cpp.
Definition at line 303 of file abstract_object.h.
Interface method for the meet operation.
Decides whether to use the base implementation or if a more precise abstraction is attainable.
Definition at line 227 of file abstract_object.cpp.
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}.
Reimplemented in abstract_value_objectt, data_dependency_contextt, and write_location_contextt.
Definition at line 65 of file abstract_object.cpp.
Definition at line 195 of file abstract_object.cpp.
Definition at line 208 of file abstract_object.cpp.
Create a new abstract object that is the result of the merge, unless the object would be unchanged, then would return itself.
Reimplemented in constant_pointer_abstract_objectt, abstract_value_objectt, data_dependency_contextt, full_array_abstract_objectt, full_struct_abstract_objectt, liveness_contextt, value_set_pointer_abstract_objectt, and write_location_contextt.
Definition at line 38 of file abstract_object.cpp.
Update the merge location context for an abstract object.
Reimplemented in full_array_abstract_objectt, full_struct_abstract_objectt, and liveness_contextt.
Definition at line 251 of file abstract_object.cpp.
Reimplemented in constant_abstract_valuet, constant_pointer_abstract_objectt, data_dependency_contextt, full_array_abstract_objectt, full_struct_abstract_objectt, interval_abstract_valuet, liveness_contextt, value_set_abstract_objectt, value_set_pointer_abstract_objectt, and write_location_contextt.
Definition at line 412 of file abstract_object.h.
Print the value of the abstract object.
Reimplemented in context_abstract_objectt, data_dependency_contextt, liveness_contextt, and write_location_contextt.
Definition at line 176 of file abstract_object.cpp.
Definition at line 470 of file abstract_object.h.
Definition at line 465 of file abstract_object.h.
Reimplemented in context_abstract_objectt.
Definition at line 378 of file abstract_object.h.
Definition at line 460 of file abstract_object.h.
Reimplemented in context_abstract_objectt, full_array_abstract_objectt, interval_abstract_valuet, and value_set_abstract_objectt.
Definition at line 375 of file abstract_object.h.
Helper function to decide if base meet implementation should be used.
Definition at line 238 of file abstract_object.cpp.
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.
Definition at line 221 of file abstract_object.cpp.
Converts to a constant expression if possible.
If abstract element represents a single value, then that value, otherwise nil. E.G. if it is an interval then this will be x if it is [x,x] This is the (sort of) dual to the constant_exprt constructor that allows an object to be built from a value.
Reimplemented in constant_abstract_valuet, constant_pointer_abstract_objectt, context_abstract_objectt, interval_abstract_valuet, value_set_abstract_objectt, and value_set_pointer_abstract_objectt.
Definition at line 156 of file abstract_object.cpp.
Converts to an invariant expression.
The the abstract element represents a single value the expression will have the form name = value, if the value is an interval it will have the the form lower <= name <= upper, etc. If the value is bottom returns false, if top returns true.
Definition at line 161 of file abstract_object.cpp.
to_predicate implementation - derived classes will override
Reimplemented in constant_abstract_valuet, constant_pointer_abstract_objectt, context_abstract_objectt, full_array_abstract_objectt, full_struct_abstract_objectt, interval_abstract_valuet, value_set_abstract_objectt, and value_set_pointer_abstract_objectt.
Definition at line 170 of file abstract_object.cpp.
Get the real type of the variable this abstract object is representing.
Reimplemented in context_abstract_objectt.
Definition at line 33 of file abstract_object.cpp.
Reimplemented in context_abstract_objectt.
Definition at line 291 of file abstract_object.cpp.
Verify the internal structure of an abstract_object is correct.
Reimplemented in full_array_abstract_objectt, and full_struct_abstract_objectt.
Definition at line 151 of file abstract_object.cpp.
Apply a visitor operation to all sub elements of this abstract_object.
A sub element might be a member of a struct, or an element of an array, for instance, but this is entirely determined by the particular derived instance of abstract_objectt.
Reimplemented in full_array_abstract_objectt, and full_struct_abstract_objectt.
Definition at line 347 of file abstract_object.h.
A helper function to evaluate writing to a component of an abstract object.
More precise abstractions may override this to update what they are storing for a specific component.
Reimplemented in abstract_value_objectt, abstract_aggregate_objectt< aggregate_typet, aggregate_traitst >, abstract_aggregate_objectt< full_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< full_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_array_abstract_objectt, array_aggregate_typet >, abstract_aggregate_objectt< two_value_struct_abstract_objectt, struct_aggregate_typet >, abstract_aggregate_objectt< two_value_union_abstract_objectt, union_aggregate_typet >, abstract_pointer_objectt, context_abstract_objectt, data_dependency_contextt, liveness_contextt, and write_location_contextt.
Definition at line 130 of file abstract_object.cpp.
Update the write location context for an abstract object.
Reimplemented in context_abstract_objectt, full_array_abstract_objectt, and full_struct_abstract_objectt.
Definition at line 245 of file abstract_object.cpp.
Definition at line 370 of file abstract_object.h.
To enforce copy-on-write these are private and have read-only accessors.
Definition at line 369 of file abstract_object.h.
Definition at line 371 of file abstract_object.h.