@@ -27,6 +27,7 @@ Author: Peter Schrammel
27
27
#include < goto-programs/adjust_float_expressions.h>
28
28
#include < goto-programs/goto_convert_functions.h>
29
29
#include < goto-programs/goto_inline.h>
30
+ #include < goto-programs/initialize_goto_model.h>
30
31
#include < goto-programs/instrument_preconditions.h>
31
32
#include < goto-programs/link_to_library.h>
32
33
#include < goto-programs/loop_ids.h>
@@ -60,28 +61,10 @@ Author: Peter Schrammel
60
61
#include < goto-diff/goto_diff.h>
61
62
#include < goto-diff/unified_diff.h>
62
63
63
- // TODO: do not use language_uit for this; requires a refactoring of
64
- // initialize_goto_model to support parsing specific command line files
65
64
jdiff_parse_optionst::jdiff_parse_optionst (int argc, const char **argv)
66
65
: parse_options_baset(JDIFF_OPTIONS, argc, argv, ui_message_handler),
67
- jdiff_languagest(cmdline, ui_message_handler, &options),
68
- ui_message_handler(cmdline, std::string(" JDIFF " ) + CBMC_VERSION),
69
- languages2(cmdline, ui_message_handler, &options)
70
- {
71
- }
72
-
73
- ::jdiff_parse_optionst::jdiff_parse_optionst (
74
- int argc,
75
- const char **argv,
76
- const std::string &extra_options)
77
- : parse_options_baset(
78
- JDIFF_OPTIONS + extra_options,
79
- argc,
80
- argv,
81
- ui_message_handler),
82
- jdiff_languagest(cmdline, ui_message_handler, &options),
83
- ui_message_handler(cmdline, std::string(" JDIFF " ) + CBMC_VERSION),
84
- languages2(cmdline, ui_message_handler, &options)
66
+ messaget(ui_message_handler),
67
+ ui_message_handler(cmdline, std::string(" JDIFF " ) + CBMC_VERSION)
85
68
{
86
69
}
87
70
@@ -222,19 +205,21 @@ int jdiff_parse_optionst::doit()
222
205
return CPROVER_EXIT_INCORRECT_TASK;
223
206
}
224
207
225
- goto_modelt goto_model1, goto_model2 ;
208
+ register_languages () ;
226
209
227
- int get_goto_program_ret = get_goto_program (options, *this , goto_model1);
228
- if (get_goto_program_ret != -1 )
229
- return get_goto_program_ret;
230
- get_goto_program_ret = get_goto_program (options, languages2, goto_model2);
231
- if (get_goto_program_ret != -1 )
232
- return get_goto_program_ret;
210
+ goto_modelt goto_model1 =
211
+ initialize_goto_model ({cmdline.args [0 ]}, ui_message_handler, options);
212
+ if (process_goto_program (options, goto_model1))
213
+ return CPROVER_EXIT_INTERNAL_ERROR;
214
+ goto_modelt goto_model2 =
215
+ initialize_goto_model ({cmdline.args [1 ]}, ui_message_handler, options);
216
+ if (process_goto_program (options, goto_model2))
217
+ return CPROVER_EXIT_INTERNAL_ERROR;
233
218
234
219
if (cmdline.isset (" show-loops" ))
235
220
{
236
- show_loop_ids (get_ui (), goto_model1);
237
- show_loop_ids (get_ui (), goto_model2);
221
+ show_loop_ids (ui_message_handler. get_ui (), goto_model1);
222
+ show_loop_ids (ui_message_handler. get_ui (), goto_model2);
238
223
return CPROVER_EXIT_SUCCESS;
239
224
}
240
225
@@ -287,61 +272,6 @@ int jdiff_parse_optionst::doit()
287
272
return CPROVER_EXIT_SUCCESS;
288
273
}
289
274
290
- int jdiff_parse_optionst::get_goto_program (
291
- const optionst &options,
292
- jdiff_languagest &languages,
293
- goto_modelt &goto_model)
294
- {
295
- status () << " Reading program from `" << cmdline.args [0 ] << " '" << eom;
296
-
297
- if (is_goto_binary (cmdline.args [0 ]))
298
- {
299
- auto tmp_goto_model =
300
- read_goto_binary (cmdline.args [0 ], languages.get_message_handler ());
301
- if (!tmp_goto_model.has_value ())
302
- return CPROVER_EXIT_INCORRECT_TASK;
303
-
304
- goto_model = std::move (*tmp_goto_model);
305
-
306
- config.set (cmdline);
307
-
308
- // This one is done.
309
- cmdline.args .erase (cmdline.args .begin ());
310
- }
311
- else
312
- {
313
- // This is a a workaround to make parse() think that there is only
314
- // one source file.
315
- std::string arg2 (" " );
316
- if (cmdline.args .size () == 2 )
317
- {
318
- arg2 = cmdline.args [1 ];
319
- cmdline.args .erase (--cmdline.args .end ());
320
- }
321
-
322
- if (languages.parse () || languages.typecheck () || languages.final ())
323
- return CPROVER_EXIT_INCORRECT_TASK;
324
-
325
- // we no longer need any parse trees or language files
326
- languages.clear_parse ();
327
-
328
- status () << " Generating GOTO Program" << eom;
329
-
330
- goto_model.symbol_table = languages.symbol_table ;
331
- goto_convert (
332
- goto_model.symbol_table , goto_model.goto_functions , ui_message_handler);
333
-
334
- if (process_goto_program (options, goto_model))
335
- return CPROVER_EXIT_INTERNAL_ERROR;
336
-
337
- // if we had a second argument then we will handle it next
338
- if (arg2 != " " )
339
- cmdline.args [0 ] = arg2;
340
- }
341
-
342
- return -1 ; // no error, continue
343
- }
344
-
345
275
bool jdiff_parse_optionst::process_goto_program (
346
276
const optionst &options,
347
277
goto_modelt &goto_model)
0 commit comments