@@ -323,6 +323,24 @@ class unary_exprt : public expr_protectedt
323323 {
324324 }
325325
326+ static void check (
327+ const exprt &expr,
328+ const validation_modet vm = validation_modet::INVARIANT)
329+ {
330+ DATA_CHECK (
331+ vm,
332+ expr.operands ().size () == 1 ,
333+ " unary expression must have one operand" );
334+ }
335+
336+ static void validate (
337+ const exprt &expr,
338+ const namespacet &,
339+ const validation_modet vm = validation_modet::INVARIANT)
340+ {
341+ check (expr, vm);
342+ }
343+
326344 const exprt &op () const
327345 {
328346 return op0 ();
@@ -349,7 +367,7 @@ inline bool can_cast_expr<unary_exprt>(const exprt &base)
349367
350368inline void validate_expr (const unary_exprt &value)
351369{
352- validate_operands (value, 1 , " Unary expressions must have one operand " );
370+ unary_exprt::check (value);
353371}
354372
355373// / \brief Cast an exprt to a \ref unary_exprt
@@ -360,17 +378,15 @@ inline void validate_expr(const unary_exprt &value)
360378// / \return Object of type \ref unary_exprt
361379inline const unary_exprt &to_unary_expr (const exprt &expr)
362380{
363- const unary_exprt &ret = static_cast <const unary_exprt &>(expr);
364- validate_expr (ret);
365- return ret;
381+ unary_exprt::check (expr);
382+ return static_cast <const unary_exprt &>(expr);
366383}
367384
368385// / \copydoc to_unary_expr(const exprt &)
369386inline unary_exprt &to_unary_expr (exprt &expr)
370387{
371- unary_exprt &ret = static_cast <unary_exprt &>(expr);
372- validate_expr (ret);
373- return ret;
388+ unary_exprt::check (expr);
389+ return static_cast <unary_exprt &>(expr);
374390}
375391
376392
@@ -403,18 +419,16 @@ inline void validate_expr(const abs_exprt &value)
403419inline const abs_exprt &to_abs_expr (const exprt &expr)
404420{
405421 PRECONDITION (expr.id ()==ID_abs);
406- const abs_exprt &ret = static_cast <const abs_exprt &>(expr);
407- validate_expr (ret);
408- return ret;
422+ abs_exprt::check (expr);
423+ return static_cast <const abs_exprt &>(expr);
409424}
410425
411426// / \copydoc to_abs_expr(const exprt &)
412427inline abs_exprt &to_abs_expr (exprt &expr)
413428{
414429 PRECONDITION (expr.id ()==ID_abs);
415- abs_exprt &ret = static_cast <abs_exprt &>(expr);
416- validate_expr (ret);
417- return ret;
430+ abs_exprt::check (expr);
431+ return static_cast <abs_exprt &>(expr);
418432}
419433
420434
@@ -453,18 +467,16 @@ inline void validate_expr(const unary_minus_exprt &value)
453467inline const unary_minus_exprt &to_unary_minus_expr (const exprt &expr)
454468{
455469 PRECONDITION (expr.id ()==ID_unary_minus);
456- const unary_minus_exprt &ret = static_cast <const unary_minus_exprt &>(expr);
457- validate_expr (ret);
458- return ret;
470+ unary_minus_exprt::check (expr);
471+ return static_cast <const unary_minus_exprt &>(expr);
459472}
460473
461474// / \copydoc to_unary_minus_expr(const exprt &)
462475inline unary_minus_exprt &to_unary_minus_expr (exprt &expr)
463476{
464477 PRECONDITION (expr.id ()==ID_unary_minus);
465- unary_minus_exprt &ret = static_cast <unary_minus_exprt &>(expr);
466- validate_expr (ret);
467- return ret;
478+ unary_minus_exprt::check (expr);
479+ return static_cast <unary_minus_exprt &>(expr);
468480}
469481
470482// / \brief The unary plus expression
@@ -497,18 +509,16 @@ inline void validate_expr(const unary_plus_exprt &value)
497509inline const unary_plus_exprt &to_unary_plus_expr (const exprt &expr)
498510{
499511 PRECONDITION (expr.id () == ID_unary_plus);
500- const unary_plus_exprt &ret = static_cast <const unary_plus_exprt &>(expr);
501- validate_expr (ret);
502- return ret;
512+ unary_plus_exprt::check (expr);
513+ return static_cast <const unary_plus_exprt &>(expr);
503514}
504515
505516// / \copydoc to_unary_minus_expr(const exprt &)
506517inline unary_plus_exprt &to_unary_plus_expr (exprt &expr)
507518{
508519 PRECONDITION (expr.id () == ID_unary_plus);
509- unary_plus_exprt &ret = static_cast <unary_plus_exprt &>(expr);
510- validate_expr (ret);
511- return ret;
520+ unary_plus_exprt::check (expr);
521+ return static_cast <unary_plus_exprt &>(expr);
512522}
513523
514524// / \brief A base class for expressions that are predicates,
@@ -564,18 +574,16 @@ inline void validate_expr(const sign_exprt &expr)
564574inline const sign_exprt &to_sign_expr (const exprt &expr)
565575{
566576 PRECONDITION (expr.id () == ID_sign);
567- const sign_exprt &ret = static_cast <const sign_exprt &>(expr);
568- validate_expr (ret);
569- return ret;
577+ sign_exprt::check (expr);
578+ return static_cast <const sign_exprt &>(expr);
570579}
571580
572581// / \copydoc to_sign_expr(const exprt &)
573582inline sign_exprt &to_sign_expr (exprt &expr)
574583{
575584 PRECONDITION (expr.id () == ID_sign);
576- sign_exprt &ret = static_cast <sign_exprt &>(expr);
577- validate_expr (ret);
578- return ret;
585+ sign_exprt::check (expr);
586+ return static_cast <sign_exprt &>(expr);
579587}
580588
581589// / \brief A base class for binary expressions
@@ -1543,18 +1551,16 @@ inline void validate_expr(const array_of_exprt &value)
15431551inline const array_of_exprt &to_array_of_expr (const exprt &expr)
15441552{
15451553 PRECONDITION (expr.id ()==ID_array_of);
1546- const array_of_exprt &ret = static_cast <const array_of_exprt &>(expr);
1547- validate_expr (ret);
1548- return ret;
1554+ array_of_exprt::check (expr);
1555+ return static_cast <const array_of_exprt &>(expr);
15491556}
15501557
15511558// / \copydoc to_array_of_expr(const exprt &)
15521559inline array_of_exprt &to_array_of_expr (exprt &expr)
15531560{
15541561 PRECONDITION (expr.id ()==ID_array_of);
1555- array_of_exprt &ret = static_cast <array_of_exprt &>(expr);
1556- validate_expr (ret);
1557- return ret;
1562+ array_of_exprt::check (expr);
1563+ return static_cast <array_of_exprt &>(expr);
15581564}
15591565
15601566
@@ -1754,18 +1760,16 @@ inline void validate_expr(const union_exprt &value)
17541760inline const union_exprt &to_union_expr (const exprt &expr)
17551761{
17561762 PRECONDITION (expr.id ()==ID_union);
1757- const union_exprt &ret = static_cast <const union_exprt &>(expr);
1758- validate_expr (ret);
1759- return ret;
1763+ union_exprt::check (expr);
1764+ return static_cast <const union_exprt &>(expr);
17601765}
17611766
17621767// / \copydoc to_union_expr(const exprt &)
17631768inline union_exprt &to_union_expr (exprt &expr)
17641769{
17651770 PRECONDITION (expr.id ()==ID_union);
1766- union_exprt &ret = static_cast <union_exprt &>(expr);
1767- validate_expr (ret);
1768- return ret;
1771+ union_exprt::check (expr);
1772+ return static_cast <union_exprt &>(expr);
17691773}
17701774
17711775// / \brief Union constructor to support unions without any member (a GCC/Clang
@@ -1952,18 +1956,16 @@ inline void validate_expr(const complex_real_exprt &expr)
19521956inline const complex_real_exprt &to_complex_real_expr (const exprt &expr)
19531957{
19541958 PRECONDITION (expr.id () == ID_complex_real);
1955- const complex_real_exprt &ret = static_cast <const complex_real_exprt &>(expr);
1956- validate_expr (ret);
1957- return ret;
1959+ complex_real_exprt::check (expr);
1960+ return static_cast <const complex_real_exprt &>(expr);
19581961}
19591962
19601963// / \copydoc to_complex_real_expr(const exprt &)
19611964inline complex_real_exprt &to_complex_real_expr (exprt &expr)
19621965{
19631966 PRECONDITION (expr.id () == ID_complex_real);
1964- complex_real_exprt &ret = static_cast <complex_real_exprt &>(expr);
1965- validate_expr (ret);
1966- return ret;
1967+ complex_real_exprt::check (expr);
1968+ return static_cast <complex_real_exprt &>(expr);
19671969}
19681970
19691971// / \brief Imaginary part of the expression describing a complex number.
@@ -2051,18 +2053,16 @@ inline void validate_expr(const typecast_exprt &value)
20512053inline const typecast_exprt &to_typecast_expr (const exprt &expr)
20522054{
20532055 PRECONDITION (expr.id ()==ID_typecast);
2054- const typecast_exprt &ret = static_cast <const typecast_exprt &>(expr);
2055- validate_expr (ret);
2056- return ret;
2056+ typecast_exprt::check (expr);
2057+ return static_cast <const typecast_exprt &>(expr);
20572058}
20582059
20592060// / \copydoc to_typecast_expr(const exprt &)
20602061inline typecast_exprt &to_typecast_expr (exprt &expr)
20612062{
20622063 PRECONDITION (expr.id ()==ID_typecast);
2063- typecast_exprt &ret = static_cast <typecast_exprt &>(expr);
2064- validate_expr (ret);
2065- return ret;
2064+ typecast_exprt::check (expr);
2065+ return static_cast <typecast_exprt &>(expr);
20662066}
20672067
20682068
@@ -2303,18 +2303,16 @@ inline void validate_expr(const not_exprt &value)
23032303inline const not_exprt &to_not_expr (const exprt &expr)
23042304{
23052305 PRECONDITION (expr.id ()==ID_not);
2306- const not_exprt &ret = static_cast <const not_exprt &>(expr);
2307- validate_expr (ret);
2308- return ret;
2306+ not_exprt::check (expr);
2307+ return static_cast <const not_exprt &>(expr);
23092308}
23102309
23112310// / \copydoc to_not_expr(const exprt &)
23122311inline not_exprt &to_not_expr (exprt &expr)
23132312{
23142313 PRECONDITION (expr.id ()==ID_not);
2315- not_exprt &ret = static_cast <not_exprt &>(expr);
2316- validate_expr (ret);
2317- return ret;
2314+ not_exprt::check (expr);
2315+ return static_cast <not_exprt &>(expr);
23182316}
23192317
23202318
@@ -2886,18 +2884,16 @@ inline void validate_expr(const member_exprt &value)
28862884inline const member_exprt &to_member_expr (const exprt &expr)
28872885{
28882886 PRECONDITION (expr.id ()==ID_member);
2889- const member_exprt &ret = static_cast <const member_exprt &>(expr);
2890- validate_expr (ret);
2891- return ret;
2887+ member_exprt::check (expr);
2888+ return static_cast <const member_exprt &>(expr);
28922889}
28932890
28942891// / \copydoc to_member_expr(const exprt &)
28952892inline member_exprt &to_member_expr (exprt &expr)
28962893{
28972894 PRECONDITION (expr.id ()==ID_member);
2898- member_exprt &ret = static_cast <member_exprt &>(expr);
2899- validate_expr (ret);
2900- return ret;
2895+ member_exprt::check (expr);
2896+ return static_cast <member_exprt &>(expr);
29012897}
29022898
29032899
0 commit comments