@@ -2047,4 +2047,142 @@ enum class sva_sequence_semanticst
20472047 STRONG
20482048};
20492049
2050+ // / a base class for both sequence and property instance expressions
2051+ class sva_sequence_property_instance_exprt : public binary_exprt
2052+ {
2053+ public:
2054+ sva_sequence_property_instance_exprt (
2055+ irep_idt _id,
2056+ symbol_exprt _symbol,
2057+ exprt::operandst _arguments,
2058+ typet _type)
2059+ : binary_exprt{
2060+ std::move (_symbol),
2061+ _id,
2062+ multi_ary_exprt{ID_arguments, std::move (_arguments), typet{}},
2063+ std::move (_type)}
2064+ {
2065+ }
2066+
2067+ const symbol_exprt &symbol () const
2068+ {
2069+ return static_cast <const symbol_exprt &>(op0 ());
2070+ }
2071+
2072+ symbol_exprt &symbol ()
2073+ {
2074+ return static_cast <symbol_exprt &>(op0 ());
2075+ }
2076+
2077+ exprt::operandst &arguments ()
2078+ {
2079+ return op1 ().operands ();
2080+ }
2081+
2082+ const exprt::operandst &arguments () const
2083+ {
2084+ return op1 ().operands ();
2085+ }
2086+ };
2087+
2088+ inline const sva_sequence_property_instance_exprt &
2089+ to_sva_sequence_property_instance_expr (const exprt &expr)
2090+ {
2091+ PRECONDITION (
2092+ expr.id () == ID_sva_sequence_instance ||
2093+ expr.id () == ID_sva_property_instance);
2094+ sva_sequence_property_instance_exprt::check (expr);
2095+ return static_cast <const sva_sequence_property_instance_exprt &>(expr);
2096+ }
2097+
2098+ inline sva_sequence_property_instance_exprt &
2099+ to_sva_sequence_property_instance_expr (exprt &expr)
2100+ {
2101+ PRECONDITION (
2102+ expr.id () == ID_sva_sequence_instance ||
2103+ expr.id () == ID_sva_property_instance);
2104+ sva_sequence_property_instance_exprt::check (expr);
2105+ return static_cast <sva_sequence_property_instance_exprt &>(expr);
2106+ }
2107+
2108+ class sva_sequence_instance_exprt : public sva_sequence_property_instance_exprt
2109+ {
2110+ public:
2111+ sva_sequence_instance_exprt (
2112+ symbol_exprt _sequence,
2113+ exprt::operandst _arguments)
2114+ : sva_sequence_property_instance_exprt{
2115+ ID_sva_sequence_instance,
2116+ std::move (_sequence),
2117+ std::move (_arguments),
2118+ verilog_sva_sequence_typet{}}
2119+ {
2120+ }
2121+
2122+ const symbol_exprt &sequence () const
2123+ {
2124+ return symbol ();
2125+ }
2126+
2127+ symbol_exprt &sequence ()
2128+ {
2129+ return symbol ();
2130+ }
2131+ };
2132+
2133+ inline const sva_sequence_instance_exprt &
2134+ to_sva_sequence_instance_expr (const exprt &expr)
2135+ {
2136+ PRECONDITION (expr.id () == ID_sva_sequence_instance);
2137+ sva_sequence_instance_exprt::check (expr);
2138+ return static_cast <const sva_sequence_instance_exprt &>(expr);
2139+ }
2140+
2141+ inline sva_sequence_instance_exprt &to_sva_sequence_instance_expr (exprt &expr)
2142+ {
2143+ PRECONDITION (expr.id () == ID_sva_sequence_instance);
2144+ sva_sequence_instance_exprt::check (expr);
2145+ return static_cast <sva_sequence_instance_exprt &>(expr);
2146+ }
2147+
2148+ class sva_property_instance_exprt : public sva_sequence_property_instance_exprt
2149+ {
2150+ public:
2151+ sva_property_instance_exprt (
2152+ symbol_exprt _property,
2153+ exprt::operandst _arguments)
2154+ : sva_sequence_property_instance_exprt{
2155+ ID_sva_property_instance,
2156+ std::move (_property),
2157+ std::move (_arguments),
2158+ verilog_sva_property_typet{}}
2159+ {
2160+ }
2161+
2162+ const symbol_exprt &property () const
2163+ {
2164+ return symbol ();
2165+ }
2166+
2167+ symbol_exprt &property ()
2168+ {
2169+ return symbol ();
2170+ }
2171+ };
2172+
2173+ inline const sva_property_instance_exprt &
2174+ to_sva_property_instance_expr (const exprt &expr)
2175+ {
2176+ PRECONDITION (expr.id () == ID_sva_property_instance);
2177+ sva_property_instance_exprt::check (expr);
2178+ return static_cast <const sva_property_instance_exprt &>(expr);
2179+ }
2180+
2181+ inline sva_property_instance_exprt &to_sva_property_instance_expr (exprt &expr)
2182+ {
2183+ PRECONDITION (expr.id () == ID_sva_property_instance);
2184+ sva_property_instance_exprt::check (expr);
2185+ return static_cast <sva_property_instance_exprt &>(expr);
2186+ }
2187+
20502188#endif
0 commit comments