cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
object_id.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Object Identifiers
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
11
12
#include "
object_id.h
"
13
14
#include <
goto-programs/goto_instruction_code.h
>
15
16
#include <
util/pointer_expr.h
>
17
18
enum class
get_modet
{
LHS_R
,
LHS_W
,
READ
};
19
20
void
get_objects_rec
(
21
get_modet
mode,
22
const
exprt
&expr,
23
object_id_sett
&dest,
24
const
std::string &suffix)
25
{
26
if
(expr.
id
()==ID_symbol)
27
{
28
if
(mode==
get_modet::LHS_W
|| mode==
get_modet::READ
)
29
dest.insert(
object_idt
(
to_symbol_expr
(expr)));
30
}
31
else
if
(expr.
id
()==ID_index)
32
{
33
const
index_exprt
&index_expr=
to_index_expr
(expr);
34
35
if
(mode==
get_modet::LHS_R
|| mode==
get_modet::READ
)
36
get_objects_rec
(
get_modet::READ
, index_expr.
index
(), dest,
""
);
37
38
if
(mode==
get_modet::LHS_R
)
39
get_objects_rec
(
get_modet::READ
, index_expr.
array
(), dest,
"[]"
+suffix);
40
else
41
get_objects_rec
(mode, index_expr.
array
(), dest,
"[]"
+suffix);
42
}
43
else
if
(expr.
id
()==ID_if)
44
{
45
const
if_exprt
&if_expr=
to_if_expr
(expr);
46
47
if
(mode==
get_modet::LHS_R
|| mode==
get_modet::READ
)
48
get_objects_rec
(
get_modet::READ
, if_expr.
cond
(), dest,
""
);
49
50
get_objects_rec
(mode, if_expr.
true_case
(), dest, suffix);
51
get_objects_rec
(mode, if_expr.
false_case
(), dest, suffix);
52
}
53
else
if
(expr.
id
()==ID_member)
54
{
55
const
member_exprt
&member_expr=
to_member_expr
(expr);
56
57
get_objects_rec
(mode, member_expr.
struct_op
(), dest,
58
"."
+
id2string
(member_expr.
get_component_name
())+suffix);
59
}
60
else
if
(expr.
id
()==ID_dereference)
61
{
62
const
dereference_exprt
&dereference_expr=
63
to_dereference_expr
(expr);
64
65
if
(mode==
get_modet::LHS_R
|| mode==
get_modet::READ
)
66
get_objects_rec
(
get_modet::READ
, dereference_expr.
pointer
(), dest,
""
);
67
}
68
else
69
{
70
if
(mode==
get_modet::LHS_R
|| mode==
get_modet::READ
)
71
{
72
for
(
const
auto
&op : expr.
operands
())
73
get_objects_rec
(
get_modet::READ
, op, dest,
""
);
74
}
75
}
76
}
77
78
void
get_objects
(
const
exprt
&expr,
object_id_sett
&dest)
79
{
80
get_objects_rec
(
get_modet::READ
, expr, dest,
""
);
81
}
82
83
void
get_objects_r
(
const
code_assignt
&assign,
object_id_sett
&dest)
84
{
85
get_objects_rec
(
get_modet::LHS_R
, assign.
lhs
(), dest,
""
);
86
get_objects_rec
(
get_modet::READ
, assign.
rhs
(), dest,
""
);
87
}
88
89
void
get_objects_w
(
const
code_assignt
&assign,
object_id_sett
&dest)
90
{
91
get_objects_rec
(
get_modet::LHS_W
, assign.
lhs
(), dest,
""
);
92
}
93
94
void
get_objects_w
(
const
exprt
&lhs,
object_id_sett
&dest)
95
{
96
get_objects_rec
(
get_modet::LHS_W
, lhs, dest,
""
);
97
}
98
99
void
get_objects_r_lhs
(
const
exprt
&lhs,
object_id_sett
&dest)
100
{
101
get_objects_rec
(
get_modet::LHS_R
, lhs, dest,
""
);
102
}
code_assignt
A goto_instruction_codet representing an assignment in the program.
Definition
goto_instruction_code.h:22
code_assignt::rhs
exprt & rhs()
Definition
goto_instruction_code.h:47
code_assignt::lhs
exprt & lhs()
Definition
goto_instruction_code.h:42
dereference_exprt
Operator to dereference a pointer.
Definition
pointer_expr.h:834
dereference_exprt::pointer
exprt & pointer()
Definition
pointer_expr.h:847
exprt
Base class for all expressions.
Definition
expr.h:57
exprt::operands
operandst & operands()
Definition
expr.h:95
if_exprt
The trinary if-then-else operator.
Definition
std_expr.h:2416
if_exprt::cond
exprt & cond()
Definition
std_expr.h:2433
if_exprt::false_case
exprt & false_case()
Definition
std_expr.h:2453
if_exprt::true_case
exprt & true_case()
Definition
std_expr.h:2443
index_exprt
Array index operator.
Definition
std_expr.h:1421
index_exprt::index
exprt & index()
Definition
std_expr.h:1461
index_exprt::array
exprt & array()
Definition
std_expr.h:1451
irept::id
const irep_idt & id() const
Definition
irep.h:388
member_exprt
Extract member of struct or union.
Definition
std_expr.h:2856
member_exprt::struct_op
const exprt & struct_op() const
Definition
std_expr.h:2894
member_exprt::get_component_name
irep_idt get_component_name() const
Definition
std_expr.h:2878
object_idt
Definition
object_id.h:23
goto_instruction_code.h
id2string
const std::string & id2string(const irep_idt &d)
Definition
irep.h:44
get_modet
get_modet
Definition
object_id.cpp:18
get_modet::READ
@ READ
Definition
object_id.cpp:18
get_modet::LHS_R
@ LHS_R
Definition
object_id.cpp:18
get_modet::LHS_W
@ LHS_W
Definition
object_id.cpp:18
get_objects_r_lhs
void get_objects_r_lhs(const exprt &lhs, object_id_sett &dest)
Definition
object_id.cpp:99
get_objects
void get_objects(const exprt &expr, object_id_sett &dest)
Definition
object_id.cpp:78
get_objects_r
void get_objects_r(const code_assignt &assign, object_id_sett &dest)
Definition
object_id.cpp:83
get_objects_rec
void get_objects_rec(get_modet mode, const exprt &expr, object_id_sett &dest, const std::string &suffix)
Definition
object_id.cpp:20
get_objects_w
void get_objects_w(const code_assignt &assign, object_id_sett &dest)
Definition
object_id.cpp:89
object_id.h
Object Identifiers.
object_id_sett
std::set< object_idt > object_id_sett
Definition
object_id.h:58
pointer_expr.h
API to expression classes for Pointers.
to_dereference_expr
const dereference_exprt & to_dereference_expr(const exprt &expr)
Cast an exprt to a dereference_exprt.
Definition
pointer_expr.h:890
to_index_expr
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
Definition
std_expr.h:1484
to_if_expr
const if_exprt & to_if_expr(const exprt &expr)
Cast an exprt to an if_exprt.
Definition
std_expr.h:2491
to_member_expr
const member_exprt & to_member_expr(const exprt &expr)
Cast an exprt to a member_exprt.
Definition
std_expr.h:2943
to_symbol_expr
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
Definition
std_expr.h:211
goto-instrument
object_id.cpp
Generated by
1.17.0