Go to the documentation of this file.
56 op.reserve(op.size()+2);
73 op.reserve(op.size()+3);
87 return id()==ID_constant;
96 get(ID_value)!=ID_false;
105 get(ID_value)==ID_false;
114 set(ID_value, value?ID_true:ID_false);
121 return type().
id()==ID_bool;
139 if(type_id==ID_integer || type_id==ID_natural)
143 else if(type_id==ID_rational)
151 type_id == ID_unsignedbv || type_id == ID_signedbv ||
152 type_id == ID_c_bool || type_id == ID_c_bit_field)
156 else if(type_id==ID_fixedbv)
161 else if(type_id==ID_floatbv)
166 else if(type_id==ID_pointer)
189 if(type_id==ID_integer || type_id==ID_natural)
196 else if(type_id==ID_rational)
201 return rat_value.
is_one();
203 else if(type_id==ID_unsignedbv || type_id==ID_signedbv)
211 else if(type_id==ID_fixedbv)
216 else if(type_id==ID_floatbv)
248 template <
typename T>
254 bool operands_pushed;
255 explicit stack_entryt(T *_e) : e(_e), operands_pushed(
false)
260 std::stack<stack_entryt> stack;
262 stack.emplace(_expr);
264 while(!stack.empty())
266 auto &top = stack.top();
267 if(top.operands_pushed)
275 top.operands_pushed =
true;
276 for(
auto &op : top.e->operands())
292 template <
typename T>
295 std::stack<T *> stack;
299 while(!stack.empty())
301 T &expr = *stack.top();
306 for(
auto &op : expr.operands())
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
void move_to_operands(exprt &expr)
Move the given argument to the end of exprt's operands.
const_depth_iteratort depth_cbegin() const
depth_iteratort depth_begin()
#define CHECK_RETURN(CONDITION)
std::size_t size() const
Amount of nodes this expression tree contains.
The type of an expression, extends irept.
const mp_integer string2integer(const std::string &n, unsigned base)
void make_bool(bool value)
Replace the expression by a Boolean expression representing value.
Base class for all expressions.
bool is_true() const
Return whether the expression is a constant representing true.
void visit(class expr_visitort &visitor)
These are pre-order traversal visitors, i.e., the visitor is executed on a node before its children h...
bool is_false() const
Return whether the expression is a constant representing false.
typet & type()
Return the type of the expression.
const std::string & id2string(const irep_idt &d)
#define forall_operands(it, expr)
void visit_post(std::function< void(exprt &)>)
These are post-order traversal visitors, i.e., the visitor is executed on a node after its children h...
const source_locationt & find_source_location() const
Get a source_locationt from the expression or from its operands (non-recursively).
const std::string & id_string() const
void visit_post_template(std::function< void(T &)> visitor, T *_expr)
const irep_idt & id() const
std::vector< exprt > operandst
static void visit_pre_template(std::function< void(T &)> visitor, T *_expr)
std::size_t get_width() const
bool is_zero() const
Return whether the expression is a constant representing 0.
Forward depth-first search iterators These iterators' copy operations are expensive,...
const irep_idt & get(const irep_namet &name) const
const_depth_iteratort depth_cend() const
bool value_is_zero_string() const
void set(const irep_namet &name, const irep_idt &value)
bool is_constant() const
Return whether the expression is a constant.
const_unique_depth_iteratort unique_depth_cend() const
void visit_pre(std::function< void(exprt &)>)
bool is_one() const
Return whether the expression is a constant representing 1.
const irept & get_nil_irep()
const_unique_depth_iteratort unique_depth_begin() const
const_unique_depth_iteratort unique_depth_cbegin() const
A constant literal expression.
const_unique_depth_iteratort unique_depth_end() const
depth_iteratort depth_end()
bool is_boolean() const
Return whether the expression represents a Boolean.
API to expression classes.
const irep_idt & get_value() const
const source_locationt & source_location() const
const bitvector_typet & to_bitvector_type(const typet &type)
Cast a typet to a bitvector_typet.
const constant_exprt & to_constant_expr(const exprt &expr)
Cast an exprt to a constant_exprt.