Skip to content

Commit e56aa4e

Browse files
authored
Merge pull request #3342 from tautschnig/show_program
Refactor show_program [blocks: #2310]
2 parents 28935e6 + 425fecd commit e56aa4e

File tree

1 file changed

+44
-67
lines changed

1 file changed

+44
-67
lines changed

src/goto-symex/show_program.cpp

Lines changed: 44 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -17,87 +17,64 @@ Author: Daniel Kroening, [email protected]
1717

1818
#include <langapi/language_util.h>
1919

20+
/// Output a single SSA step
21+
/// \param ns: Namespace
22+
/// \param step: SSA step
23+
/// \param annotation: Additonal information to include in step output
24+
/// \param count: Step number, incremented after output
25+
static void show_step(
26+
const namespacet &ns,
27+
const symex_target_equationt::SSA_stept &step,
28+
const std::string &annotation,
29+
std::size_t &count)
30+
{
31+
const irep_idt &function = step.source.function;
32+
33+
std::string string_value = (step.is_shared_read() || step.is_shared_write())
34+
? from_expr(ns, function, step.ssa_lhs)
35+
: from_expr(ns, function, step.cond_expr);
36+
std::cout << '(' << count << ") ";
37+
if(annotation.empty())
38+
std::cout << string_value;
39+
else
40+
std::cout << annotation << '(' << string_value << ')';
41+
std::cout << '\n';
42+
43+
if(!step.guard.is_true())
44+
{
45+
const std::string guard_string = from_expr(ns, function, step.guard);
46+
std::cout << std::string(std::to_string(count).size() + 3, ' ');
47+
std::cout << "guard: " << guard_string << '\n';
48+
}
49+
50+
++count;
51+
}
52+
2053
void show_program(const namespacet &ns, const symex_target_equationt &equation)
2154
{
22-
unsigned count = 1;
55+
std::size_t count = 1;
2356

24-
std::cout << "\n"
25-
<< "Program constraints:"
26-
<< "\n";
57+
std::cout << '\n' << "Program constraints:" << '\n';
2758

2859
for(const auto &step : equation.SSA_steps)
2960
{
3061
std::cout << "// " << step.source.pc->location_number << " ";
3162
std::cout << step.source.pc->source_location.as_string() << "\n";
32-
const irep_idt &function = step.source.function;
3363

3464
if(step.is_assignment())
35-
{
36-
std::string string_value = from_expr(ns, function, step.cond_expr);
37-
std::cout << "(" << count << ") " << string_value << "\n";
38-
39-
if(!step.guard.is_true())
40-
{
41-
std::string string_value = from_expr(ns, function, step.guard);
42-
std::cout << std::string(std::to_string(count).size() + 3, ' ');
43-
std::cout << "guard: " << string_value << "\n";
44-
}
45-
46-
count++;
47-
}
65+
show_step(ns, step, "", count);
4866
else if(step.is_assert())
49-
{
50-
std::string string_value = from_expr(ns, function, step.cond_expr);
51-
std::cout << "(" << count << ") ASSERT(" << string_value << ") "
52-
<< "\n";
53-
54-
if(!step.guard.is_true())
55-
{
56-
std::string string_value = from_expr(ns, function, step.guard);
57-
std::cout << std::string(std::to_string(count).size() + 3, ' ');
58-
std::cout << "guard: " << string_value << "\n";
59-
}
60-
61-
count++;
62-
}
67+
show_step(ns, step, "ASSERT", count);
6368
else if(step.is_assume())
64-
{
65-
std::string string_value = from_expr(ns, function, step.cond_expr);
66-
std::cout << "(" << count << ") ASSUME(" << string_value << ") "
67-
<< "\n";
68-
69-
if(!step.guard.is_true())
70-
{
71-
std::string string_value = from_expr(ns, function, step.guard);
72-
std::cout << std::string(std::to_string(count).size() + 3, ' ');
73-
std::cout << "guard: " << string_value << "\n";
74-
}
75-
76-
count++;
77-
}
69+
show_step(ns, step, "ASSUME", count);
7870
else if(step.is_constraint())
7971
{
80-
std::string string_value = from_expr(ns, function, step.cond_expr);
81-
std::cout << "(" << count << ") CONSTRAINT(" << string_value << ") "
82-
<< "\n";
83-
84-
count++;
85-
}
86-
else if(step.is_shared_read() || step.is_shared_write())
87-
{
88-
std::string string_value = from_expr(ns, function, step.ssa_lhs);
89-
std::cout << "(" << count << ") SHARED_"
90-
<< (step.is_shared_write() ? "WRITE" : "READ") << "("
91-
<< string_value << ")\n";
92-
93-
if(!step.guard.is_true())
94-
{
95-
std::string string_value = from_expr(ns, function, step.guard);
96-
std::cout << std::string(std::to_string(count).size() + 3, ' ');
97-
std::cout << "guard: " << string_value << "\n";
98-
}
99-
100-
count++;
72+
PRECONDITION(step.guard.is_true());
73+
show_step(ns, step, "CONSTRAINT", count);
10174
}
75+
else if(step.is_shared_read())
76+
show_step(ns, step, "SHARED_READ", count);
77+
else if(step.is_shared_write())
78+
show_step(ns, step, "SHARED_WRITE", count);
10279
}
10380
}

0 commit comments

Comments
 (0)