Skip to content

Commit f20515f

Browse files
committed
fix expr2c on lambda expressions
Lambda expressions are not quantifier expressions, but both quantifier expressions and lambda expressions are bindings. This commit fixes the conversion of lambda expressions to C syntax by generalizing the conversion of quantifier expressions to binding expressions.
1 parent 8735dc1 commit f20515f

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

src/ansi-c/expr2c.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -832,22 +832,22 @@ std::string expr2ct::convert_trinary(
832832
return dest;
833833
}
834834

835-
std::string expr2ct::convert_quantifier(
836-
const quantifier_exprt &src,
835+
std::string expr2ct::convert_binding(
836+
const binding_exprt &src,
837837
const std::string &symbol,
838838
unsigned precedence)
839839
{
840840
// our made-up syntax can only do one symbol
841-
if(src.op0().operands().size() != 1)
841+
if(src.variables().size() != 1)
842842
return convert_norep(src, precedence);
843843

844844
unsigned p0, p1;
845845

846-
std::string op0 = convert_with_precedence(src.symbol(), p0);
846+
std::string op0 = convert_with_precedence(src.variables().front(), p0);
847847
std::string op1 = convert_with_precedence(src.where(), p1);
848848

849849
std::string dest=symbol+" { ";
850-
dest += convert(src.symbol().type());
850+
dest += convert(src.variables().front().type());
851851
dest+=" "+op0+"; ";
852852
dest+=op1;
853853
dest+=" }";
@@ -3816,16 +3816,13 @@ std::string expr2ct::convert_with_precedence(
38163816
return convert_trinary(to_if_expr(src), "?", ":", precedence = 3);
38173817

38183818
else if(src.id()==ID_forall)
3819-
return convert_quantifier(
3820-
to_quantifier_expr(src), "forall", precedence = 2);
3819+
return convert_binding(to_quantifier_expr(src), "forall", precedence = 2);
38213820

38223821
else if(src.id()==ID_exists)
3823-
return convert_quantifier(
3824-
to_quantifier_expr(src), "exists", precedence = 2);
3822+
return convert_binding(to_quantifier_expr(src), "exists", precedence = 2);
38253823

38263824
else if(src.id()==ID_lambda)
3827-
return convert_quantifier(
3828-
to_quantifier_expr(src), "LAMBDA", precedence = 2);
3825+
return convert_binding(to_lambda_expr(src), "LAMBDA", precedence = 2);
38293826

38303827
else if(src.id()==ID_with)
38313828
return convert_with(src, precedence=16);

src/ansi-c/expr2c_class.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ class expr2ct
141141
std::string convert_overflow(
142142
const exprt &src, unsigned &precedence);
143143

144-
std::string convert_quantifier(
145-
const quantifier_exprt &,
144+
std::string convert_binding(
145+
const binding_exprt &,
146146
const std::string &symbol,
147147
unsigned precedence);
148148

0 commit comments

Comments
 (0)