CBMC
replace_symbol.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_UTIL_REPLACE_SYMBOL_H
11 #define CPROVER_UTIL_REPLACE_SYMBOL_H
12 
13 //
14 // true: did nothing
15 // false: replaced something
16 //
17 
18 #include "expr.h"
19 
20 #include <set>
21 #include <unordered_map>
22 
28 {
29 public:
30  typedef std::unordered_map<irep_idt, exprt> expr_mapt;
31 
35  void insert(const class symbol_exprt &old_expr,
36  const exprt &new_expr);
37 
39  void set(const class symbol_exprt &old_expr, const exprt &new_expr);
40 
41  virtual bool replace(exprt &dest) const;
42  virtual bool replace(typet &dest) const;
43 
44  void operator()(exprt &dest) const
45  {
46  replace(dest);
47  }
48 
49  void operator()(typet &dest) const
50  {
51  replace(dest);
52  }
53 
54  void clear()
55  {
56  expr_map.clear();
57  }
58 
59  bool empty() const
60  {
61  return expr_map.empty();
62  }
63 
64  std::size_t erase(const irep_idt &id)
65  {
66  return expr_map.erase(id);
67  }
68 
69  expr_mapt::iterator erase(expr_mapt::iterator it)
70  {
71  return expr_map.erase(it);
72  }
73 
74  bool replaces_symbol(const irep_idt &id) const
75  {
76  return expr_map.find(id) != expr_map.end();
77  }
78 
80  virtual ~replace_symbolt();
81 
82  const expr_mapt &get_expr_map() const
83  {
84  return expr_map;
85  }
86 
88  {
89  return expr_map;
90  }
91 
92 protected:
94  mutable std::set<irep_idt> bindings;
95 
96  virtual bool replace_symbol_expr(symbol_exprt &dest) const;
97 
98  bool have_to_replace(const exprt &dest) const;
99  bool have_to_replace(const typet &type) const;
100 };
101 
103 {
104 public:
106  {
107  }
108 
109  void insert(const symbol_exprt &old_expr, const exprt &new_expr);
110 
111 protected:
112  bool replace_symbol_expr(symbol_exprt &dest) const override;
113 };
114 
124 {
125 public:
126  bool replace(exprt &dest) const override;
127 
128 private:
129  mutable bool require_lvalue = false;
130 
132  {
133  public:
136  {
137  require_lvalue = value;
138  }
139 
141  {
143  }
144 
145  private:
148  };
149 
150  bool replace_symbol_expr(symbol_exprt &dest) const override;
151 };
152 
153 #endif // CPROVER_UTIL_REPLACE_SYMBOL_H
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
address_of_aware_replace_symbolt
Replace symbols with constants while maintaining syntactically valid expressions.
Definition: replace_symbol.h:123
replace_symbolt::~replace_symbolt
virtual ~replace_symbolt()
Definition: replace_symbol.cpp:20
replace_symbolt::have_to_replace
bool have_to_replace(const exprt &dest) const
Definition: replace_symbol.cpp:159
replace_symbolt::replaces_symbol
bool replaces_symbol(const irep_idt &id) const
Definition: replace_symbol.h:74
address_of_aware_replace_symbolt::set_require_lvalue_and_backupt::require_lvalue
bool & require_lvalue
Definition: replace_symbol.h:146
address_of_aware_replace_symbolt::set_require_lvalue_and_backupt::~set_require_lvalue_and_backupt
~set_require_lvalue_and_backupt()
Definition: replace_symbol.h:140
typet
The type of an expression, extends irept.
Definition: type.h:28
replace_symbolt::replace_symbolt
replace_symbolt()
Definition: replace_symbol.cpp:16
replace_symbolt::erase
expr_mapt::iterator erase(expr_mapt::iterator it)
Definition: replace_symbol.h:69
replace_symbolt::expr_mapt
std::unordered_map< irep_idt, exprt > expr_mapt
Definition: replace_symbol.h:30
replace_symbolt::get_expr_map
const expr_mapt & get_expr_map() const
Definition: replace_symbol.h:82
exprt
Base class for all expressions.
Definition: expr.h:55
replace_symbolt::expr_map
expr_mapt expr_map
Definition: replace_symbol.h:93
symbol_exprt
Expression to hold a symbol (variable)
Definition: std_expr.h:112
replace_symbolt::get_expr_map
expr_mapt & get_expr_map()
Definition: replace_symbol.h:87
address_of_aware_replace_symbolt::set_require_lvalue_and_backupt::set_require_lvalue_and_backupt
set_require_lvalue_and_backupt(bool &require_lvalue, const bool value)
Definition: replace_symbol.h:134
expr.h
replace_symbolt::replace_symbol_expr
virtual bool replace_symbol_expr(symbol_exprt &dest) const
Definition: replace_symbol.cpp:43
replace_symbolt::operator()
void operator()(typet &dest) const
Definition: replace_symbol.h:49
replace_symbolt::clear
void clear()
Definition: replace_symbol.h:54
address_of_aware_replace_symbolt::replace
bool replace(exprt &dest) const override
Definition: replace_symbol.cpp:373
replace_symbolt::operator()
void operator()(exprt &dest) const
Definition: replace_symbol.h:44
unchecked_replace_symbolt::unchecked_replace_symbolt
unchecked_replace_symbolt()
Definition: replace_symbol.h:105
replace_symbolt::replace
virtual bool replace(exprt &dest) const
Definition: replace_symbol.cpp:59
replace_symbolt::empty
bool empty() const
Definition: replace_symbol.h:59
replace_symbolt::insert
void insert(const class symbol_exprt &old_expr, const exprt &new_expr)
Sets old_expr to be replaced by new_expr if we don't already have a replacement; otherwise does nothi...
Definition: replace_symbol.cpp:24
address_of_aware_replace_symbolt::require_lvalue
bool require_lvalue
Definition: replace_symbol.h:129
replace_symbolt::bindings
std::set< irep_idt > bindings
Definition: replace_symbol.h:94
unchecked_replace_symbolt::insert
void insert(const symbol_exprt &old_expr, const exprt &new_expr)
Definition: replace_symbol.cpp:354
replace_symbolt::erase
std::size_t erase(const irep_idt &id)
Definition: replace_symbol.h:64
unchecked_replace_symbolt
Definition: replace_symbol.h:102
address_of_aware_replace_symbolt::replace_symbol_expr
bool replace_symbol_expr(symbol_exprt &dest) const override
Definition: replace_symbol.cpp:437
address_of_aware_replace_symbolt::set_require_lvalue_and_backupt::prev_value
bool prev_value
Definition: replace_symbol.h:147
address_of_aware_replace_symbolt::set_require_lvalue_and_backupt
Definition: replace_symbol.h:131
unchecked_replace_symbolt::replace_symbol_expr
bool replace_symbol_expr(symbol_exprt &dest) const override
Definition: replace_symbol.cpp:361
replace_symbolt::set
void set(const class symbol_exprt &old_expr, const exprt &new_expr)
Sets old_expr to be replaced by new_expr.
Definition: replace_symbol.cpp:36
replace_symbolt
Replace a symbol expression by a given expression.
Definition: replace_symbol.h:27