@@ -1700,6 +1700,86 @@ inline const side_effect_expr_nondett &to_side_effect_expr_nondet(
1700
1700
return static_cast <const side_effect_expr_nondett &>(side_effect_expr_nondet);
1701
1701
}
1702
1702
1703
+ // / A \ref side_effect_exprt that performs an assignment
1704
+ class side_effect_expr_assignt : public side_effect_exprt
1705
+ {
1706
+ public:
1707
+ // / construct an assignment side-effect, given lhs and rhs
1708
+ // / The type is copied from lhs
1709
+ side_effect_expr_assignt (
1710
+ const exprt &_lhs,
1711
+ const exprt &_rhs,
1712
+ const source_locationt &loc)
1713
+ : side_effect_exprt(ID_assign, {_lhs, _rhs}, _lhs.type(), loc)
1714
+ {
1715
+ }
1716
+
1717
+ // / construct an assignment side-effect, given lhs, rhs and the type
1718
+ side_effect_expr_assignt (
1719
+ const exprt &_lhs,
1720
+ const exprt &_rhs,
1721
+ const typet &_type,
1722
+ const source_locationt &loc)
1723
+ : side_effect_exprt(ID_assign, {_lhs, _rhs}, _type, loc)
1724
+ {
1725
+ }
1726
+
1727
+ // / construct an assignment side-effect, given lhs, rhs and the type
1728
+ side_effect_expr_assignt (
1729
+ exprt &&_lhs,
1730
+ exprt &&_rhs,
1731
+ typet &&_type,
1732
+ const source_locationt &loc)
1733
+ : side_effect_exprt(
1734
+ ID_assign,
1735
+ {std::move (_lhs), std::move (_rhs)},
1736
+ std::move (_type),
1737
+ loc)
1738
+ {
1739
+ }
1740
+
1741
+ exprt &lhs ()
1742
+ {
1743
+ return op0 ();
1744
+ }
1745
+
1746
+ const exprt &lhs () const
1747
+ {
1748
+ return op0 ();
1749
+ }
1750
+
1751
+ exprt &rhs ()
1752
+ {
1753
+ return op1 ();
1754
+ }
1755
+
1756
+ const exprt &rhs () const
1757
+ {
1758
+ return op1 ();
1759
+ }
1760
+ };
1761
+
1762
+ template <>
1763
+ inline bool can_cast_expr<side_effect_expr_assignt>(const exprt &base)
1764
+ {
1765
+ return detail::can_cast_side_effect_expr_impl (base, ID_assign);
1766
+ }
1767
+
1768
+ inline side_effect_expr_assignt &to_side_effect_expr_assign (exprt &expr)
1769
+ {
1770
+ auto &side_effect_expr_assign = to_side_effect_expr (expr);
1771
+ PRECONDITION (side_effect_expr_assign.get_statement () == ID_assign);
1772
+ return static_cast <side_effect_expr_assignt &>(side_effect_expr_assign);
1773
+ }
1774
+
1775
+ inline const side_effect_expr_assignt &
1776
+ to_side_effect_expr_assign (const exprt &expr)
1777
+ {
1778
+ const auto &side_effect_expr_assign = to_side_effect_expr (expr);
1779
+ PRECONDITION (side_effect_expr_assign.get_statement () == ID_assign);
1780
+ return static_cast <const side_effect_expr_assignt &>(side_effect_expr_assign);
1781
+ }
1782
+
1703
1783
// / A \ref side_effect_exprt representation of a function call side effect.
1704
1784
class side_effect_expr_function_callt :public side_effect_exprt
1705
1785
{
0 commit comments