Skip to content

Commit a18c481

Browse files
committed
add unary_exprt::check(expr)
This adds unary_exprt::check(expr), which checks that the expression is indeed unary. This follows the same pattern as binary_exprt::check and ternary_exprt::check.
1 parent ba46166 commit a18c481

File tree

1 file changed

+63
-67
lines changed

1 file changed

+63
-67
lines changed

src/util/std_expr.h

Lines changed: 63 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -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

350368
inline 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
361379
inline 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 &)
369386
inline 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)
403419
inline 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 &)
412427
inline 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)
453467
inline 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 &)
462475
inline 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)
497509
inline 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 &)
506517
inline 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)
564574
inline 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 &)
573582
inline 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)
15431551
inline 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 &)
15521559
inline 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)
17541760
inline 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 &)
17631768
inline 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)
19521956
inline 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 &)
19611964
inline 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)
20512053
inline 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 &)
20602061
inline 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)
23032303
inline 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 &)
23122311
inline 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)
28862884
inline 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 &)
28952892
inline 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

Comments
 (0)