CBMC
java_bytecode_language.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_LANGUAGE_H
11 #define CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_LANGUAGE_H
12 
13 #include "ci_lazy_methods.h"
14 #include "ci_lazy_methods_needed.h"
15 #include "java_class_loader.h"
19 #include "select_pointer_type.h"
20 #include "synthetic_methods_map.h"
21 
22 #include <memory>
23 
24 #include <util/json.h>
25 #include <util/make_unique.h>
26 #include <util/prefix_filter.h>
27 
28 #include <langapi/language.h>
29 
30 // clang-format off
31 #define JAVA_BYTECODE_LANGUAGE_OPTIONS /*NOLINT*/ \
32  "(disable-uncaught-exception-check)" \
33  "(throw-assertion-error)" \
34  "(assert-no-exceptions-thrown)" \
35  "(java-assume-inputs-non-null)" \
36  "(java-assume-inputs-interval):" \
37  "(java-assume-inputs-integral)" \
38  "(throw-runtime-exceptions)" \
39  "(max-nondet-array-length):" \
40  "(max-nondet-tree-depth):" \
41  "(java-max-vla-length):" \
42  "(java-cp-include-files):" \
43  "(ignore-manifest-main-class)" \
44  "(context-include):" \
45  "(context-exclude):" \
46  "(no-lazy-methods)" \
47  "(lazy-methods-extra-entry-point):" \
48  "(java-load-class):" \
49  "(java-no-load-class):" \
50  "(static-values):" \
51  "(java-lift-clinit-calls)"
52 
53 #define JAVA_BYTECODE_LANGUAGE_OPTIONS_HELP /*NOLINT*/ \
54  " --disable-uncaught-exception-check\n" \
55  " ignore uncaught exceptions and errors\n" \
56  " --throw-assertion-error throw java.lang.AssertionError on violated\n" \
57  " assert statements instead of failing\n" \
58  " at the location of the assert statement\n" \
59  " --throw-runtime-exceptions make implicit runtime exceptions explicit\n" \
60  " --assert-no-exceptions-thrown\n"\
61  " transform `throw` instructions into `assert FALSE`\n"/* NOLINT(*) */ \
62  " followed by `assume FALSE`.\n" \
63  " --max-nondet-array-length N limit nondet (e.g. input) array size to <= N\n" /* NOLINT(*) */ \
64  " --max-nondet-tree-depth N limit size of nondet (e.g. input) object tree;\n" /* NOLINT(*) */ \
65  " at level N references are set to null\n" /* NOLINT(*) */ \
66  " --java-assume-inputs-non-null\n" \
67  " never initialize reference-typed parameter to the\n" /* NOLINT(*) */ \
68  " entry point with null\n" /* NOLINT(*) */ \
69  " --java-assume-inputs-interval [L:U] or [L:] or [:U]\n" \
70  " force numerical primitive-typed inputs\n" /* NOLINT(*) */ \
71  " (byte, short, int, long, float, double) to be\n" /* NOLINT(*) */ \
72  " initialized within the given range; lower bound\n" /* NOLINT(*) */ \
73  " L and upper bound U must be integers;\n" /* NOLINT(*) */ \
74  " does not work for arrays;\n" /* NOLINT(*) */ \
75  " --java-assume-inputs-integral\n" \
76  " force float and double inputs to have integer values;\n" /* NOLINT(*) */ \
77  " does not work for arrays;\n" /* NOLINT(*) */ \
78  " --java-max-vla-length N limit the length of user-code-created arrays\n" /* NOLINT(*) */ \
79  " --java-cp-include-files r regexp or JSON list of files to load\n" \
80  " (with '@' prefix)\n" \
81  " --java-load-class CLASS also load code from class CLASS\n" \
82  " --java-no-load-class CLASS never load code from class CLASS\n" \
83  " --ignore-manifest-main-class ignore Main-Class entries in JAR manifest files.\n" /* NOLINT(*) */ \
84  " If this option is specified and the options\n" /* NOLINT(*) */ \
85  " --function and --main-class are not, we can be\n" /* NOLINT(*) */ \
86  " certain that all classes in the JAR file are\n" /* NOLINT(*) */ \
87  " loaded.\n" \
88  " --context-include i only analyze code matching specification i that\n" /* NOLINT(*) */ \
89  " --context-exclude e does not match specification e.\n" \
90  " All other methods are excluded, i.e. we load their\n" /* NOLINT(*) */ \
91  " signatures and meta-information, but not their\n" /* NOLINT(*) */ \
92  " bodies.\n" \
93  " A specification is any prefix of a package, class\n" /* NOLINT(*) */ \
94  " or method name, e.g. \"org.cprover.\" or\n" /* NOLINT(*) */ \
95  " \"org.cprover.MyClass.\" or\n" \
96  " \"org.cprover.MyClass.methodToStub:(I)Z\".\n" \
97  " These options can be given multiple times.\n" \
98  " The default for context-include is 'all\n" \
99  " included'; default for context-exclude is\n" \
100  " 'nothing excluded'.\n" \
101  " --no-lazy-methods load and translate all methods given on\n" \
102  " the command line and in --classpath\n" \
103  " Default is to load methods that appear to be\n" /* NOLINT(*) */ \
104  " reachable from the --function entry point\n" \
105  " or main class\n" \
106  " Note that --show-symbol-table, --show-goto-functions\n" /* NOLINT(*) */ \
107  " and --show-properties output are restricted to\n" /* NOLINT(*) */ \
108  " loaded methods by default.\n" \
109  " --lazy-methods-extra-entry-point METHODNAME\n" \
110  " treat METHODNAME as a possible program entry\n" /* NOLINT(*) */ \
111  " point for the purpose of lazy method loading\n" /* NOLINT(*) */ \
112  " METHODNAME can be a regex that will be matched\n" /* NOLINT(*) */ \
113  " against all symbols. If missing a java:: prefix\n" /* NOLINT(*) */ \
114  " will be added. If no descriptor is found, all\n"/* NOLINT(*) */ \
115  " overloads of a method will also be added.\n" \
116  " --static-values f Load initial values of static fields from the given\n"/* NOLINT(*) */ \
117  " JSON file. We assign static fields to these values\n"/* NOLINT(*) */ \
118  " instead of calling the normal static initializer\n"/* NOLINT(*) */ \
119  " (clinit) method.\n" \
120  " The argument can be a relative or absolute path to\n"/* NOLINT(*) */ \
121  " the file.\n" \
122  " --java-lift-clinit-calls Lifts clinit calls in function bodies to the top of the\n" /* NOLINT(*) */ \
123  " function. This may reduce the overall cost of static\n" /* NOLINT(*) */ \
124  " initialisation, but may be unsound if there are\n" /* NOLINT(*) */ \
125  " cyclic dependencies between static initializers due\n" /* NOLINT(*) */ \
126  " to potentially changing their order of execution,\n" /* NOLINT(*) */ \
127  " or if static initializers have side-effects such as\n" /* NOLINT(*) */ \
128  " updating another class' static field.\n" /* NOLINT(*) */
129 
130 #ifdef _WIN32
131  #define JAVA_CLASSPATH_SEPARATOR ";"
132 #else
133  #define JAVA_CLASSPATH_SEPARATOR ":"
134 #endif
135 
136 #define HELP_JAVA_CLASSPATH /* NOLINT(*) */ \
137  " -classpath dirs/jars\n" \
138  " -cp dirs/jars\n" \
139  " --classpath dirs/jars set class search path of directories and\n" \
140  " jar files\n" \
141  " A " JAVA_CLASSPATH_SEPARATOR \
142  " separated list of directories and JAR\n" \
143  " archives to search for class files.\n" \
144  " --main-class class-name set the name of the main class\n"
145 
146 #define HELP_JAVA_METHOD_NAME /* NOLINT(*) */ \
147  " method-name fully qualified name of method\n" \
148  " used as entry point, e.g.\n" \
149  " mypackage.Myclass.foo:(I)Z\n"
150 
151 #define HELP_JAVA_CLASS_NAME /* NOLINT(*) */ \
152  " class-name name of class\n" \
153  " The entry point is the method specified by\n" \
154  " --function, or otherwise, the\n" \
155  " public static void main(String[])\n" \
156  " method of the given class.\n"
157 
158 #define OPT_JAVA_JAR /* NOLINT(*) */ \
159  "(jar):"
160 
161 #define HELP_JAVA_JAR /* NOLINT(*) */ \
162  " -jar jarfile JAR file to be checked\n" \
163  " The entry point is the method specified by\n" \
164  " --function or otherwise, the\n" \
165  " public static void main(String[]) method\n" \
166  " of the class specified by --main-class or the main\n" /* NOLINT(*) */ \
167  " class specified in the JAR manifest\n" \
168  " (checked in this order).\n"
169 
170 #define OPT_JAVA_GOTO_BINARY /* NOLINT(*) */ \
171  "(gb):"
172 
173 #define HELP_JAVA_GOTO_BINARY /* NOLINT(*) */ \
174  " --gb goto-binary goto-binary file to be checked\n" \
175  " The entry point is the method specified by\n" \
176  " --function, or otherwise, the\n" \
177  " public static void main(String[])\n" \
178  " of the class specified by --main-class\n" \
179  " (checked in this order).\n"
180 // clang-format on
181 
182 class symbolt;
183 
185 {
189 };
190 
202 {
203 public:
205 
206  std::unordered_multimap<irep_idt, symbolt> &
207  get(const symbol_tablet &symbol_table);
208 
209  void reinitialize();
210 
211 private:
212  bool initialized = false;
213  std::unordered_multimap<irep_idt, symbolt> map;
214 };
215 
217 {
218  java_bytecode_language_optionst(const optionst &options, messaget &log);
219 
221 
227  bool throw_assertion_error = false;
228  bool threading_support = false;
229  bool nondet_static = false;
231 
235 
240 
242  std::vector<irep_idt> java_load_classes;
248 
250  std::unordered_set<std::string> no_load_classes;
251 
252  std::vector<load_extra_methodst> extra_methods;
253 
262 
267 
270 };
271 
272 #define JAVA_CLASS_MODEL_SUFFIX "@class_model"
273 
275 {
276 public:
277  void set_language_options(const optionst &) override;
278 
280 
281  virtual bool preprocess(
282  std::istream &instream,
283  const std::string &path,
284  std::ostream &outstream) override;
285 
286  // This is an extension to languaget
287  // required because parsing of Java programs can be initiated without
288  // opening a file first or providing a path to a file
289  // as dictated by \ref languaget.
290  virtual bool parse();
291 
292  bool parse(
293  std::istream &instream,
294  const std::string &path) override;
295 
297  symbol_tablet &symbol_table) override;
298 
299  bool typecheck(
300  symbol_tablet &context,
301  const std::string &module) override;
302 
303  virtual bool final(symbol_table_baset &context) override;
304 
305  void show_parse(std::ostream &out) override;
306 
307  virtual ~java_bytecode_languaget();
309  std::unique_ptr<select_pointer_typet> pointer_type_selector)
312  {
313  }
314 
317  std::unique_ptr<select_pointer_typet>(new select_pointer_typet()))
318  {
319  }
320 
321  bool from_expr(
322  const exprt &expr,
323  std::string &code,
324  const namespacet &ns) override;
325 
326  bool from_type(
327  const typet &type,
328  std::string &code,
329  const namespacet &ns) override;
330 
331  bool to_expr(
332  const std::string &code,
333  const std::string &module,
334  exprt &expr,
335  const namespacet &ns) override;
336 
337  std::unique_ptr<languaget> new_language() override
338  { return util_make_unique<java_bytecode_languaget>(); }
339 
340  std::string id() const override { return "java"; }
341  std::string description() const override { return "Java Bytecode"; }
342  std::set<std::string> extensions() const override;
343 
344  void modules_provided(std::set<std::string> &modules) override;
345  virtual void
346  methods_provided(std::unordered_set<irep_idt> &methods) const override;
347  virtual void convert_lazy_method(
348  const irep_idt &function_id,
349  symbol_table_baset &symbol_table) override;
350 
351 protected:
353  const irep_idt &function_id,
354  symbol_table_baset &symbol_table,
356  {
358  function_id,
359  symbol_table,
362  }
364  const irep_idt &function_id,
365  symbol_table_baset &symbol_table,
366  optionalt<ci_lazy_methods_neededt> needed_lazy_methods,
369  const irep_idt &function_id,
370  symbol_table_baset &symbol_table,
371  optionalt<ci_lazy_methods_neededt> needed_lazy_methods,
373 
376 
379  std::vector<irep_idt> main_jar_classes;
384 
385 private:
386  virtual std::vector<load_extra_methodst>
387  build_extra_entry_points(const optionst &) const;
388  const std::unique_ptr<const select_pointer_typet> pointer_type_selector;
389 
396 
401  std::unordered_map<std::string, object_creation_referencet> references;
402 
403  void parse_from_main_class();
405 };
406 
407 std::unique_ptr<languaget> new_java_bytecode_language();
408 
409 void parse_java_language_options(const cmdlinet &cmd, optionst &options);
410 
411 prefix_filtert get_context(const optionst &options);
412 
413 #endif // CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_LANGUAGE_H
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:154
java_static_initializers.h
method_bytecodet
Definition: ci_lazy_methods.h:32
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
java_bytecode_languaget::method_bytecode
method_bytecodet method_bytecode
Definition: java_bytecode_language.h:382
java_bytecode_languaget::convert_single_method_code
bool convert_single_method_code(const irep_idt &function_id, symbol_table_baset &symbol_table, optionalt< ci_lazy_methods_neededt > needed_lazy_methods, lazy_class_to_declared_symbols_mapt &class_to_declared_symbols)
Convert a method (one whose type is known but whose body hasn't been converted) but don't run typeche...
Definition: java_bytecode_language.cpp:1336
java_bytecode_languaget::extensions
std::set< std::string > extensions() const override
Definition: java_bytecode_language.cpp:273
lazy_class_to_declared_symbols_mapt::reinitialize
void reinitialize()
Definition: java_bytecode_language.cpp:138
symbol_tablet
The symbol table.
Definition: symbol_table.h:13
LAZY_METHODS_MODE_EAGER
@ LAZY_METHODS_MODE_EAGER
Definition: java_bytecode_language.h:186
prefix_filter.h
java_bytecode_language_optionst::method_context
optionalt< prefix_filtert > method_context
If set, method bodies are only elaborated if they pass the filter.
Definition: java_bytecode_language.h:261
class_hierarchyt
Non-graph-based representation of the class hierarchy.
Definition: class_hierarchy.h:42
select_pointer_type.h
java_bytecode_languaget::pointer_type_selector
const std::unique_ptr< const select_pointer_typet > pointer_type_selector
Definition: java_bytecode_language.h:388
prefix_filtert
Provides filtering of strings vai inclusion/exclusion lists of prefixes.
Definition: prefix_filter.h:19
java_bytecode_language_optionst::should_lift_clinit_calls
bool should_lift_clinit_calls
Should we lift clinit calls in function bodies to the top? For example, turning if(x) A....
Definition: java_bytecode_language.h:266
optionst
Definition: options.h:22
java_bytecode_languaget::synthetic_methods
synthetic_methods_mapt synthetic_methods
Maps synthetic method names on to the particular type of synthetic method (static initializer,...
Definition: java_bytecode_language.h:393
java_bytecode_languaget::to_expr
bool to_expr(const std::string &code, const std::string &module, exprt &expr, const namespacet &ns) override
Parses the given string into an expression.
Definition: java_bytecode_language.cpp:1547
typet
The type of an expression, extends irept.
Definition: type.h:28
java_bytecode_language_optionst::java_bytecode_language_optionst
java_bytecode_language_optionst()=default
lazy_class_to_declared_symbols_mapt::initialized
bool initialized
Definition: java_bytecode_language.h:212
java_bytecode_languaget::methods_provided
virtual void methods_provided(std::unordered_set< irep_idt > &methods) const override
Provide feedback to language_filest so that when asked for a lazy method, it can delegate to this ins...
Definition: java_bytecode_language.cpp:1162
java_bytecode_languaget::language_options
optionalt< java_bytecode_language_optionst > language_options
Definition: java_bytecode_language.h:377
parse_java_language_options
void parse_java_language_options(const cmdlinet &cmd, optionst &options)
Parse options that are java bytecode specific.
Definition: java_bytecode_language.cpp:55
java_bytecode_languaget::main_class
irep_idt main_class
Definition: java_bytecode_language.h:378
exprt
Base class for all expressions.
Definition: expr.h:55
java_string_library_preprocess.h
java_bytecode_languaget::references
std::unordered_map< std::string, object_creation_referencet > references
Map used in all calls to functions that deterministically create objects (currently only assign_from_...
Definition: java_bytecode_language.h:401
java_object_factory_parameters.h
java_bytecode_languaget::from_type
bool from_type(const typet &type, std::string &code, const namespacet &ns) override
Formats the given type in a language-specific way.
Definition: java_bytecode_language.cpp:1538
java_bytecode_languaget::java_bytecode_languaget
java_bytecode_languaget()
Definition: java_bytecode_language.h:315
synthetic_methods_mapt
std::unordered_map< irep_idt, synthetic_method_typet > synthetic_methods_mapt
Maps method names on to a synthetic method kind.
Definition: synthetic_methods_map.h:57
stub_global_initializer_factoryt
Definition: java_static_initializers.h:97
class_to_declared_symbols
std::unordered_multimap< irep_idt, symbolt > class_to_declared_symbols(const symbol_tablet &symbol_table)
Definition: java_static_initializers.cpp:783
java_bytecode_languaget::stub_global_initializer_factory
stub_global_initializer_factoryt stub_global_initializer_factory
Definition: java_bytecode_language.h:394
java_bytecode_language_optionst::lazy_methods_mode
lazy_methods_modet lazy_methods_mode
Definition: java_bytecode_language.h:238
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
java_bytecode_languaget::set_language_options
void set_language_options(const optionst &) override
Consume options that are java bytecode specific.
Definition: java_bytecode_language.cpp:262
cmdlinet
Definition: cmdline.h:20
java_bytecode_languaget::build_extra_entry_points
virtual std::vector< load_extra_methodst > build_extra_entry_points(const optionst &) const
This method should be overloaded to provide alternative approaches for specifying extra entry points.
Definition: java_bytecode_language.cpp:1608
make_unique.h
java_bytecode_languaget::main_jar_classes
std::vector< irep_idt > main_jar_classes
Definition: java_bytecode_language.h:379
java_bytecode_languaget::~java_bytecode_languaget
virtual ~java_bytecode_languaget()
Definition: java_bytecode_language.cpp:1600
java_bytecode_languaget::java_class_loader
java_class_loadert java_class_loader
Definition: java_bytecode_language.h:380
java_bytecode_language_optionst::ignore_manifest_main_class
bool ignore_manifest_main_class
Definition: java_bytecode_language.h:230
symbol_table_baset
The symbol table base class interface.
Definition: symbol_table_base.h:21
java_bytecode_languaget::do_ci_lazy_method_conversion
bool do_ci_lazy_method_conversion(symbol_tablet &)
Uses a simple context-insensitive ('ci') analysis to determine which methods may be reachable from th...
Definition: java_bytecode_language.cpp:1117
ci_lazy_methods_needed.h
java_bytecode_languaget::show_parse
void show_parse(std::ostream &out) override
Definition: java_bytecode_language.cpp:1506
java_class_loader.h
java_bytecode_language_optionst::java_load_classes
std::vector< irep_idt > java_load_classes
list of classes to force load even without reference from the entry point
Definition: java_bytecode_language.h:242
java_bytecode_languaget::generate_support_functions
bool generate_support_functions(symbol_tablet &symbol_table) override
Create language-specific support functions, such as __CPROVER_start, __CPROVER_initialize and languag...
Definition: java_bytecode_language.cpp:1057
java_bytecode_languaget::new_language
std::unique_ptr< languaget > new_language() override
Definition: java_bytecode_language.h:337
java_bytecode_languaget::initialize_class_loader
void initialize_class_loader()
Definition: java_bytecode_language.cpp:299
select_pointer_typet
Definition: select_pointer_type.h:22
language.h
java_bytecode_languaget::convert_lazy_method
virtual void convert_lazy_method(const irep_idt &function_id, symbol_table_baset &symbol_table) override
Promote a lazy-converted method (one whose type is known but whose body hasn't been converted) into a...
Definition: java_bytecode_language.cpp:1186
java_bytecode_languaget::parse
virtual bool parse()
We set the main class (i.e. class to start the class loading analysis, see java_class_loadert) when w...
Definition: java_bytecode_language.cpp:369
message_handlert
Definition: message.h:27
java_bytecode_language_optionst::java_cp_include_files
std::string java_cp_include_files
Definition: java_bytecode_language.h:243
java_bytecode_languaget::modules_provided
void modules_provided(std::set< std::string > &modules) override
Definition: java_bytecode_language.cpp:278
java_bytecode_languaget::string_preprocess
java_string_library_preprocesst string_preprocess
Definition: java_bytecode_language.h:383
java_bytecode_language_optionst::assert_no_exceptions_thrown
bool assert_no_exceptions_thrown
Transform athrow bytecode instructions into assert FALSE followed by assume FALSE.
Definition: java_bytecode_language.h:234
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
ci_lazy_methods.h
lazy_class_to_declared_symbols_mapt::get
std::unordered_multimap< irep_idt, symbolt > & get(const symbol_tablet &symbol_table)
Definition: java_bytecode_language.cpp:128
java_bytecode_language_optionst::assume_inputs_non_null
bool assume_inputs_non_null
assume inputs variables to be non-null
Definition: java_bytecode_language.h:223
java_class_loadert
Class responsible to load .class files.
Definition: java_class_loader.h:25
get_context
prefix_filtert get_context(const optionst &options)
Definition: java_bytecode_language.cpp:116
java_bytecode_languaget::from_expr
bool from_expr(const exprt &expr, std::string &code, const namespacet &ns) override
Formats the given expression in a language-specific way.
Definition: java_bytecode_language.cpp:1529
java_bytecode_languaget::class_hierarchy
class_hierarchyt class_hierarchy
Definition: java_bytecode_language.h:395
java_bytecode_languaget::get_pointer_type_selector
const select_pointer_typet & get_pointer_type_selector() const
Definition: java_bytecode_language.cpp:1151
messaget::message_handler
message_handlert * message_handler
Definition: message.h:439
java_bytecode_languaget::typecheck
bool typecheck(symbol_tablet &context, const std::string &module) override
Definition: java_bytecode_language.cpp:808
lazy_class_to_declared_symbols_mapt::lazy_class_to_declared_symbols_mapt
lazy_class_to_declared_symbols_mapt()=default
java_bytecode_language_optionst::static_values_json
optionalt< json_objectt > static_values_json
JSON which contains initial values of static fields (right after the static initializer of the class ...
Definition: java_bytecode_language.h:247
java_bytecode_languaget::set_message_handler
void set_message_handler(message_handlert &message_handler) override
Definition: java_bytecode_language.cpp:293
lazy_methods_modet
lazy_methods_modet
Definition: java_bytecode_language.h:184
symbolt
Symbol table entry.
Definition: symbol.h:27
java_bytecode_languaget::id
std::string id() const override
Definition: java_bytecode_language.h:340
java_bytecode_language_optionst::throw_runtime_exceptions
bool throw_runtime_exceptions
Definition: java_bytecode_language.h:225
java_string_library_preprocesst
Definition: java_string_library_preprocess.h:36
java_bytecode_language_optionst::extra_methods
std::vector< load_extra_methodst > extra_methods
Definition: java_bytecode_language.h:252
java_bytecode_language_optionst::assert_uncaught_exceptions
bool assert_uncaught_exceptions
Definition: java_bytecode_language.h:226
java_bytecode_language_optionst::throw_assertion_error
bool throw_assertion_error
Definition: java_bytecode_language.h:227
json.h
languaget
Definition: language.h:37
LAZY_METHODS_MODE_CONTEXT_INSENSITIVE
@ LAZY_METHODS_MODE_CONTEXT_INSENSITIVE
Definition: java_bytecode_language.h:187
java_bytecode_languaget::object_factory_parameters
java_object_factory_parameterst object_factory_parameters
Definition: java_bytecode_language.h:381
lazy_class_to_declared_symbols_mapt
Map classes to the symbols they declare but is only computed once it is needed and the map is then ke...
Definition: java_bytecode_language.h:201
java_bytecode_language_optionst::threading_support
bool threading_support
Definition: java_bytecode_language.h:228
java_bytecode_languaget::parse_from_main_class
void parse_from_main_class()
Definition: java_bytecode_language.cpp:327
java_bytecode_language_optionst::no_load_classes
std::unordered_set< std::string > no_load_classes
List of classes to never load.
Definition: java_bytecode_language.h:250
java_bytecode_languaget::convert_single_method
void convert_single_method(const irep_idt &function_id, symbol_table_baset &symbol_table, lazy_class_to_declared_symbols_mapt &class_to_declared_symbols)
Definition: java_bytecode_language.h:352
java_bytecode_languaget::java_bytecode_languaget
java_bytecode_languaget(std::unique_ptr< select_pointer_typet > pointer_type_selector)
Definition: java_bytecode_language.h:308
new_java_bytecode_language
std::unique_ptr< languaget > new_java_bytecode_language()
Definition: java_bytecode_language.cpp:1524
java_bytecode_language_optionst::string_refinement_enabled
bool string_refinement_enabled
Definition: java_bytecode_language.h:224
java_bytecode_languaget
Definition: java_bytecode_language.h:274
java_bytecode_language_optionst::main_jar
optionalt< std::string > main_jar
If set then a JAR file has been given via the -jar option.
Definition: java_bytecode_language.h:269
LAZY_METHODS_MODE_EXTERNAL_DRIVER
@ LAZY_METHODS_MODE_EXTERNAL_DRIVER
Definition: java_bytecode_language.h:188
java_bytecode_languaget::preprocess
virtual bool preprocess(std::istream &instream, const std::string &path, std::ostream &outstream) override
ANSI-C preprocessing.
Definition: java_bytecode_language.cpp:284
java_bytecode_language_optionst
Definition: java_bytecode_language.h:216
java_object_factory_parameterst
Definition: java_object_factory_parameters.h:15
synthetic_methods_map.h
lazy_class_to_declared_symbols_mapt::map
std::unordered_multimap< irep_idt, symbolt > map
Definition: java_bytecode_language.h:213
java_bytecode_language_optionst::max_user_array_length
size_t max_user_array_length
max size for user code created arrays
Definition: java_bytecode_language.h:237
java_bytecode_language_optionst::nondet_static
bool nondet_static
Definition: java_bytecode_language.h:229
java_bytecode_languaget::description
std::string description() const override
Definition: java_bytecode_language.h:341