Go to the documentation of this file.
36 const std::string &java_class_name,
37 const std::string &class_path,
38 const std::string &
main)
48 const std::string &java_class_name,
49 const std::string &class_path,
50 const std::string &
main)
58 const std::string &java_class_name,
59 const std::string &class_path,
60 const std::string &
main,
61 std::unique_ptr<languaget> &&java_lang,
88 const std::string &java_class_name,
89 const std::string &class_path,
90 const std::string &
main,
91 std::unique_ptr<languaget> &&java_lang,
97 std::string filename=java_class_name +
".class";
103 [](
const irep_idt &) {
return false; },
120 std::istringstream java_code_stream(
"ignored");
128 language.
parse(java_code_stream, filename);
129 language.
typecheck(lazy_goto_model.symbol_table,
"");
131 language.
final(lazy_goto_model.symbol_table);
133 lazy_goto_model.load_all_functions();
135 std::unique_ptr<goto_modelt> maybe_goto_model=
137 std::move(lazy_goto_model));
138 INVARIANT(maybe_goto_model,
"Freezing lazy_goto_model failed");
141 const std::string class_symbol_name=
"java::"+java_class_name;
146 const typet &class_type=class_symbol.
type;
147 REQUIRE(class_type.
id()==ID_struct);
153 INFO(
"Working directory: " << path);
159 return std::move(*maybe_goto_model);
166 const std::string &java_class_name,
167 const std::string &class_path,
168 const std::string &
main,
169 std::unique_ptr<languaget> &&java_lang)
172 command_line.
add_flag(
"no-lazy-methods");
174 java_class_name, class_path,
main, std::move(java_lang), command_line);
178 const std::string &java_class_name,
179 const std::string &class_path,
180 const std::vector<std::string> &command_line_flags,
181 const std::unordered_map<std::string, std::string> &command_line_options,
182 const std::string &
main)
185 for(
const auto &flag : command_line_flags)
187 for(
const auto &option : command_line_options)
188 command_line.
add_option(option.first, option.second);
193 java_class_name, class_path,
main, std::move(lang), command_line);
200 const std::string &java_class_name,
201 const std::string &class_path,
202 const std::string &
main)
205 java_class_name, class_path, {
"no-lazy-methods"}, {},
main);
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.
void parse_java_language_options(const cmdlinet &cmd, optionst &options)
Parse options that are java bytecode specific.
The type of an expression, extends irept.
symbol_tablet load_java_class(const std::string &java_class_name, const std::string &class_path, const std::string &main)
Returns the symbol table from load_goto_model_from_java_class(const std::string &java_class_name,...
typet type
Type of symbol.
static std::unique_ptr< goto_modelt > process_whole_model_and_freeze(lazy_goto_modelt &&model)
The model returned here has access to the functions we've already loaded but is frozen in the sense t...
std::unique_ptr< languaget > new_java_bytecode_language()
goto_modelt load_goto_model_from_java_class(const std::string &java_class_name, const std::string &class_path, const std::string &main, std::unique_ptr< languaget > &&java_lang, const cmdlinet &command_line)
Go through the process of loading, type-checking and finalising a specific class file to build a goto...
optionalt< std::string > main
virtual bool final(symbol_table_baset &symbol_table)
Final adjustments, e.g.
bool has_suffix(const std::string &s, const std::string &suffix)
virtual void set_language_options(const optionst &)
Set language-specific options.
virtual bool generate_support_functions(symbol_tablet &symbol_table)=0
Create language-specific support functions, such as __CPROVER_start, __CPROVER_initialize and languag...
A GOTO model that produces function bodies on demand.
#define PRECONDITION(CONDITION)
The symbol table base class interface.
virtual bool parse(std::istream &instream, const std::string &path)=0
virtual void set_message_handler(message_handlert &_message_handler)
const irep_idt & id() const
A goto function, consisting of function body (see body) and parameter identifiers (see parameter_iden...
std::unique_ptr< languaget > language
int main(int argc, char *argv[])
symbol_tablet load_java_class_lazy(const std::string &java_class_name, const std::string &class_path, const std::string &main)
Go through the process of loading, type-checking and finalising loading a specific class file to buil...
const symbol_tablet & get_symbol_table() const override
Accessor to get the symbol table.
struct configt::javat java
virtual bool typecheck(symbol_tablet &symbol_table, const std::string &module)=0
const symbolt * lookup(const irep_idt &name) const
Find a symbol in the symbol table for read-only access.
std::string get_current_working_directory()
Abstract interface to eager or lazy GOTO models.
const java_class_typet & to_java_class_type(const typet &type)
null_message_handlert null_message_handler
symbol_tablet symbol_table
Symbol table.
Interface providing access to a single function in a GOTO model, plus its associated symbol table.