Go to the documentation of this file.
24 post_process_functiont post_process_function,
25 post_process_functionst post_process_functions,
26 can_generate_function_bodyt driver_program_can_generate_function_body,
27 generate_function_bodyt driver_program_generate_function_body,
30 symbol_table(goto_model->symbol_table),
32 goto_model->goto_functions.function_map,
41 journalling_symbol_table,
42 goto_model->goto_functions,
47 driver_program_can_generate_function_body,
48 driver_program_generate_function_body,
50 post_process_function(post_process_function),
51 post_process_functions(post_process_functions),
52 driver_program_can_generate_function_body(
53 driver_program_can_generate_function_body),
54 driver_program_generate_function_body(
55 driver_program_generate_function_body),
56 message_handler(message_handler)
58 language_files.set_message_handler(message_handler);
62 : goto_model(std::move(other.goto_model)),
63 symbol_table(goto_model->symbol_table),
65 goto_model->goto_functions.function_map,
74 journalling_symbol_table,
75 goto_model->goto_functions,
80 other.driver_program_can_generate_function_body,
81 other.driver_program_generate_function_body,
82 other.message_handler),
83 language_files(std::move(other.language_files)),
84 post_process_function(other.post_process_function),
85 post_process_functions(other.post_process_functions),
86 message_handler(other.message_handler)
111 const std::vector<std::string> &files,
119 "no program provided",
121 "one or more paths to a goto binary or a source file in a supported "
125 std::vector<std::string> binaries, sources;
126 binaries.reserve(files.size());
127 sources.reserve(files.size());
129 for(
const auto &
file : files)
132 binaries.push_back(
file);
134 sources.push_back(
file);
139 for(
const auto &filename : sources)
142 std::ifstream infile(
widen(filename));
144 std::ifstream infile(filename);
150 "failed to open input file `" + filename +
'\'');
159 "failed to figure out type of file `" + filename +
'\'');
168 if(language.
parse(infile, filename))
184 for(
const std::string &
file : binaries)
193 "failed to read/link goto model", source_location);
197 bool binaries_provided_start =
200 bool entry_point_generation_failed=
false;
202 if(binaries_provided_start && options.
is_set(
"function"))
208 entry_point_generation_failed=rebuild_existing_start();
210 else if(!binaries_provided_start)
214 entry_point_generation_failed=
218 if(entry_point_generation_failed)
234 table_size=new_table_size;
237 std::vector<irep_idt> fn_ids_to_convert;
240 if(named_symbol.second.is_function())
241 fn_ids_to_convert.push_back(named_symbol.first);
244 for(
const irep_idt &symbol_name : fn_ids_to_convert)
251 }
while(new_table_size!=table_size);
253 goto_model->goto_functions.compute_location_numbers();
Class that provides messages with a built-in verbosity 'level'.
bool has_symbol(const irep_idt &name) const
Check whether a symbol exists in the symbol table.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
bool can_produce_function(const key_type &name) const
Determines if this lazy GOTO functions map can produce a body for the given function.
symbol_tablet & symbol_table
Reference to symbol_table in the internal goto_model.
const symbolt & lookup_ref(const irep_idt &name) const
Find a symbol in the symbol table for read-only access.
bool is_goto_binary(const std::string &filename)
static journalling_symbol_tablet wrap(symbol_table_baset &base_symbol_table)
const post_process_functiont post_process_function
const lazy_goto_functions_mapt goto_functions
bool typecheck(symbol_tablet &symbol_table)
mstreamt & status() const
language_filet & add_language_file(const std::string &filename)
language_filest language_files
const changesett & get_updated() const
void unload(const key_type &name) const
Thrown when we can't handle something in an input source file.
bool generate_support_functions(symbol_tablet &symbol_table)
bool can_produce_function(const irep_idt &id) const override
Determines if this model can produce a body for the given function.
message_handlert & message_handler
Logging helper field.
virtual void set_language_options(const optionst &)
Set language-specific options.
Thrown when a goto program that's being processed is in an invalid format, for example passing the wr...
std::unique_ptr< languaget > get_language_from_filename(const std::string &filename)
Get the language corresponding to the registered file name extensions.
A GOTO model that produces function bodies on demand.
bool is_set(const std::string &option) const
N.B. opts.is_set("foo") does not imply opts.get_bool_option("foo")
void set_file(const irep_idt &file)
Thrown when some external system fails unexpectedly.
virtual bool parse(std::istream &instream, const std::string &path)=0
virtual void set_message_handler(message_handlert &_message_handler)
std::unique_ptr< goto_modelt > goto_model
A goto function, consisting of function type (see type), function body (see body),...
void initialize(const std::vector< std::string > &files, const optionst &options)
Performs initial symbol table and language_filest initialization from a given commandline and parsed ...
std::unique_ptr< languaget > language
std::wstring widen(const char *s)
const post_process_functionst post_process_functions
bool final(symbol_table_baset &symbol_table)
A collection of goto functions.
void ensure_function_loaded(const key_type &name) const
bool read_object_and_link(const std::string &file_name, goto_modelt &dest, message_handlert &message_handler)
reads an object file, and also updates config
void load_all_functions() const
Eagerly loads all functions from the symbol table.
static irep_idt entry_point()
Get the identifier of the entry point to a goto model.
unsignedbv_typet size_type()
Thrown when users pass incorrect command line arguments, for example passing no files to analysis or ...
void set_object_bits_from_symbol_table(const symbol_tablet &)
Sets the number of bits used for object addresses.
A symbol table wrapper that records which entries have been updated/removed.
Interface providing access to a single function in a GOTO model, plus its associated symbol table.
lazy_goto_modelt(post_process_functiont post_process_function, post_process_functionst post_process_functions, can_generate_function_bodyt driver_program_can_generate_function_body, generate_function_bodyt driver_program_generate_function_body, message_handlert &message_handler)
Construct a lazy GOTO model, supplying callbacks that customise its behaviour.