@@ -109,9 +109,10 @@ to_verilog_logical_inequality_expr(exprt &expr)
109109}
110110
111111// / ==?
112- class verilog_wildcard_equality_exprt : public equal_exprt
112+ class verilog_wildcard_equality_exprt : public binary_exprt
113113{
114114public:
115+ verilog_wildcard_equality_exprt (exprt, exprt);
115116};
116117
117118inline const verilog_wildcard_equality_exprt &
@@ -2511,4 +2512,70 @@ to_verilog_streaming_concatenation_expr(exprt &expr)
25112512 return static_cast <verilog_streaming_concatenation_exprt &>(expr);
25122513}
25132514
2515+ class verilog_inside_exprt : public binary_exprt
2516+ {
2517+ public:
2518+ verilog_inside_exprt (exprt _op, exprt::operandst _range_list)
2519+ : binary_exprt(
2520+ std::move (_op),
2521+ ID_verilog_inside,
2522+ exprt{irep_idt{}, typet{}, std::move (_range_list)})
2523+ {
2524+ }
2525+
2526+ const exprt &op () const
2527+ {
2528+ return op0 ();
2529+ }
2530+
2531+ const exprt::operandst &range_list () const
2532+ {
2533+ return op1 ().operands ();
2534+ }
2535+
2536+ // lower to ==, ==?, >=, <=
2537+ exprt lower () const ;
2538+ };
2539+
2540+ inline const verilog_inside_exprt &to_verilog_inside_expr (const exprt &expr)
2541+ {
2542+ PRECONDITION (expr.id () == ID_verilog_inside);
2543+ verilog_inside_exprt::check (expr);
2544+ return static_cast <const verilog_inside_exprt &>(expr);
2545+ }
2546+
2547+ inline verilog_inside_exprt &to_verilog_inside_expr (exprt &expr)
2548+ {
2549+ PRECONDITION (expr.id () == ID_verilog_inside);
2550+ verilog_inside_exprt::check (expr);
2551+ return static_cast <verilog_inside_exprt &>(expr);
2552+ }
2553+
2554+ class verilog_value_range_exprt : public binary_exprt
2555+ {
2556+ public:
2557+ verilog_value_range_exprt (exprt from, exprt to)
2558+ : binary_exprt(std::move(from), ID_verilog_value_range, std::move(to))
2559+ {
2560+ }
2561+
2562+ // lower to >=, <=
2563+ exprt lower () const ;
2564+ };
2565+
2566+ inline const verilog_value_range_exprt &
2567+ to_verilog_value_range_expr (const exprt &expr)
2568+ {
2569+ PRECONDITION (expr.id () == ID_verilog_value_range);
2570+ verilog_value_range_exprt::check (expr);
2571+ return static_cast <const verilog_value_range_exprt &>(expr);
2572+ }
2573+
2574+ inline verilog_value_range_exprt &to_verilog_value_range_expr (exprt &expr)
2575+ {
2576+ PRECONDITION (expr.id () == ID_verilog_value_range);
2577+ verilog_value_range_exprt::check (expr);
2578+ return static_cast <verilog_value_range_exprt &>(expr);
2579+ }
2580+
25142581#endif
0 commit comments