Skip to content

Commit bfdbc7a

Browse files
committed
use ternary_exprt
This uses ternary_exprt to strengthen the typing of expressions with three operands.
1 parent 92495e5 commit bfdbc7a

File tree

8 files changed

+105
-150
lines changed

8 files changed

+105
-150
lines changed

src/ebmc/output_verilog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -910,7 +910,7 @@ void output_verilog_baset::invariants(const symbolt &symbol)
910910
assert(symbol.value.id()==ID_trans &&
911911
symbol.value.operands().size()==3);
912912

913-
invariant(symbol.value.op0());
913+
invariant(to_ternary_expr(symbol.value).op0());
914914
}
915915

916916
/*******************************************************************\

src/trans-netlist/instantiate_netlist.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,22 +227,22 @@ literalt instantiate_bmc_mapt::convert_bool(const exprt &expr)
227227
unsigned old_next=next;
228228
literalt result;
229229

230-
if(expr.op1().is_nil())
230+
if(to_ternary_expr(expr).op1().is_nil())
231231
{
232232
mp_integer offset;
233-
if(to_integer_non_constant(expr.op0(), offset))
233+
if(to_integer_non_constant(to_ternary_expr(expr).op0(), offset))
234234
throw "failed to convert sva_cycle_delay offset";
235235

236236
current = old_current + offset.to_ulong();
237237
next = old_next + offset.to_ulong();
238-
result=convert_bool(expr.op2());
238+
result = convert_bool(to_ternary_expr(expr).op2());
239239
}
240240
else
241241
{
242242
mp_integer from, to;
243243
if(
244-
to_integer_non_constant(expr.op0(), from) ||
245-
to_integer_non_constant(expr.op1(), to))
244+
to_integer_non_constant(to_ternary_expr(expr).op0(), from) ||
245+
to_integer_non_constant(to_ternary_expr(expr).op1(), to))
246246
{
247247
throw "failed to convert sva_cycle_delay offsets";
248248
}
@@ -254,7 +254,7 @@ literalt instantiate_bmc_mapt::convert_bool(const exprt &expr)
254254
{
255255
current = old_current + offset.to_ulong();
256256
next = old_next + offset.to_ulong();
257-
disjuncts.push_back(convert_bool(expr.op2()));
257+
disjuncts.push_back(convert_bool(to_ternary_expr(expr).op2()));
258258
}
259259

260260
result=prop.lor(disjuncts);

src/trans-word-level/instantiate_word_level.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -150,34 +150,34 @@ void wl_instantiatet::instantiate_rec(exprt &expr)
150150
// save the current time frame, we'll change it
151151
save_currentt save_current(current);
152152

153-
if(expr.op1().is_nil())
153+
if(to_ternary_expr(expr).op1().is_nil())
154154
{
155155
mp_integer offset;
156-
if(to_integer_non_constant(expr.op0(), offset))
156+
if(to_integer_non_constant(to_ternary_expr(expr).op0(), offset))
157157
throw "failed to convert sva_cycle_delay offset";
158158

159159
current = save_current.saved + offset.to_ulong();
160160

161161
// Do we exceed the bound? Make it 'true'
162162
if(current>=no_timeframes)
163-
expr.op2()=true_exprt();
163+
to_ternary_expr(expr).op2() = true_exprt();
164164
else
165-
instantiate_rec(expr.op2());
165+
instantiate_rec(to_ternary_expr(expr).op2());
166166

167-
expr=expr.op2();
167+
expr = to_ternary_expr(expr).op2();
168168
}
169169
else
170170
{
171171
mp_integer from, to;
172-
if(to_integer_non_constant(expr.op0(), from))
172+
if(to_integer_non_constant(to_ternary_expr(expr).op0(), from))
173173
throw "failed to convert sva_cycle_delay offsets";
174-
175-
if(expr.op1().id()==ID_infinity)
174+
175+
if(to_ternary_expr(expr).op1().id() == ID_infinity)
176176
{
177177
assert(no_timeframes!=0);
178178
to=no_timeframes-1;
179179
}
180-
else if(to_integer_non_constant(expr.op1(), to))
180+
else if(to_integer_non_constant(to_ternary_expr(expr).op1(), to))
181181
throw "failed to convert sva_cycle_delay offsets";
182182

183183
// This is an 'or', and we let it fail if the bound is too small.
@@ -193,7 +193,7 @@ void wl_instantiatet::instantiate_rec(exprt &expr)
193193
}
194194
else
195195
{
196-
disjuncts.push_back(expr.op2());
196+
disjuncts.push_back(to_ternary_expr(expr).op2());
197197
instantiate_rec(disjuncts.back());
198198
}
199199
}

src/verilog/expr2verilog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Function: expr2verilogt::convert_sva_cycle_delay
9898
\*******************************************************************/
9999

100100
std::string expr2verilogt::convert_sva_cycle_delay(
101-
const exprt &src,
101+
const ternary_exprt &src,
102102
unsigned precedence)
103103
{
104104
if(src.operands().size()!=3)
@@ -1003,7 +1003,7 @@ std::string expr2verilogt::convert(
10031003
// not sure about precedence
10041004

10051005
else if(src.id()==ID_sva_cycle_delay)
1006-
return convert_sva_cycle_delay(src, precedence=0);
1006+
return convert_sva_cycle_delay(to_ternary_expr(src), precedence = 0);
10071007
// not sure about precedence
10081008

10091009
else if(src.id()==ID_sva_sequence_concatenation)

src/verilog/expr2verilog_class.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Author: Daniel Kroening, [email protected]
99
#ifndef CPROVER_VERILOG_EXPR2VERILOG_H
1010
#define CPROVER_VERILOG_EXPR2VERILOG_H
1111

12+
#include <util/bitvector_expr.h>
1213
#include <util/std_expr.h>
1314

1415
class expr2verilogt
@@ -91,7 +92,7 @@ class expr2verilogt
9192
virtual std::string convert_with(const with_exprt &, unsigned precedence);
9293

9394
virtual std::string
94-
convert_sva_cycle_delay(const exprt &, unsigned precedence);
95+
convert_sva_cycle_delay(const ternary_exprt &, unsigned precedence);
9596

9697
virtual std::string
9798
convert_sva_sequence_concatenation(const binary_exprt &, unsigned precedence);

src/verilog/verilog_typecheck_expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ void verilog_typecheck_exprt::convert_expr(exprt &expr)
286286
case 0: convert_nullary_expr(expr); break;
287287
case 1: convert_unary_expr (to_unary_expr(expr)); break;
288288
case 2: convert_binary_expr (to_binary_expr(expr)); break;
289-
case 3: convert_trinary_expr(static_cast<ternary_exprt &>(expr)); break;
289+
case 3: convert_trinary_expr(to_ternary_expr(expr)); break;
290290
default:
291291
error().source_location=expr.source_location();
292292
error() << "no conversion for expression " << expr.id() << eom;

0 commit comments

Comments
 (0)