cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
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
27
class
replace_symbolt
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
79
replace_symbolt
();
80
virtual
~replace_symbolt
();
81
82
const
expr_mapt
&
get_expr_map
()
const
83
{
84
return
expr_map
;
85
}
86
87
expr_mapt
&
get_expr_map
()
88
{
89
return
expr_map
;
90
}
91
92
protected
:
93
expr_mapt
expr_map
;
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
102
class
unchecked_replace_symbolt
:
public
replace_symbolt
103
{
104
public
:
105
unchecked_replace_symbolt
()
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
123
class
address_of_aware_replace_symbolt
:
public
unchecked_replace_symbolt
124
{
125
public
:
126
bool
replace
(
exprt
&dest)
const override
;
127
128
private
:
129
mutable
bool
require_lvalue
=
false
;
130
131
class
set_require_lvalue_and_backupt
132
{
133
public
:
134
set_require_lvalue_and_backupt
(
bool
&
require_lvalue
,
const
bool
value)
135
:
require_lvalue
(
require_lvalue
),
prev_value
(
require_lvalue
)
136
{
137
require_lvalue
= value;
138
}
139
140
~set_require_lvalue_and_backupt
()
141
{
142
require_lvalue
=
prev_value
;
143
}
144
145
private
:
146
bool
&
require_lvalue
;
147
bool
prev_value
;
148
};
149
150
bool
replace_symbol_expr
(
symbol_exprt
&dest)
const override
;
151
};
152
153
#endif
// CPROVER_UTIL_REPLACE_SYMBOL_H
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::prev_value
bool prev_value
Definition
replace_symbol.h:147
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
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
address_of_aware_replace_symbolt
Replace symbols with constants while maintaining syntactically valid expressions.
Definition
replace_symbol.h:124
address_of_aware_replace_symbolt::require_lvalue
bool require_lvalue
Definition
replace_symbol.h:129
address_of_aware_replace_symbolt::replace_symbol_expr
bool replace_symbol_expr(symbol_exprt &dest) const override
Definition
replace_symbol.cpp:416
address_of_aware_replace_symbolt::replace
bool replace(exprt &dest) const override
Definition
replace_symbol.cpp:352
exprt
Base class for all expressions.
Definition
expr.h:57
replace_symbolt::replace_symbolt
replace_symbolt()
Definition
replace_symbol.cpp:16
replace_symbolt::replace
virtual bool replace(exprt &dest) const
Definition
replace_symbol.cpp:64
replace_symbolt::empty
bool empty() const
Definition
replace_symbol.h:59
replace_symbolt::erase
std::size_t erase(const irep_idt &id)
Definition
replace_symbol.h:64
replace_symbolt::get_expr_map
const expr_mapt & get_expr_map() const
Definition
replace_symbol.h:82
replace_symbolt::have_to_replace
bool have_to_replace(const exprt &dest) const
Definition
replace_symbol.cpp:164
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::operator()
void operator()(exprt &dest) const
Definition
replace_symbol.h:44
replace_symbolt::clear
void clear()
Definition
replace_symbol.h:54
replace_symbolt::erase
expr_mapt::iterator erase(expr_mapt::iterator it)
Definition
replace_symbol.h:69
replace_symbolt::get_expr_map
expr_mapt & get_expr_map()
Definition
replace_symbol.h:87
replace_symbolt::bindings
std::set< irep_idt > bindings
Definition
replace_symbol.h:94
replace_symbolt::~replace_symbolt
virtual ~replace_symbolt()
Definition
replace_symbol.cpp:20
replace_symbolt::replace_symbol_expr
virtual bool replace_symbol_expr(symbol_exprt &dest) const
Definition
replace_symbol.cpp:43
replace_symbolt::expr_mapt
std::unordered_map< irep_idt, exprt > expr_mapt
Definition
replace_symbol.h:30
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
replace_symbolt::replaces_symbol
bool replaces_symbol(const irep_idt &id) const
Definition
replace_symbol.h:74
replace_symbolt::expr_map
expr_mapt expr_map
Definition
replace_symbol.h:93
replace_symbolt::operator()
void operator()(typet &dest) const
Definition
replace_symbol.h:49
symbol_exprt
Expression to hold a symbol (variable).
Definition
std_expr.h:132
typet
The type of an expression, extends irept.
Definition
type.h:29
unchecked_replace_symbolt::replace_symbol_expr
bool replace_symbol_expr(symbol_exprt &dest) const override
Definition
replace_symbol.cpp:335
unchecked_replace_symbolt::unchecked_replace_symbolt
unchecked_replace_symbolt()
Definition
replace_symbol.h:105
unchecked_replace_symbolt::insert
void insert(const symbol_exprt &old_expr, const exprt &new_expr)
Definition
replace_symbol.cpp:328
expr.h
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
util
replace_symbol.h
Generated by
1.17.0