Skip to content

Commit c05fd3e

Browse files
Make exprt a field of guard instead of inheriting
Guardt does not override virtual methods or access private fields so we can remove inheritance and use a field instead.
1 parent 92a7d9a commit c05fd3e

File tree

4 files changed

+32
-33
lines changed

4 files changed

+32
-33
lines changed

src/analyses/goto_rw.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ class rw_guarded_range_set_value_sett:public rw_range_set_value_sett
370370
get_modet mode,
371371
const exprt &expr) override
372372
{
373-
guard = true_exprt();
373+
guard = guardt();
374374

375375
rw_range_set_value_sett::get_objects_rec(_function, _target, mode, expr);
376376
}

src/goto-symex/symex_goto.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ void goto_symext::symex_goto(statet &state)
225225
// adjust guards
226226
if(new_guard.is_true())
227227
{
228-
state.guard = false_exprt();
228+
state.guard = guardt(false_exprt());
229229
}
230230
else
231231
{

src/util/guard.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,17 @@ void guardt::add(const exprt &expr)
4646
return;
4747
else if(is_true() || expr.is_false())
4848
{
49-
*this=expr;
49+
this->expr = expr;
5050

5151
return;
5252
}
53-
else if(id()!=ID_and)
53+
else if(this->expr.id() != ID_and)
5454
{
55-
and_exprt a({*this});
56-
*this=a;
55+
and_exprt a({this->expr});
56+
this->expr = a;
5757
}
5858

59-
operandst &op=operands();
59+
exprt::operandst &op = this->expr.operands();
6060

6161
if(expr.id()==ID_and)
6262
op.insert(op.end(),
@@ -68,14 +68,14 @@ void guardt::add(const exprt &expr)
6868

6969
guardt &operator -= (guardt &g1, const guardt &g2)
7070
{
71-
if(g1.id()!=ID_and || g2.id()!=ID_and)
71+
if(g1.expr.id() != ID_and || g2.expr.id() != ID_and)
7272
return g1;
7373

74-
sort_and_join(g1);
75-
guardt g2_sorted=g2;
74+
sort_and_join(g1.expr);
75+
exprt g2_sorted = g2.as_expr();
7676
sort_and_join(g2_sorted);
7777

78-
exprt::operandst &op1=g1.operands();
78+
exprt::operandst &op1 = g1.expr.operands();
7979
const exprt::operandst &op2=g2_sorted.operands();
8080

8181
exprt::operandst::iterator it1=op1.begin();
@@ -90,7 +90,7 @@ guardt &operator -= (guardt &g1, const guardt &g2)
9090
it1=op1.erase(it1);
9191
}
9292

93-
g1=conjunction(op1);
93+
g1.expr = conjunction(op1);
9494

9595
return g1;
9696
}
@@ -101,30 +101,30 @@ guardt &operator |= (guardt &g1, const guardt &g2)
101101
return g1;
102102
if(g1.is_false() || g2.is_true())
103103
{
104-
g1=g2;
104+
g1.expr = g2.expr;
105105
return g1;
106106
}
107107

108-
if(g1.id()!=ID_and || g2.id()!=ID_and)
108+
if(g1.expr.id() != ID_and || g2.expr.id() != ID_and)
109109
{
110-
exprt tmp(boolean_negate(g2));
110+
exprt tmp(boolean_negate(g2.as_expr()));
111111

112-
if(tmp==g1)
113-
g1 = true_exprt();
112+
if(tmp == g1.as_expr())
113+
g1.expr = true_exprt();
114114
else
115-
g1=or_exprt(g1, g2);
115+
g1.expr = or_exprt(g1.as_expr(), g2.as_expr());
116116

117117
// TODO: make simplify more capable and apply here
118118

119119
return g1;
120120
}
121121

122122
// find common prefix
123-
sort_and_join(g1);
124-
guardt g2_sorted=g2;
123+
sort_and_join(g1.expr);
124+
exprt g2_sorted = g2.as_expr();
125125
sort_and_join(g2_sorted);
126126

127-
exprt::operandst &op1=g1.operands();
127+
exprt::operandst &op1 = g1.expr.operands();
128128
const exprt::operandst &op2=g2_sorted.operands();
129129

130130
exprt::operandst n_op1, n_op2;
@@ -160,7 +160,7 @@ guardt &operator |= (guardt &g1, const guardt &g2)
160160
exprt and_expr1=conjunction(n_op1);
161161
exprt and_expr2=conjunction(n_op2);
162162

163-
g1=conjunction(op1);
163+
g1.expr = conjunction(op1);
164164

165165
exprt tmp(boolean_negate(and_expr2));
166166

src/util/guard.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,46 @@ Author: Daniel Kroening, [email protected]
1616

1717
#include "std_expr.h"
1818

19-
class guardt : private exprt
19+
class guardt
2020
{
2121
public:
22-
guardt()
22+
guardt() : expr(true_exprt())
2323
{
24-
*this = true_exprt();
2524
}
2625

27-
guardt &operator=(const exprt &e)
26+
explicit guardt(const exprt &e) : expr(e)
2827
{
29-
*this=static_cast<const guardt&>(e);
30-
31-
return *this;
3228
}
3329

3430
void add(const exprt &expr);
3531

3632
void append(const guardt &guard)
3733
{
38-
add(guard);
34+
add(guard.as_expr());
3935
}
4036

4137
exprt as_expr() const
4238
{
43-
return *this;
39+
return expr;
4440
}
4541

4642
void guard_expr(exprt &dest) const;
4743

4844
bool is_true() const
4945
{
50-
return exprt::is_true();
46+
return expr.is_true();
5147
}
5248

5349
bool is_false() const
5450
{
55-
return exprt::is_false();
51+
return expr.is_false();
5652
}
5753

5854
friend guardt &operator -= (guardt &g1, const guardt &g2);
5955
friend guardt &operator |= (guardt &g1, const guardt &g2);
56+
57+
private:
58+
exprt expr;
6059
};
6160

6261
#endif // CPROVER_UTIL_GUARD_H

0 commit comments

Comments
 (0)