Skip to content

Commit 9f54515

Browse files
committed
introduce typecheck_expr_rec
This renames typecheck(exprt, ...) to typecheck_expr_rec to signal the recursion.
1 parent a1ceb66 commit 9f54515

File tree

1 file changed

+41
-19
lines changed

1 file changed

+41
-19
lines changed

src/smvlang/smv_typecheck.cpp

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class smv_typecheckt:public typecheckt
8181
smv_ranget convert_type(const typet &);
8282
void convert(smv_parse_treet::modulet::itemt &);
8383
void typecheck(smv_parse_treet::modulet::itemt &);
84+
void typecheck_expr_rec(exprt &, const typet &, modet);
8485

8586
smv_parse_treet::modulet *modulep;
8687

@@ -428,7 +429,7 @@ void smv_typecheckt::typecheck_op(
428429
}
429430

430431
for(auto &op : expr.operands())
431-
typecheck(op, type, mode);
432+
typecheck_expr_rec(op, type, mode);
432433

433434
expr.type()=type;
434435

@@ -562,6 +563,26 @@ void smv_typecheckt::typecheck(
562563
exprt &expr,
563564
const typet &type,
564565
modet mode)
566+
{
567+
typecheck_expr_rec(expr, type, mode);
568+
}
569+
570+
/*******************************************************************\
571+
572+
Function: smv_typecheckt::typecheck_expr_rec
573+
574+
Inputs:
575+
576+
Outputs:
577+
578+
Purpose:
579+
580+
\*******************************************************************/
581+
582+
void smv_typecheckt::typecheck_expr_rec(
583+
exprt &expr,
584+
const typet &type,
585+
modet mode)
565586
{
566587
const auto static nil_type = static_cast<const typet &>(get_nil_irep());
567588

@@ -627,7 +648,7 @@ void smv_typecheckt::typecheck(
627648
}
628649

629650
for(auto &op : expr.operands())
630-
typecheck(op, op_type, mode);
651+
typecheck_expr_rec(op, op_type, mode);
631652

632653
expr.type()=op_type;
633654
}
@@ -646,7 +667,7 @@ void smv_typecheckt::typecheck(
646667
expr.id()==ID_gt || expr.id()==ID_ge)
647668
{
648669
for(auto &op : expr.operands())
649-
typecheck(op, static_cast<const typet &>(get_nil_irep()), mode);
670+
typecheck_expr_rec(op, static_cast<const typet &>(get_nil_irep()), mode);
650671

651672
if(expr.operands().size()!=2)
652673
{
@@ -659,9 +680,9 @@ void smv_typecheckt::typecheck(
659680
exprt &op0 = to_binary_expr(expr).op0(), &op1 = to_binary_expr(expr).op1();
660681

661682
typet op_type=type_union(op0.type(), op1.type());
662-
663-
typecheck(op0, op_type, mode);
664-
typecheck(op1, op_type, mode);
683+
684+
typecheck_expr_rec(op0, op_type, mode);
685+
typecheck_expr_rec(op1, op_type, mode);
665686

666687
INVARIANT(op0.type() == op1.type(), "type of operands of relational operators");
667688

@@ -680,9 +701,9 @@ void smv_typecheckt::typecheck(
680701
auto &if_expr = to_if_expr(expr);
681702
auto &true_case = if_expr.true_case();
682703
auto &false_case = if_expr.false_case();
683-
typecheck(if_expr.cond(), bool_typet{}, mode);
684-
typecheck(true_case, type, mode);
685-
typecheck(false_case, type, mode);
704+
typecheck_expr_rec(if_expr.cond(), bool_typet{}, mode);
705+
typecheck_expr_rec(true_case, type, mode);
706+
typecheck_expr_rec(false_case, type, mode);
686707
expr.type() = type;
687708
}
688709
else if(expr.id()==ID_plus || expr.id()==ID_minus ||
@@ -836,10 +857,11 @@ void smv_typecheckt::typecheck(
836857
for(auto &op : expr.operands())
837858
{
838859
if(condition)
839-
typecheck(op, bool_typet(), mode);
860+
typecheck_expr_rec(op, bool_typet(), mode);
840861
else
841862
{
842-
typecheck(op, static_cast<const typet &>(get_nil_irep()), mode);
863+
typecheck_expr_rec(
864+
op, static_cast<const typet &>(get_nil_irep()), mode);
843865
expr.type() = type_union(expr.type(), op.type());
844866
}
845867

@@ -855,9 +877,9 @@ void smv_typecheckt::typecheck(
855877
for(auto &op : expr.operands())
856878
{
857879
if(condition)
858-
typecheck(op, bool_typet(), mode);
880+
typecheck_expr_rec(op, bool_typet(), mode);
859881
else
860-
typecheck(op, expr.type(), mode);
882+
typecheck_expr_rec(op, expr.type(), mode);
861883

862884
condition=!condition;
863885
}
@@ -871,15 +893,15 @@ void smv_typecheckt::typecheck(
871893
throw errort().with_location(expr.source_location())
872894
<< "CTL operator not permitted here";
873895
expr.type() = bool_typet();
874-
typecheck(to_unary_expr(expr).op(), expr.type(), mode);
896+
typecheck_expr_rec(to_unary_expr(expr).op(), expr.type(), mode);
875897
}
876898
else if(expr.id() == ID_X || expr.id() == ID_F || expr.id() == ID_G)
877899
{
878900
if(mode != LTL)
879901
throw errort().with_location(expr.source_location())
880902
<< "LTL operator not permitted here";
881903
expr.type() = bool_typet();
882-
typecheck(to_unary_expr(expr).op(), expr.type(), mode);
904+
typecheck_expr_rec(to_unary_expr(expr).op(), expr.type(), mode);
883905
}
884906
else if(
885907
expr.id() == ID_EU || expr.id() == ID_ER || expr.id() == ID_AU ||
@@ -890,8 +912,8 @@ void smv_typecheckt::typecheck(
890912
<< "CTL operator not permitted here";
891913
auto &binary_expr = to_binary_expr(expr);
892914
expr.type() = bool_typet();
893-
typecheck(binary_expr.lhs(), expr.type(), mode);
894-
typecheck(binary_expr.rhs(), expr.type(), mode);
915+
typecheck_expr_rec(binary_expr.lhs(), expr.type(), mode);
916+
typecheck_expr_rec(binary_expr.rhs(), expr.type(), mode);
895917
}
896918
else if(expr.id() == ID_U || expr.id() == ID_R)
897919
{
@@ -900,8 +922,8 @@ void smv_typecheckt::typecheck(
900922
<< "LTL operator not permitted here";
901923
auto &binary_expr = to_binary_expr(expr);
902924
expr.type() = bool_typet();
903-
typecheck(binary_expr.lhs(), expr.type(), mode);
904-
typecheck(binary_expr.rhs(), expr.type(), mode);
925+
typecheck_expr_rec(binary_expr.lhs(), expr.type(), mode);
926+
typecheck_expr_rec(binary_expr.rhs(), expr.type(), mode);
905927
}
906928
else if(expr.id()==ID_typecast)
907929
{

0 commit comments

Comments
 (0)