Skip to content

Commit cd90c7d

Browse files
Remove cmdlinet from init/lazy_goto_model
It should be possible to build a goto model without requiring a cmdlinet, e.g. in unit tests.
1 parent 22ef562 commit cd90c7d

10 files changed

+57
-32
lines changed

jbmc/src/janalyzer/janalyzer_parse_options.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ void janalyzer_parse_optionst::get_command_line_options(optionst &options)
7777
exit(CPROVER_EXIT_USAGE_ERROR);
7878
}
7979

80+
if(cmdline.isset("function"))
81+
options.set_option("function", cmdline.get_value("function"));
82+
8083
parse_java_language_options(cmdline, options);
8184

8285
// check assertions
@@ -352,7 +355,8 @@ int janalyzer_parse_optionst::doit()
352355

353356
try
354357
{
355-
goto_model = initialize_goto_model(cmdline, get_message_handler(), options);
358+
goto_model =
359+
initialize_goto_model(cmdline.args, get_message_handler(), options);
356360
}
357361

358362
catch(const char *e)

jbmc/src/jbmc/jbmc_parse_options.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ void jbmc_parse_optionst::get_command_line_options(optionst &options)
108108
}
109109

110110
jbmc_parse_optionst::set_default_options(options);
111+
112+
if(cmdline.isset("function"))
113+
options.set_option("function", cmdline.get_value("function"));
114+
111115
parse_java_language_options(cmdline, options);
112116
parse_java_object_factory_options(cmdline, options);
113117

@@ -550,7 +554,7 @@ int jbmc_parse_optionst::doit()
550554
// Use symex-driven lazy loading:
551555
lazy_goto_modelt lazy_goto_model=lazy_goto_modelt::from_handler_object(
552556
*this, options, get_message_handler());
553-
lazy_goto_model.initialize(cmdline, options);
557+
lazy_goto_model.initialize(cmdline.args, options);
554558

555559
class_hierarchy =
556560
util_make_unique<class_hierarchyt>(lazy_goto_model.symbol_table);
@@ -630,7 +634,7 @@ int jbmc_parse_optionst::get_goto_program(
630634
{
631635
lazy_goto_modelt lazy_goto_model=lazy_goto_modelt::from_handler_object(
632636
*this, options, get_message_handler());
633-
lazy_goto_model.initialize(cmdline, options);
637+
lazy_goto_model.initialize(cmdline.args, options);
634638

635639
class_hierarchy =
636640
util_make_unique<class_hierarchyt>(lazy_goto_model.symbol_table);

jbmc/unit/pointer-analysis/custom_value_set_analysis.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -172,20 +172,18 @@ SCENARIO("test_value_set_analysis",
172172
{
173173
config.set_arch("none");
174174
config.main = "";
175-
cmdlinet command_line;
176175

177176
// This classpath is the default, but the config object
178177
// is global and previous unit tests may have altered it
179-
command_line.set("java-cp-include-files", "CustomVSATest.class");
180178
config.java.classpath={"."};
181-
command_line.args.push_back("pointer-analysis/CustomVSATest.jar");
182179

183-
register_language(new_java_bytecode_language);
184180
optionst options;
185-
parse_java_language_options(command_line, options);
181+
options.set_option("java-cp-include-files", "CustomVSATest.class");
182+
183+
register_language(new_java_bytecode_language);
186184

187-
goto_modelt goto_model =
188-
initialize_goto_model(command_line, null_message_handler, options);
185+
goto_modelt goto_model = initialize_goto_model(
186+
{"pointer-analysis/CustomVSATest.jar"}, null_message_handler, options);
189187

190188
null_message_handlert message_handler;
191189
remove_java_new(goto_model, message_handler);

src/cbmc/cbmc_parse_options.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options)
111111
cbmc_parse_optionst::set_default_options(options);
112112
parse_c_object_factory_options(cmdline, options);
113113

114+
if(cmdline.isset("function"))
115+
options.set_option("function", cmdline.get_value("function"));
116+
114117
if(cmdline.isset("cover") && cmdline.isset("unwinding-assertions"))
115118
{
116119
error() << "--cover and --unwinding-assertions must not be given together"
@@ -403,6 +406,11 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options)
403406
options.set_option("validate-ssa-equation", true);
404407
}
405408

409+
if(cmdline.isset("validate-goto-model"))
410+
{
411+
options.set_option("validate-goto-model", true);
412+
}
413+
406414
PARSE_OPTIONS_GOTO_TRACE(cmdline, options);
407415
}
408416

@@ -594,7 +602,8 @@ int cbmc_parse_optionst::get_goto_program(
594602

595603
try
596604
{
597-
goto_model = initialize_goto_model(cmdline, ui_message_handler, options);
605+
goto_model =
606+
initialize_goto_model(cmdline.args, ui_message_handler, options);
598607

599608
if(cmdline.isset("show-symbol-table"))
600609
{

src/goto-analyzer/goto_analyzer_parse_options.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ void goto_analyzer_parse_optionst::get_command_line_options(optionst &options)
8888
exit(CPROVER_EXIT_USAGE_ERROR);
8989
}
9090

91+
if(cmdline.isset("function"))
92+
options.set_option("function", cmdline.get_value("function"));
93+
9194
#if 0
9295
if(cmdline.isset("c89"))
9396
config.ansi_c.set_c89();
@@ -298,6 +301,11 @@ void goto_analyzer_parse_optionst::get_command_line_options(optionst &options)
298301
}
299302
}
300303
}
304+
305+
if(cmdline.isset("validate-goto-model"))
306+
{
307+
options.set_option("validate-goto-model", true);
308+
}
301309
}
302310

