Skip to content

Commit 90c7354

Browse files
committed
introduce property_checker_resultt
This introduces a type for the result from an engine, as a replacement for 'int'.
1 parent c60cabb commit 90c7354

File tree

6 files changed

+66
-55
lines changed

6 files changed

+66
-55
lines changed

src/ebmc/bdd_engine.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class bdd_enginet
5151
{
5252
}
5353

54-
int operator()();
54+
property_checker_resultt operator()();
5555

5656
protected:
5757
using propertiest = ebmc_propertiest;
@@ -173,7 +173,7 @@ Function: bdd_enginet::operator()
173173
174174
\*******************************************************************/
175175

176-
int bdd_enginet::operator()()
176+
property_checker_resultt bdd_enginet::operator()()
177177
{
178178
try
179179
{
@@ -216,30 +216,29 @@ int bdd_enginet::operator()()
216216
}
217217

218218
std::cout << '\n';
219-
220-
return 0;
219+
220+
return property_checker_resultt::SUCCESS;
221221
}
222222

223223
if(properties.properties.empty())
224224
{
225225
message.error() << "no properties" << messaget::eom;
226-
return 1;
226+
return property_checker_resultt::ERROR;
227227
}
228228

229229
for(propertyt &p : properties.properties)
230230
check_property(p);
231231

232-
report_results(cmdline, properties, ns, message.get_message_handler());
233-
return properties.exit_code();
232+
return property_checker_resultt::REPORT_RESULT;
234233
}
235234
catch(const char *error_msg)
236235
{
237236
message.error() << error_msg << messaget::eom;
238-
return 1;
237+
return property_checker_resultt::ERROR;
239238
}
240239
catch(int)
241240
{
242-
return 1;
241+
return property_checker_resultt::ERROR;
243242
}
244243
}
245244

@@ -1002,7 +1001,7 @@ Function: bdd_engine
10021001
10031002
\*******************************************************************/
10041003

