Go to the documentation of this file.
28 (expr.
id() == ID_symbol &&
48 if(expr.
id()==ID_index)
52 else if(expr.
id()==ID_member)
94 const exprt &object_expr =
100 if(subtype.
id() == ID_empty)
102 if(object_expr.
id() == ID_string_constant)
104 subtype = object_expr.
type();
110 if(array_size > pointer.
offset)
116 auto deep_object_opt =
119 exprt deep_object = deep_object_opt.value();
122 deep_object.
id() != ID_byte_extract_little_endian &&
123 deep_object.
id() != ID_byte_extract_big_endian)
static exprt conditional_cast(const exprt &expr, const typet &type)
#define CHECK_RETURN(CONDITION)
The type of an expression, extends irept.
const byte_extract_exprt & to_byte_extract_expr(const exprt &expr)
void get_dynamic_objects(std::vector< mp_integer > &objects) const
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
The plus expression Associativity is not specified.
Base class for all expressions.
pointer_logict(const namespacet &_ns)
const_iterator cbegin() const
const exprt & size() const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
typet & type()
Return the type of the expression.
Expression classes for byte-level operators.
bool has_prefix(const std::string &s, const std::string &prefix)
The null pointer constant.
const std::string & id2string(const irep_idt &d)
static optionalt< smt_termt > get_identifier(const exprt &expr, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_handle_identifiers, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_identifiers)
#define SYMEX_DYNAMIC_PREFIX
bool simplify(exprt &expr, const namespacet &ns)
mp_integer invalid_object
pointer_typet pointer_type(const typet &subtype)
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
exprt object_size(const exprt &pointer)
const irep_idt & id() const
numberingt< exprt, irep_hash > objects
bitvector_typet char_type()
bool is_zero() const
Return whether the expression is a constant representing 0.
optionalt< mp_integer > pointer_offset_size(const typet &type, const namespacet &ns)
Compute the size of a type in bytes, rounding up to full bytes.
bool is_dynamic_object(const exprt &expr) const
const_iterator cend() const
number_type number(const key_type &a)
optionalt< exprt > get_subexpression_at_offset(const exprt &expr, const mp_integer &offset_bytes, const typet &target_type_raw, const namespacet &ns)
const typet & base_type() const
The type of the data what we point to.
const array_typet & to_array_type(const typet &type)
Cast a typet to an array_typet.
const member_exprt & to_member_expr(const exprt &expr)
Cast an exprt to a member_exprt.
mp_integer add_object(const exprt &expr)
Operator to return the address of an object.
Semantic type conversion.
signedbv_typet pointer_diff_type()
The pointer type These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (they ...
A constant literal expression.
bool get_bool(const irep_idt &name) const
exprt pointer_expr(const pointert &pointer, const pointer_typet &type) const
Convert an (object,offset) pair to an expression.
const constant_exprt & to_constant_expr(const exprt &expr)
Cast an exprt to a constant_exprt.
const std::string integer2string(const mp_integer &n, unsigned base)