303311
/// For the task, build the appropriate kind of analyzer
@@ -390,7 +398,8 @@ int goto_analyzer_parse_optionst::doit()
390398

391399
try
392400
{
393-
goto_model = initialize_goto_model(cmdline, get_message_handler(), options);
401+
goto_model =
402+
initialize_goto_model(cmdline.args, get_message_handler(), options);
394403
}
395404

396405
catch(const char *e)

src/goto-programs/initialize_goto_model.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ Author: Daniel Kroening, [email protected]
1414
#include <fstream>
1515
#include <iostream>
1616

17-
#include <util/cmdline.h>
1817
#include <util/config.h>
1918
#include <util/message.h>
2019
#include <util/object_factory_parameters.h>
20+
#include <util/options.h>
2121
#include <util/unicode.h>
2222

2323
#include <langapi/mode.h>
@@ -30,12 +30,11 @@ Author: Daniel Kroening, [email protected]
3030
#include "read_goto_binary.h"
3131

3232
goto_modelt initialize_goto_model(
33-
const cmdlinet &cmdline,
33+
const std::vector<std::string> &files,
3434
message_handlert &message_handler,
3535
const optionst &options)
3636
{
3737
messaget msg(message_handler);
38-
const std::vector<std::string> &files=cmdline.args;
3938
if(files.empty())
4039
{
4140
throw invalid_command_line_argument_exceptiont(
@@ -124,7 +123,7 @@ goto_modelt initialize_goto_model(
124123

125124
bool entry_point_generation_failed=false;
126125

127-
if(binaries_provided_start && cmdline.isset("function"))
126+
if(binaries_provided_start && options.is_set("function"))
128127
{
129128
// Rebuild the entry-point, using the language annotation of the
130129
// existing __CPROVER_start function:
@@ -139,7 +138,7 @@ goto_modelt initialize_goto_model(
139138
if(binaries.empty())
140139
{
141140
// Enable/disable stub generation for opaque methods
142-
bool stubs_enabled=cmdline.isset("generate-opaque-stubs");
141+
bool stubs_enabled = options.is_set("generate-opaque-stubs");
143142
language_files.set_should_generate_opaque_method_stubs(stubs_enabled);
144143
}
145144

@@ -166,7 +165,7 @@ goto_modelt initialize_goto_model(
166165
goto_model.goto_functions,
167166
message_handler);
168167

169-
if(cmdline.isset("validate-goto-model"))
168+
if(options.is_set("validate-goto-model"))
170169
{
171170
goto_model.validate(validation_modet::EXCEPTION);
172171
}

src/goto-programs/initialize_goto_model.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ Author: Daniel Kroening, [email protected]
1414

1515
#include "goto_model.h"
1616

17-
class cmdlinet;
1817
class message_handlert;
1918
class optionst;
2019

2120
goto_modelt initialize_goto_model(
22-
const cmdlinet &cmdline,
21+
const std::vector<std::string> &files,
2322
message_handlert &message_handler,
2423
const optionst &options);
2524

src/goto-programs/lazy_goto_model.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99

1010
#include <langapi/mode.h>
1111

12-
#include <util/cmdline.h>
1312
#include <util/config.h>
1413
#include <util/exception_utils.h>
1514
#include <util/journalling_symbol_table.h>
15+
#include <util/options.h>
1616
#include <util/unicode.h>
1717

1818
#include <langapi/language.h>
@@ -105,16 +105,14 @@ lazy_goto_modelt::lazy_goto_modelt(lazy_goto_modelt &&other)
105105
/// language implements `languaget::convert_lazy_method`; any method not handled
106106
/// there must be populated eagerly. See `lazy_goto_modelt::get_goto_function`
107107
/// for more detail.
108-
/// \param cmdline: command-line arguments specifying source files and GOTO
109-
/// binaries to load
108+
/// \param files: source files and GOTO binaries to load
110109
/// \param options: options to pass on to the language front-ends
111110
void lazy_goto_modelt::initialize(
112-
const cmdlinet &cmdline,
111+
const std::vector<std::string> &files,
113112
const optionst &options)
114113
{
115114
messaget msg(message_handler);
116115

117-
const std::vector<std::string> &files=cmdline.args;
118116
if(files.empty())
119117
{
120118
throw invalid_command_line_argument_exceptiont(
@@ -201,7 +199,7 @@ void lazy_goto_modelt::initialize(
201199

202200
bool entry_point_generation_failed=false;
203201

204-
if(binaries_provided_start && cmdline.isset("function"))
202+
if(binaries_provided_start && options.is_set("function"))
205203
{
206204
// Rebuild the entry-point, using the language annotation of the
207205
// existing __CPROVER_start function:
@@ -216,7 +214,7 @@ void lazy_goto_modelt::initialize(
216214
if(binaries.empty())
217215
{
218216
// Enable/disable stub generation for opaque methods
219-
bool stubs_enabled=cmdline.isset("generate-opaque-stubs");
217+
bool stubs_enabled = options.is_set("generate-opaque-stubs");
220218
language_files.set_should_generate_opaque_method_stubs(stubs_enabled);
221219
}
222220

src/goto-programs/lazy_goto_model.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "lazy_goto_functions_map.h"
1414
#include "goto_convert_functions.h"
1515

16-
class cmdlinet;
1716
class optionst;
1817

1918
/// A GOTO model that produces function bodies on demand. It owns a
@@ -28,7 +27,7 @@ class optionst;
2827
/// The typical use case looks like:
2928
///
3029
/// lazy_goto_modelt model(...callback parameters...);
31-
/// model.initialize(cmdline, options);
30+
/// model.initialize(cmdline.args, options);
3231
/// model.get_goto_function("needed_function1")
3332
/// model.get_goto_function("needed_function2");
3433
/// ...
@@ -179,7 +178,8 @@ class lazy_goto_modelt : public abstract_goto_modelt
179178
message_handler);
180179
}
181180

182-
void initialize(const cmdlinet &cmdline, const optionst &options);
181+
void
182+
initialize(const std::vector<std::string> &files, const optionst &options);
183183

184184
/// Eagerly loads all functions from the symbol table.
185185
void load_all_functions() const;

src/langapi/language_ui.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ Author: Daniel Kroening, [email protected]
1212
#include <memory>
1313
#include <iostream>
1414

15-
#include <util/namespace.h>
1615
#include <util/cmdline.h>
1716
#include <util/config.h>
17+
#include <util/namespace.h>
18+
#include <util/options.h>
1819
#include <util/unicode.h>
1920

2021
#include "language.h"
@@ -112,8 +113,12 @@ bool language_uit::final()
112113
{
113114
language_files.set_message_handler(*message_handler);
114115

116+
// TODO: This should be moved elsewhere because it is not used in
117+
// this repository.
115118
// Enable/disable stub generation for opaque methods
116-
bool stubs_enabled=_cmdline.isset("generate-opaque-stubs");
119+
bool stubs_enabled = false;
120+
if(options != nullptr)
121+
stubs_enabled = options->is_set("generate-opaque-stubs");
117122
language_files.set_should_generate_opaque_method_stubs(stubs_enabled);
118123

119124
if(language_files.final(symbol_table))

0 commit comments

Comments
 (0)