@@ -393,6 +393,12 @@ class verilog_module_itemt:public exprt
393393 inline verilog_module_itemt ()
394394 {
395395 }
396+
397+ static void
398+ check (const exprt &expr, validation_modet vm = validation_modet::INVARIANT)
399+ {
400+ exprt::check (expr, vm);
401+ }
396402};
397403
398404inline const verilog_module_itemt &to_verilog_module_item (const irept &irep)
@@ -2882,9 +2888,16 @@ to_verilog_indexed_part_select_plus_or_minus_expr(exprt &expr)
28822888 return static_cast <verilog_indexed_part_select_plus_or_minus_exprt &>(expr);
28832889}
28842890
2885- class verilog_property_declarationt : public verilog_module_itemt
2891+ // / a base class for both sequence and property declarations
2892+ class verilog_sequence_property_declaration_baset : public verilog_module_itemt
28862893{
28872894public:
2895+ verilog_sequence_property_declaration_baset (irep_idt _id, exprt _cond)
2896+ : verilog_module_itemt{_id}
2897+ {
2898+ add_to_operands (std::move (_cond));
2899+ }
2900+
28882901 const irep_idt &base_name () const
28892902 {
28902903 return get (ID_base_name);
@@ -2901,55 +2914,99 @@ class verilog_property_declarationt : public verilog_module_itemt
29012914 }
29022915};
29032916
2917+ inline const verilog_sequence_property_declaration_baset &
2918+ to_verilog_sequence_property_declaration_base (const exprt &expr)
2919+ {
2920+ PRECONDITION (
2921+ expr.id () == ID_verilog_sequence_declaration ||
2922+ expr.id () == ID_verilog_property_declaration);
2923+ verilog_sequence_property_declaration_baset::check (expr);
2924+ return static_cast <const verilog_sequence_property_declaration_baset &>(expr);
2925+ }
2926+
2927+ inline verilog_sequence_property_declaration_baset &
2928+ to_verilog_sequence_property_declaration_base (exprt &expr)
2929+ {
2930+ PRECONDITION (
2931+ expr.id () == ID_verilog_sequence_declaration ||
2932+ expr.id () == ID_verilog_property_declaration);
2933+ verilog_sequence_property_declaration_baset::check (expr);
2934+ return static_cast <verilog_sequence_property_declaration_baset &>(expr);
2935+ }
2936+
2937+ class verilog_property_declarationt
2938+ : public verilog_sequence_property_declaration_baset
2939+ {
2940+ public:
2941+ explicit verilog_property_declarationt (exprt property)
2942+ : verilog_sequence_property_declaration_baset{
2943+ ID_verilog_property_declaration,
2944+ std::move (property)}
2945+ {
2946+ }
2947+
2948+ const exprt &property () const
2949+ {
2950+ return cond ();
2951+ }
2952+
2953+ exprt &property ()
2954+ {
2955+ return cond ();
2956+ }
2957+ };
2958+
29042959inline const verilog_property_declarationt &
29052960to_verilog_property_declaration (const exprt &expr)
29062961{
29072962 PRECONDITION (expr.id () == ID_verilog_property_declaration);
2963+ verilog_property_declarationt::check (expr);
29082964 return static_cast <const verilog_property_declarationt &>(expr);
29092965}
29102966
29112967inline verilog_property_declarationt &
29122968to_verilog_property_declaration (exprt &expr)
29132969{
29142970 PRECONDITION (expr.id () == ID_verilog_property_declaration);
2971+ verilog_property_declarationt::check (expr);
29152972 return static_cast <verilog_property_declarationt &>(expr);
29162973}
29172974
2918- class verilog_sequence_declarationt : public verilog_module_itemt
2975+ class verilog_sequence_declarationt
2976+ : public verilog_sequence_property_declaration_baset
29192977{
29202978public:
2921- explicit verilog_sequence_declarationt (exprt sequence)
2922- {
2923- add_to_operands (std::move (sequence));
2924- }
2925-
2926- const irep_idt &base_name () const
2979+ explicit verilog_sequence_declarationt (exprt _sequence)
2980+ : verilog_sequence_property_declaration_baset{
2981+ ID_verilog_sequence_declaration,
2982+ std::move (_sequence)}
29272983 {
2928- return get (ID_base_name);
29292984 }
29302985
29312986 const exprt &sequence () const
29322987 {
2933- return op0 ();
2988+ return cond ();
29342989 }
29352990
29362991 exprt &sequence ()
29372992 {
2938- return op0 ();
2993+ return cond ();
29392994 }
29402995};
29412996
29422997inline const verilog_sequence_declarationt &
29432998to_verilog_sequence_declaration (const exprt &expr)
29442999{
29453000 PRECONDITION (expr.id () == ID_verilog_sequence_declaration);
3001+ verilog_sequence_declarationt::check (expr);
29463002 return static_cast <const verilog_sequence_declarationt &>(expr);
29473003}
29483004
29493005inline verilog_sequence_declarationt &
29503006to_verilog_sequence_declaration (exprt &expr)
29513007{
29523008 PRECONDITION (expr.id () == ID_verilog_sequence_declaration);
3009+ verilog_sequence_declarationt::check (expr);
29533010 return static_cast <verilog_sequence_declarationt &>(expr);
29543011}
29553012
0 commit comments