@@ -26,6 +26,24 @@ class nullary_exprt : public expr_protectedt
26
26
{
27
27
}
28
28
29
+ static void check (
30
+ const exprt &expr,
31
+ const validation_modet vm = validation_modet::INVARIANT)
32
+ {
33
+ DATA_CHECK (
34
+ vm,
35
+ expr.operands ().size () == 0 ,
36
+ " nullary expression must not have operands" );
37
+ }
38
+
39
+ static void validate (
40
+ const exprt &expr,
41
+ const namespacet &,
42
+ const validation_modet vm = validation_modet::INVARIANT)
43
+ {
44
+ check (expr, vm);
45
+ }
46
+
29
47
// / remove all operand methods
30
48
operandst &operands () = delete;
31
49
const operandst &operands () const = delete;
@@ -293,19 +311,16 @@ inline void validate_expr(const nondet_symbol_exprt &value)
293
311
inline const nondet_symbol_exprt &to_nondet_symbol_expr (const exprt &expr)
294
312
{
295
313
PRECONDITION (expr.id ()==ID_nondet_symbol);
296
- const nondet_symbol_exprt &ret =
297
- static_cast <const nondet_symbol_exprt &>(expr);
298
- validate_expr (ret);
299
- return ret;
314
+ nondet_symbol_exprt::check (expr);
315
+ return static_cast <const nondet_symbol_exprt &>(expr);
300
316
}
301
317
302
318
// / \copydoc to_nondet_symbol_expr(const exprt &)
303
319
inline nondet_symbol_exprt &to_nondet_symbol_expr (exprt &expr)
304
320
{
305
321
PRECONDITION (expr.id ()==ID_symbol);
306
- nondet_symbol_exprt &ret = static_cast <nondet_symbol_exprt &>(expr);
307
- validate_expr (ret);
308
- return ret;
322
+ nondet_symbol_exprt::check (expr);
323
+ return static_cast <nondet_symbol_exprt &>(expr);
309
324
}
310
325
311
326
@@ -1804,18 +1819,16 @@ inline void validate_expr(const empty_union_exprt &value)
1804
1819
inline const empty_union_exprt &to_empty_union_expr (const exprt &expr)
1805
1820
{
1806
1821
PRECONDITION (expr.id () == ID_empty_union);
1807
- const empty_union_exprt &ret = static_cast <const empty_union_exprt &>(expr);
1808
- validate_expr (ret);
1809
- return ret;
1822
+ empty_union_exprt::check (expr);
1823
+ return static_cast <const empty_union_exprt &>(expr);
1810
1824
}
1811
1825
1812
1826
// / \copydoc to_empty_union_expr(const exprt &)
1813
1827
inline empty_union_exprt &to_empty_union_expr (exprt &expr)
1814
1828
{
1815
1829
PRECONDITION (expr.id () == ID_empty_union);
1816
- empty_union_exprt &ret = static_cast <empty_union_exprt &>(expr);
1817
- validate_expr (ret);
1818
- return ret;
1830
+ empty_union_exprt::check (expr);
1831
+ return static_cast <empty_union_exprt &>(expr);
1819
1832
}
1820
1833
1821
1834
// / \brief Struct constructor from list of elements
@@ -2921,16 +2934,16 @@ inline bool can_cast_expr<type_exprt>(const exprt &base)
2921
2934
inline const type_exprt &to_type_expr (const exprt &expr)
2922
2935
{
2923
2936
PRECONDITION (can_cast_expr<type_exprt>(expr));
2924
- const type_exprt &ret = static_cast < const type_exprt &> (expr);
2925
- return ret ;
2937
+ type_exprt::check (expr);
2938
+ return static_cast < const type_exprt &>(expr) ;
2926
2939
}
2927
2940
2928
2941
// / \copydoc to_type_expr(const exprt &)
2929
2942
inline type_exprt &to_type_expr (exprt &expr)
2930
2943
{
2931
2944
PRECONDITION (can_cast_expr<type_exprt>(expr));
2932
- type_exprt &ret = static_cast <type_exprt &> (expr);
2933
- return ret ;
2945
+ type_exprt::check (expr);
2946
+ return static_cast <type_exprt &>(expr) ;
2934
2947
}
2935
2948
2936
2949
// / \brief A constant literal expression
@@ -2988,13 +3001,15 @@ inline void validate_expr(const constant_exprt &value)
2988
3001
inline const constant_exprt &to_constant_expr (const exprt &expr)
2989
3002
{
2990
3003
PRECONDITION (expr.is_constant ());
3004
+ constant_exprt::check (expr);
2991
3005
return static_cast <const constant_exprt &>(expr);
2992
3006
}
2993
3007
2994
3008
// / \copydoc to_constant_expr(const exprt &)
2995
3009
inline constant_exprt &to_constant_expr (exprt &expr)
2996
3010
{
2997
3011
PRECONDITION (expr.is_constant ());
3012
+ constant_exprt::check (expr);
2998
3013
return static_cast <constant_exprt &>(expr);
2999
3014
}
3000
3015
@@ -3534,10 +3549,8 @@ inline const class_method_descriptor_exprt &
3534
3549
to_class_method_descriptor_expr (const exprt &expr)
3535
3550
{
3536
3551
PRECONDITION (expr.id () == ID_virtual_function);
3537
- const class_method_descriptor_exprt &ret =
3538
- static_cast <const class_method_descriptor_exprt &>(expr);
3539
- validate_expr (ret);
3540
- return ret;
3552
+ class_method_descriptor_exprt::check (expr);
3553
+ return static_cast <const class_method_descriptor_exprt &>(expr);
3541
3554
}
3542
3555
3543
3556
template <>
0 commit comments