1005-
int bdd_engine(
1004+
property_checker_resultt bdd_engine(
10061005
const cmdlinet &cmdline,
10071006
transition_systemt &transition_system,
10081007
ebmc_propertiest &properties,

src/ebmc/bdd_engine.h

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

12-
#include <util/cmdline.h>
13-
#include <util/message.h>
12+
#include "property_checker.h"
1413

15-
#include "ebmc_properties.h"
16-
17-
int bdd_engine(
14+
property_checker_resultt bdd_engine(
1815
const cmdlinet &,
1916
transition_systemt &,
2017
ebmc_propertiest &,

src/ebmc/k_induction.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ Function: k_induction
118118
119119
\*******************************************************************/
120120

121-
int k_induction(
121+
property_checker_resultt k_induction(
122122
const cmdlinet &cmdline,
123123
transition_systemt &transition_system,
124124
ebmc_propertiest &properties,
@@ -154,9 +154,7 @@ int k_induction(
154154
k_induction(
155155
k, transition_system, properties, solver_factory, message_handler);
156156

157-
const namespacet ns(transition_system.symbol_table);
158-
report_results(cmdline, properties, ns, message_handler);
159-
return properties.exit_code();
157+
return property_checker_resultt::REPORT_RESULT;
160158
}
161159

162160
/*******************************************************************\

src/ebmc/k_induction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ Author: Daniel Kroening, [email protected]
1313
#include <util/message.h>
1414

1515
#include "ebmc_solver_factory.h"
16+
#include "property_checker.h"
1617

1718
class transition_systemt;
1819
class ebmc_propertiest;
1920

20-
int k_induction(
21+
property_checker_resultt k_induction(
2122
const cmdlinet &,
2223
transition_systemt &,
2324
ebmc_propertiest &,

src/ebmc/property_checker.cpp

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Author: Daniel Kroening, [email protected]
2727
#include <chrono>
2828
#include <iostream>
2929

30-
int word_level_bmc(
30+
property_checker_resultt word_level_bmc(
3131
const cmdlinet &cmdline,
3232
const transition_systemt &transition_system,
3333
ebmc_propertiest &properties,
@@ -38,8 +38,6 @@ int word_level_bmc(
3838
bool convert_only = cmdline.isset("smt2") || cmdline.isset("outfile") ||
3939
cmdline.isset("show-formula");
4040

41-
int result = 0;
42-
4341
try
4442
{
4543
if(cmdline.isset("max-bound"))
@@ -93,38 +91,34 @@ int word_level_bmc(
9391
solver_factory,
9492
message_handler);
9593

96-
if(!convert_only)
97-
{
98-
const namespacet ns(transition_system.symbol_table);
99-
report_results(cmdline, properties, ns, message_handler);
100-
result = properties.exit_code();
101-
}
94+
if(convert_only)
95+
return property_checker_resultt::SUCCESS;
10296
}
10397
}
10498

10599
catch(const char *e)
106100
{
107101
messaget message{message_handler};
108102
message.error() << e << messaget::eom;
109-
return 10;
103+
return property_checker_resultt::ERROR;
110104
}
111105

112106
catch(const std::string &e)
113107
{
114108
messaget message{message_handler};
115109
message.error() << e << messaget::eom;
116-
return 10;
110+
return property_checker_resultt::ERROR;
117111
}
118112

119113
catch(int)
120114
{
121-
return 10;
115+
return property_checker_resultt::ERROR;
122116
}
123117

124-
return result;
118+
return property_checker_resultt::REPORT_RESULT;
125119
}
126120

127-
int finish_bit_level_bmc(
121+
property_checker_resultt finish_bit_level_bmc(
128122
std::size_t bound,
129123
const bmc_mapt &bmc_map,
130124
propt &solver,
@@ -179,12 +173,12 @@ int finish_bit_level_bmc(
179173

180174
case propt::resultt::P_ERROR:
181175
message.error() << "Error from decision procedure" << messaget::eom;
182-
return 2;
176+
return property_checker_resultt::ERROR;
183177

184178
default:
185179
message.error() << "Unexpected result from decision procedure"
186180
<< messaget::eom;
187-
return 1;
181+
return property_checker_resultt::ERROR;
188182
}
189183
}
190184

@@ -195,10 +189,10 @@ int finish_bit_level_bmc(
195189
<< std::chrono::duration<double>(sat_stop_time - sat_start_time).count()
196190
<< messaget::eom;
197191

198-
return properties.exit_code();
192+
return property_checker_resultt::REPORT_RESULT;
199193
}
200194

201-
int bit_level_bmc(
195+
property_checker_resultt bit_level_bmc(
202196
cnft &solver,
203197
bool convert_only,
204198
const cmdlinet &cmdline,
@@ -220,8 +214,6 @@ int bit_level_bmc(
220214
bound = 1;
221215
}
222216

223-
int result;
224-
225217
try
226218
{
227219
bmc_mapt bmc_map;
@@ -288,38 +280,35 @@ int bit_level_bmc(
288280
}
289281

290282
if(convert_only)
291-
result = 0;
283+
return property_checker_resultt::SUCCESS;
292284
else
293285
{
294-
result = finish_bit_level_bmc(
286+
return finish_bit_level_bmc(
295287
bound, bmc_map, solver, transition_system, properties, message_handler);
296-
report_results(cmdline, properties, ns, message_handler);
297288
}
298289
}
299290

300291
catch(const char *e)
301292
{
302293
messaget message{message_handler};
303294
message.error() << e << messaget::eom;
304-
return 10;
295+
return property_checker_resultt::ERROR;
305296
}
306297

307298
catch(const std::string &e)
308299
{
309300
messaget message{message_handler};
310301
message.error() << e << messaget::eom;
311-
return 10;
302+
return property_checker_resultt::ERROR;
312303
}
313304

314305
catch(int)
315306
{
316-
return 10;
307+
return property_checker_resultt::ERROR;
317308
}
318-
319-
return result;
320309
}
321310

322-
int bit_level_bmc(
311+
property_checker_resultt bit_level_bmc(
323312
const cmdlinet &cmdline,
324313
transition_systemt &transition_system,
325314
ebmc_propertiest &properties,
@@ -380,23 +369,43 @@ int property_checker(
380369
ebmc_propertiest &properties,
381370
message_handlert &message_handler)
382371
{
372+
property_checker_resultt result;
373+
383374
if(cmdline.isset("bdd") || cmdline.isset("show-bdds"))
384375
{
385-
return bdd_engine(cmdline, transition_system, properties, message_handler);
376+
result =
377+
bdd_engine(cmdline, transition_system, properties, message_handler);
386378
}
387379
else if(cmdline.isset("aig") || cmdline.isset("dimacs"))
388380
{
389-
return bit_level_bmc(
390-
cmdline, transition_system, properties, message_handler);
381+
result =
382+
bit_level_bmc(cmdline, transition_system, properties, message_handler);
391383
}
392384
else if(cmdline.isset("k-induction"))
393385
{
394-
return k_induction(cmdline, transition_system, properties, message_handler);
386+
result =
387+
k_induction(cmdline, transition_system, properties, message_handler);
395388
}
396389
else
397390
{
398391
// default engine is word-level BMC
399-
return word_level_bmc(
400-
cmdline, transition_system, properties, message_handler);
392+
result =
393+
word_level_bmc(cmdline, transition_system, properties, message_handler);
394+
}
395+
396+
switch(result)
397+
{
398+
case property_checker_resultt::ERROR:
399+
return 10;
400+
401+
case property_checker_resultt::SUCCESS:
402+
return 0;
403+
404+
case property_checker_resultt::REPORT_RESULT:
405+
const namespacet ns{transition_system.symbol_table};
406+
report_results(cmdline, properties, ns, message_handler);
407+
return properties.exit_code();
401408
}
409+
410+
UNREACHABLE;
402411
}

src/ebmc/property_checker.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Author: Daniel Kroening, [email protected]
1212
#include "ebmc_properties.h"
1313
#include "transition_system.h"
1414

15+
enum class property_checker_resultt
16+
{
17+
REPORT_RESULT,
18+
SUCCESS,
19+
ERROR
20+
};
21+
1522
int property_checker(
1623
const cmdlinet &,
1724
transition_systemt &,

0 commit comments

Comments
 (0)