Skip to content

Commit 421b4b3

Browse files
Make set_indices a template
This makes the interface of goto_symex_statet simpler and can simplify code of function templates using set_indices
1 parent be3a7ba commit 421b4b3

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -156,20 +156,23 @@ class goto_symex_is_constantt : public is_constantt
156156
}
157157
};
158158

159+
template <>
159160
renamedt<ssa_exprt, L0>
160-
goto_symex_statet::set_l0_indices(ssa_exprt ssa_expr, const namespacet &ns)
161+
goto_symex_statet::set_indices<L0>(ssa_exprt ssa_expr, const namespacet &ns)
161162
{
162163
return level0(std::move(ssa_expr), ns, source.thread_nr);
163164
}
164165

166+
template <>
165167
renamedt<ssa_exprt, L1>
166-
goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
168+
goto_symex_statet::set_indices<L1>(ssa_exprt ssa_expr, const namespacet &ns)
167169
{
168170
return level1(level0(std::move(ssa_expr), ns, source.thread_nr));
169171
}
170172

173+
template <>
171174
renamedt<ssa_exprt, L2>
172-
goto_symex_statet::set_l2_indices(ssa_exprt ssa_expr, const namespacet &ns)
175+
goto_symex_statet::set_indices<L2>(ssa_exprt ssa_expr, const namespacet &ns)
173176
{
174177
return level2(level1(level0(std::move(ssa_expr), ns, source.thread_nr)));
175178
}
@@ -206,7 +209,7 @@ void goto_symex_statet::assignment(
206209
const auto level2_it =
207210
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
208211
symex_renaming_levelt::increase_counter(level2_it);
209-
const renamedt<ssa_exprt, L2> l2_lhs = set_l2_indices(std::move(lhs), ns);
212+
const renamedt<ssa_exprt, L2> l2_lhs = set_indices<L2>(std::move(lhs), ns);
210213
lhs = l2_lhs.get();
211214

212215
// in case we happen to be multi-threaded, record the memory access
@@ -262,12 +265,12 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
262265
"rename_ssa can only be used for levels L0 and L1");
263266
if(level == L0)
264267
{
265-
const renamedt<ssa_exprt, L0> ssa_l0 = set_l0_indices(std::move(ssa), ns);
268+
const renamedt<ssa_exprt, L0> ssa_l0 = set_indices<L0>(std::move(ssa), ns);
266269
ssa = ssa_l0.get();
267270
}
268271
else if(level == L1)
269272
{
270-
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
273+
const renamedt<ssa_exprt, L1> ssa_l1 = set_indices<L1>(std::move(ssa), ns);
271274
ssa = ssa_l1.get();
272275
}
273276
else
@@ -304,7 +307,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
304307
}
305308
else if(level==L2)
306309
{
307-
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
310+
const renamedt<ssa_exprt, L1> ssa_l1 = set_indices<L1>(std::move(ssa), ns);
308311
ssa = ssa_l1.get();
309312
rename<level>(expr.type(), ssa.get_identifier(), ns);
310313
ssa.update_type();
@@ -328,7 +331,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
328331
else
329332
{
330333
const renamedt<ssa_exprt, L2> l2_ssa =
331-
set_l2_indices(std::move(ssa), ns);
334+
set_indices<L2>(std::move(ssa), ns);
332335
ssa = l2_ssa.get();
333336
}
334337
}
@@ -444,7 +447,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
444447
if(!no_write.op().is_false())
445448
cond |= guardt{no_write.op()};
446449

447-
const renamedt<ssa_exprt, L2> l2_true_case = set_l2_indices(ssa_l1, ns);
450+
const renamedt<ssa_exprt, L2> l2_true_case = set_indices<L2>(ssa_l1, ns);
448451

449452
if(a_s_read.second.empty())
450453
{
@@ -454,7 +457,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
454457
symex_renaming_levelt::increase_counter(level2_it);
455458
a_s_read.first=level2.current_count(l1_identifier);
456459
}
457-
const renamedt<ssa_exprt, L2> l2_false_case = set_l2_indices(ssa_l1, ns);
460+
const renamedt<ssa_exprt, L2> l2_false_case = set_indices<L2>(ssa_l1, ns);
458461

459462
if_exprt tmp{cond.as_expr(), l2_true_case.get(), l2_false_case.get()};
460463

@@ -479,7 +482,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
479482
symex_targett::assignment_typet::PHI);
480483

481484
const renamedt<ssa_exprt, L2> ssa_l2 =
482-
set_l2_indices(std::move(ssa_l1), ns);
485+
set_indices<L2>(std::move(ssa_l1), ns);
483486
expr = ssa_l2.get();
484487

485488
a_s_read.second.push_back(guard);
@@ -497,14 +500,14 @@ bool goto_symex_statet::l2_thread_read_encoding(
497500
if(!record_events)
498501
{
499502
const renamedt<ssa_exprt, L2> ssa_l2 =
500-
set_l2_indices(std::move(ssa_l1), ns);
503+
set_indices<L2>(std::move(ssa_l1), ns);
501504
expr = ssa_l2.get();
502505
return true;
503506
}
504507

505508
// produce a fresh L2 name
506509
symex_renaming_levelt::increase_counter(level2_it);
507-
const renamedt<ssa_exprt, L2> ssa_l2 = set_l2_indices(std::move(ssa_l1), ns);
510+
const renamedt<ssa_exprt, L2> ssa_l2 = set_indices<L2>(std::move(ssa_l1), ns);
508511
expr = ssa_l2.get();
509512

510513
// and record that
@@ -562,7 +565,7 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
562565
ssa_exprt &ssa=to_ssa_expr(expr);
563566

564567
// only do L1!
565-
const renamedt<ssa_exprt, L1> ssa_l1 = set_l1_indices(std::move(ssa), ns);
568+
const renamedt<ssa_exprt, L1> ssa_l1 = set_indices<L1>(std::move(ssa), ns);
566569
ssa = ssa_l1.get();
567570
rename<level>(expr.type(), ssa.get_identifier(), ns);
568571
ssa.update_type();

src/goto-symex/goto_symex_state.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,9 @@ class goto_symex_statet final : public goto_statet
113113
template <levelt>
114114
void rename_address(exprt &expr, const namespacet &ns);
115115

116-
/// Update level 0 values.
117-
renamedt<ssa_exprt, L0> set_l0_indices(ssa_exprt expr, const namespacet &ns);
118-
119-
/// Update level 0 and 1 values.
120-
renamedt<ssa_exprt, L1> set_l1_indices(ssa_exprt expr, const namespacet &ns);
121-
122-
/// Update level 0, 1 and 2 values.
123-
renamedt<ssa_exprt, L2> set_l2_indices(ssa_exprt expr, const namespacet &ns);
116+
/// Update values up to \c level.
117+
template <levelt level>
118+
renamedt<ssa_exprt, level> set_indices(ssa_exprt expr, const namespacet &ns);
124119

125120
// this maps L1 names to (L2) types
126121
typedef std::unordered_map<irep_idt, typet> l1_typest;

0 commit comments

Comments
 (0)