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::VERIFICATION_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::VERIFICATION_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::VERIFICATION_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}
0 commit comments