@@ -635,14 +635,55 @@ static inline sva_s_until_with_exprt &to_sva_s_until_with_expr(exprt &expr)
635635 return static_cast <sva_s_until_with_exprt &>(expr);
636636}
637637
638- class sva_overlapped_implication_exprt : public binary_predicate_exprt
638+ // / base class for |->, |=>, #-#, #=#
639+ class sva_implication_base_exprt : public binary_predicate_exprt
639640{
640641public:
641- explicit sva_overlapped_implication_exprt (exprt op0, exprt op1)
642+ explicit sva_implication_base_exprt (
643+ exprt __antecedent,
644+ irep_idt __id,
645+ exprt __consequent)
642646 : binary_predicate_exprt(
643- std::move (op0),
647+ std::move (__antecedent),
648+ __id,
649+ std::move(__consequent))
650+ {
651+ }
652+
653+ // a sequence
654+ const exprt &antecedent () const
655+ {
656+ return lhs ();
657+ }
658+
659+ exprt &antecedent ()
660+ {
661+ return lhs ();
662+ }
663+
664+ // a property
665+ const exprt &consequent () const
666+ {
667+ return rhs ();
668+ }
669+
670+ exprt &consequent ()
671+ {
672+ return rhs ();
673+ }
674+ };
675+
676+ // / |->
677+ class sva_overlapped_implication_exprt : public sva_implication_base_exprt
678+ {
679+ public:
680+ explicit sva_overlapped_implication_exprt (
681+ exprt __antecedent,
682+ exprt __consequent)
683+ : sva_implication_base_exprt(
684+ std::move (__antecedent),
644685 ID_sva_overlapped_implication,
645- std::move(op1 ))
686+ std::move(__consequent ))
646687 {
647688 }
648689};
@@ -663,14 +704,17 @@ to_sva_overlapped_implication_expr(exprt &expr)
663704 return static_cast <sva_overlapped_implication_exprt &>(expr);
664705}
665706
666- class sva_non_overlapped_implication_exprt : public binary_predicate_exprt
707+ // / |=>
708+ class sva_non_overlapped_implication_exprt : public sva_implication_base_exprt
667709{
668710public:
669- explicit sva_non_overlapped_implication_exprt (exprt op0, exprt op1)
670- : binary_predicate_exprt(
671- std::move (op0),
711+ explicit sva_non_overlapped_implication_exprt (
712+ exprt __antecedent,
713+ exprt __consequent)
714+ : sva_implication_base_exprt(
715+ std::move (__antecedent),
672716 ID_sva_non_overlapped_implication,
673- std::move(op1 ))
717+ std::move(__consequent ))
674718 {
675719 }
676720};
@@ -834,27 +878,19 @@ static inline sva_or_exprt &to_sva_or_expr(exprt &expr)
834878 return static_cast <sva_or_exprt &>(expr);
835879}
836880
837- class sva_followed_by_exprt : public binary_predicate_exprt
881+ // #-#, #=#
882+ class sva_followed_by_exprt : public sva_implication_base_exprt
838883{
839884public:
840- const exprt &sequence () const
841- {
842- return op0 ();
843- }
844-
845- exprt &sequence ()
846- {
847- return op0 ();
848- }
849-
850- const exprt &property () const
851- {
852- return op1 ();
853- }
854-
855- exprt &property ()
885+ explicit sva_followed_by_exprt (
886+ exprt __antecedent,
887+ irep_idt __id,
888+ exprt __consequent)
889+ : sva_implication_base_exprt(
890+ std::move (__antecedent),
891+ __id,
892+ std::move(__consequent))
856893 {
857- return op1 ();
858894 }
859895};
860896
0 commit comments