Skip to content

Commit 206436a

Browse files
authored
Merge pull request #633 from diffblue/current_value-const
`verilog_synthesist::current_value` can be const
2 parents dc3a36b + 754def5 commit 206436a

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

src/verilog/verilog_synthesis.cpp

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3440,7 +3440,7 @@ Function: verilog_synthesist::symbol_expr
34403440

34413441
exprt verilog_synthesist::symbol_expr(
34423442
const symbolt &symbol,
3443-
curr_or_nextt curr_or_next)
3443+
curr_or_nextt curr_or_next) const
34443444
{
34453445
exprt result=exprt(curr_or_next==NEXT?ID_next_symbol:ID_symbol, symbol.type);
34463446
result.set(ID_identifier, symbol.name);
@@ -3563,21 +3563,23 @@ Function: verilog_synthesist::current_value
35633563
exprt verilog_synthesist::current_value(
35643564
const value_mapt::mapt &map,
35653565
const symbolt &symbol,
3566-
bool use_previous_assignments)
3566+
bool use_previous_assignments) const
35673567
{
35683568
if(!symbol.is_state_var)
35693569
{
35703570
if(use_previous_assignments)
35713571
{
35723572
// see if we have a previous assignment
3573-
const assignmentt &assignment=assignments[symbol.name];
3574-
const exprt &value=
3575-
(construct==constructt::INITIAL)?
3576-
assignment.init.value:
3577-
assignment.next.value;
3573+
auto assignment_it = assignments.find(symbol.name);
3574+
if(assignment_it != assignments.end())
3575+
{
3576+
const exprt &value = (construct == constructt::INITIAL)
3577+
? assignment_it->second.init.value
3578+
: assignment_it->second.next.value;
35783579

3579-
if(value.is_not_nil())
3580-
return value; // done
3580+
if(value.is_not_nil())
3581+
return value; // done
3582+
}
35813583
}
35823584

35833585
return symbol_expr(symbol, CURRENT);
@@ -3593,13 +3595,16 @@ exprt verilog_synthesist::current_value(
35933595
if(use_previous_assignments)
35943596
{
35953597
// see if we have a previous assignment
3596-
const assignmentt &assignment=assignments[symbol.name];
3597-
const exprt &value=
3598-
(construct==constructt::INITIAL)?
3599-
assignment.init.value:assignment.next.value;
3598+
auto assignment_it = assignments.find(symbol.name);
3599+
if(assignment_it != assignments.end())
3600+
{
3601+
const exprt &value = (construct == constructt::INITIAL)
3602+
? assignment_it->second.init.value
3603+
: assignment_it->second.next.value;
36003604

3601-
if(value.is_not_nil())
3602-
return value; // done
3605+
if(value.is_not_nil())
3606+
return value; // done
3607+
}
36033608
}
36043609

36053610
if(

src/verilog/verilog_synthesis_class.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,22 +183,22 @@ class verilog_synthesist:
183183

184184
exprt current_value(
185185
const value_mapt::mapt &map,
186-
const symbolt &symbol,
187-
bool use_previous_assignments);
186+
const symbolt &,
187+
bool use_previous_assignments) const;
188188

189189
exprt guarded_expr(exprt expr) const
190190
{
191191
PRECONDITION(value_map != NULL);
192192
return value_map->guarded_expr(expr);
193193
}
194194

195-
inline exprt current_value(const symbolt &symbol)
195+
inline exprt current_value(const symbolt &symbol) const
196196
{
197197
PRECONDITION(value_map != NULL);
198198
return current_value(value_map->current, symbol, false);
199199
}
200200

201-
inline exprt final_value(const symbolt &symbol)
201+
inline exprt final_value(const symbolt &symbol) const
202202
{
203203
PRECONDITION(value_map != NULL);
204204
return current_value(value_map->final, symbol, true);
@@ -282,9 +282,7 @@ class verilog_synthesist:
282282

283283
typedef enum { CURRENT, NEXT } curr_or_nextt;
284284

285-
exprt symbol_expr(
286-
const symbolt &symbol,
287-
curr_or_nextt curr_or_next);
285+
exprt symbol_expr(const symbolt &, curr_or_nextt curr_or_next) const;
288286

289287
void extract_expr(exprt &dest, unsigned bit);
290288

0 commit comments

Comments
 (0)