@@ -323,6 +323,24 @@ class unary_exprt : public expr_protectedt
323
323
{
324
324
}
325
325
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
+
326
344
const exprt &op () const
327
345
{
328
346
return op0 ();
@@ -349,7 +367,7 @@ inline bool can_cast_expr<unary_exprt>(const exprt &base)
349
367
350
368
inline void validate_expr (const unary_exprt &value)
351
369
{
352
- validate_operands (value, 1 , " Unary expressions must have one operand " );
370
+ unary_exprt::check (value);
353
371
}
354
372
355
373
// / \brief Cast an exprt to a \ref unary_exprt
@@ -360,17 +378,15 @@ inline void validate_expr(const unary_exprt &value)
360
378
// / \return Object of type \ref unary_exprt
361
379
inline const unary_exprt &to_unary_expr (const exprt &expr)
362
380
{
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);
366
383
}
367
384
368
385
// / \copydoc to_unary_expr(const exprt &)
369
386
inline unary_exprt &to_unary_expr (exprt &expr)
370
387
{
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);
374
390
}
375
391
376
392
@@ -403,18 +419,16 @@ inline void validate_expr(const abs_exprt &value)
403
419
inline const abs_exprt &to_abs_expr (const exprt &expr)
404
420
{
405
421
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);
409
424
}
410
425
411
426
// / \copydoc to_abs_expr(const exprt &)
412
427
inline abs_exprt &to_abs_expr (exprt &expr)
413
428
{
414
429
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);
418
432
}
419
433
420
434
@@ -453,18 +467,16 @@ inline void validate_expr(const unary_minus_exprt &value)
453
467
inline const unary_minus_exprt &to_unary_minus_expr (const exprt &expr)
454
468
{
455
469
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);
459
472
}
460
473
461
474
// / \copydoc to_unary_minus_expr(const exprt &)
462
475
inline unary_minus_exprt &to_unary_minus_expr (exprt &expr)
463
476
{
464
477
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);
468
480
}
469
481
470
482
// / \brief The unary plus expression
@@ -497,18 +509,16 @@ inline void validate_expr(const unary_plus_exprt &value)
497
509
inline const unary_plus_exprt &to_unary_plus_expr (const exprt &expr)
498
510
{
499
511
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);
503
514
}
504
515
505
516
// / \copydoc to_unary_minus_expr(const exprt &)
506
517
inline unary_plus_exprt &to_unary_plus_expr (exprt &expr)
507
518
{
508
519
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);
512
522
}
513
523
514
524
// / \brief A base class for expressions that are predicates,
@@ -564,18 +574,16 @@ inline void validate_expr(const sign_exprt &expr)
564
574
inline const sign_exprt &to_sign_expr (const exprt &expr)
565
575
{
566
576
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);
570
579
}
571
580
572
581
// / \copydoc to_sign_expr(const exprt &)
573
582
inline sign_exprt &to_sign_expr (exprt &expr)
574
583
{
575
584
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);
579
587
}
580
588
581
589
// / \brief A base class for binary expressions
@@ -1543,18 +1551,16 @@ inline void validate_expr(const array_of_exprt &value)
1543
1551
inline const array_of_exprt &to_array_of_expr (const exprt &expr)
1544
1552
{
1545
1553
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);
1549
1556
}
1550
1557
1551
1558
// / \copydoc to_array_of_expr(const exprt &)
1552
1559
inline array_of_exprt &to_array_of_expr (exprt &expr)
1553
1560
{
1554
1561
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);
1558
1564
}
1559
1565
1560
1566
@@ -1754,18 +1760,16 @@ inline void validate_expr(const union_exprt &value)
1754
1760
inline const union_exprt &to_union_expr (const exprt &expr)
1755
1761
{
1756
1762
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);
1760
1765
}
1761
1766
1762
1767
// / \copydoc to_union_expr(const exprt &)
1763
1768
inline union_exprt &to_union_expr (exprt &expr)
1764
1769
{
1765
1770
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);
1769
1773
}
1770
1774
1771
1775
// / \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)
1952
1956
inline const complex_real_exprt &to_complex_real_expr (const exprt &expr)
1953
1957
{
1954
1958
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);
1958
1961
}
1959
1962
1960
1963
// / \copydoc to_complex_real_expr(const exprt &)
1961
1964
inline complex_real_exprt &to_complex_real_expr (exprt &expr)
1962
1965
{
1963
1966
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);
1967
1969
}
1968
1970
1969
1971
// / \brief Imaginary part of the expression describing a complex number.
@@ -2051,18 +2053,16 @@ inline void validate_expr(const typecast_exprt &value)
2051
2053
inline const typecast_exprt &to_typecast_expr (const exprt &expr)
2052
2054
{
2053
2055
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);
2057
2058
}
2058
2059
2059
2060
// / \copydoc to_typecast_expr(const exprt &)
2060
2061
inline typecast_exprt &to_typecast_expr (exprt &expr)
2061
2062
{
2062
2063
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);
2066
2066
}
2067
2067
2068
2068
@@ -2303,18 +2303,16 @@ inline void validate_expr(const not_exprt &value)
2303
2303
inline const not_exprt &to_not_expr (const exprt &expr)
2304
2304
{
2305
2305
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);
2309
2308
}
2310
2309
2311
2310
// / \copydoc to_not_expr(const exprt &)
2312
2311
inline not_exprt &to_not_expr (exprt &expr)
2313
2312
{
2314
2313
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);
2318
2316
}
2319
2317
2320
2318
@@ -2886,18 +2884,16 @@ inline void validate_expr(const member_exprt &value)
2886
2884
inline const member_exprt &to_member_expr (const exprt &expr)
2887
2885
{
2888
2886
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);
2892
2889
}
2893
2890
2894
2891
// / \copydoc to_member_expr(const exprt &)
2895
2892
inline member_exprt &to_member_expr (exprt &expr)
2896
2893
{
2897
2894
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);
2901
2897
}
2902
2898
2903
2899
0 commit comments