@@ -818,6 +818,17 @@ class r_or_w_ok_exprt : public binary_predicate_exprt
818818 }
819819};
820820
821+ template <>
822+ inline bool can_cast_expr<r_or_w_ok_exprt>(const exprt &base)
823+ {
824+ return base.id () == ID_r_ok || base.id () == ID_w_ok || base.id () == ID_rw_ok;
825+ }
826+
827+ inline void validate_expr (const r_or_w_ok_exprt &value)
828+ {
829+ validate_operands (value, 2 , " r_or_w_ok must have two operands" );
830+ }
831+
821832inline const r_or_w_ok_exprt &to_r_or_w_ok_expr (const exprt &expr)
822833{
823834 PRECONDITION (
@@ -837,6 +848,17 @@ class r_ok_exprt : public r_or_w_ok_exprt
837848 }
838849};
839850
851+ template <>
852+ inline bool can_cast_expr<r_ok_exprt>(const exprt &base)
853+ {
854+ return base.id () == ID_r_ok;
855+ }
856+
857+ inline void validate_expr (const r_ok_exprt &value)
858+ {
859+ validate_operands (value, 2 , " r_ok must have two operands" );
860+ }
861+
840862inline const r_ok_exprt &to_r_ok_expr (const exprt &expr)
841863{
842864 PRECONDITION (expr.id () == ID_r_ok);
@@ -855,6 +877,17 @@ class w_ok_exprt : public r_or_w_ok_exprt
855877 }
856878};
857879
880+ template <>
881+ inline bool can_cast_expr<w_ok_exprt>(const exprt &base)
882+ {
883+ return base.id () == ID_w_ok;
884+ }
885+
886+ inline void validate_expr (const w_ok_exprt &value)
887+ {
888+ validate_operands (value, 2 , " w_ok must have two operands" );
889+ }
890+
858891inline const w_ok_exprt &to_w_ok_expr (const exprt &expr)
859892{
860893 PRECONDITION (expr.id () == ID_w_ok);
0 commit comments