Skip to content

Commit bb24aae

Browse files
authored
Merge pull request #1155 from diffblue/ltl_sva_to_stringt-typing
strengthen typing in `ltl_sva_to_stringt`
2 parents 96e6ba3 + e9b8f4d commit bb24aae

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

src/temporal-logic/ltl_sva_to_string.cpp

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ exprt ltl_sva_to_stringt::atom(const std::string &string) const
3131
}
3232

3333
ltl_sva_to_stringt::resultt
34-
ltl_sva_to_stringt::suffix(std::string s, const exprt &expr, modet mode)
34+
ltl_sva_to_stringt::suffix(std::string s, const unary_exprt &expr, modet mode)
3535
{
36-
auto op_rec = rec(to_unary_expr(expr).op(), mode);
36+
auto op_rec = rec(expr.op(), mode);
3737

3838
if(op_rec.p == precedencet::ATOM || op_rec.p == precedencet::SUFFIX)
3939
return resultt{precedencet::SUFFIX, op_rec.s + s};
@@ -42,9 +42,9 @@ ltl_sva_to_stringt::suffix(std::string s, const exprt &expr, modet mode)
4242
}
4343

4444
ltl_sva_to_stringt::resultt
45-
ltl_sva_to_stringt::prefix(std::string s, const exprt &expr, modet mode)
45+
ltl_sva_to_stringt::prefix(std::string s, const unary_exprt &expr, modet mode)
4646
{
47-
auto op_rec = rec(to_unary_expr(expr).op(), mode);
47+
auto op_rec = rec(expr.op(), mode);
4848

4949
if(op_rec.p == precedencet::ATOM || op_rec.p == precedencet::PREFIX)
5050
return resultt{precedencet::PREFIX, s + op_rec.s};
@@ -97,7 +97,7 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
9797
}
9898
else if(expr.id() == ID_not)
9999
{
100-
return prefix("!", expr, mode);
100+
return prefix("!", to_not_expr(expr), mode);
101101
}
102102
else if(expr.is_true())
103103
{
@@ -112,17 +112,17 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
112112
else if(expr.id() == ID_F)
113113
{
114114
PRECONDITION(mode == PROPERTY);
115-
return prefix("F", expr, mode);
115+
return prefix("F", to_F_expr(expr), mode);
116116
}
117117
else if(expr.id() == ID_G)
118118
{
119119
PRECONDITION(mode == PROPERTY);
120-
return prefix("G", expr, mode);
120+
return prefix("G", to_G_expr(expr), mode);
121121
}
122122
else if(expr.id() == ID_X)
123123
{
124124
PRECONDITION(mode == PROPERTY);
125-
return prefix("X", expr, mode);
125+
return prefix("X", to_X_expr(expr), mode);
126126
}
127127
else if(expr.id() == ID_U)
128128
{
@@ -147,7 +147,7 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
147147
else if(expr.id() == ID_sva_always)
148148
{
149149
PRECONDITION(mode == PROPERTY);
150-
return prefix("G", expr, mode);
150+
return prefix("G", to_sva_always_expr(expr), mode);
151151
}
152152
else if(expr.id() == ID_sva_ranged_always)
153153
{
@@ -186,7 +186,7 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
186186
else if(expr.id() == ID_sva_s_eventually)
187187
{
188188
PRECONDITION(mode == PROPERTY);
189-
return prefix("F", expr, mode);
189+
return prefix("F", to_sva_s_eventually_expr(expr), mode);
190190
}
191191
else if(
192192
expr.id() == ID_sva_ranged_s_eventually || expr.id() == ID_sva_eventually)
@@ -212,12 +212,12 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
212212
else if(expr.id() == ID_sva_s_nexttime)
213213
{
214214
PRECONDITION(mode == PROPERTY);
215-
return prefix("X", expr, mode);
215+
return prefix("X", to_sva_s_nexttime_expr(expr), mode);
216216
}
217217
else if(expr.id() == ID_sva_nexttime)
218218
{
219219
PRECONDITION(mode == PROPERTY);
220-
return prefix("X", expr, mode);
220+
return prefix("X", to_sva_nexttime_expr(expr), mode);
221221
}
222222
else if(expr.id() == ID_sva_overlapped_implication)
223223
{
@@ -422,12 +422,12 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
422422
else if(expr.id() == ID_sva_cycle_delay_star) // ##[*] something
423423
{
424424
PRECONDITION(mode == SVA_SEQUENCE);
425-
return suffix("[*]", expr, mode);
425+
return suffix("[*]", to_sva_cycle_delay_star_expr(expr), mode);
426426
}
427427
else if(expr.id() == ID_sva_cycle_delay_plus) // ##[+] something
428428
{
429429
PRECONDITION(mode == SVA_SEQUENCE);
430-
return suffix("[+]", expr, mode);
430+
return suffix("[+]", to_sva_cycle_delay_plus_expr(expr), mode);
431431
}
432432
else if(expr.id() == ID_if)
433433
{
@@ -477,7 +477,10 @@ ltl_sva_to_stringt::rec(const exprt &expr, modet mode)
477477
else if(expr.id() == ID_sva_sequence_repetition_plus) // something[+]
478478
{
479479
PRECONDITION(mode == SVA_SEQUENCE);
480-
return suffix("[+]", expr, mode);
480+
auto new_expr = unary_exprt{
481+
ID_sva_sequence_repetition_plus,
482+
to_sva_sequence_repetition_plus_expr(expr).op()};
483+
return suffix("[+]", new_expr, mode);
481484
}
482485
else if(expr.id() == ID_sva_sequence_goto_repetition) // something[->n]
483486
{

src/temporal-logic/ltl_sva_to_string.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ Author: Daniel Kroening, [email protected]
99
#ifndef CPROVER_TEMPORAL_LOGIC_LTL_SVA_TO_STRING_H
1010
#define CPROVER_TEMPORAL_LOGIC_LTL_SVA_TO_STRING_H
1111

12-
#include <util/expr.h>
1312
#include <util/numbering.h>
13+
#include <util/std_expr.h>
1414

1515
/// create formula strings for external LTL to Buechi tools
1616
class ltl_sva_to_stringt
@@ -45,8 +45,8 @@ class ltl_sva_to_stringt
4545

4646
using modet = enum { PROPERTY, SVA_SEQUENCE, BOOLEAN };
4747

48-
resultt prefix(std::string s, const exprt &, modet);
49-
resultt suffix(std::string s, const exprt &, modet);
48+
resultt prefix(std::string s, const unary_exprt &, modet);
49+
resultt suffix(std::string s, const unary_exprt &, modet);
5050
resultt infix(std::string s, const exprt &, modet);
5151
resultt rec(const exprt &, modet);
5252
};

0 commit comments

Comments
 (0)