|
cprover
|
#include <ci_lazy_methods_needed.h>
Public Member Functions | |
| ci_lazy_methods_neededt (std::unordered_set< irep_idt > &_callable_methods, std::unordered_set< irep_idt > &_instantiated_classes, const symbol_table_baset &_symbol_table, const select_pointer_typet &pointer_type_selector) | |
| void | add_needed_method (const irep_idt &) |
| Notes method_symbol_name is referenced from some reachable function, and should therefore be elaborated. | |
| bool | add_needed_class (const irep_idt &) |
| Notes class class_symbol_name will be instantiated, or a static field belonging to it will be accessed. | |
| void | add_all_needed_classes (const pointer_typet &pointer_type) |
| Add to the needed classes all classes specified, the replacement type if it will be replaced, and all fields it contains. | |
Private Member Functions | |
| void | add_clinit_call (const irep_idt &class_id) |
| For a given class id, note that its static initializer is needed. | |
| void | add_cprover_nondet_initialize_if_it_exists (const irep_idt &class_id) |
| For a given class id, if cproverNondetInitialize exists on it or any of its ancestors then note that it is needed. | |
| void | initialize_instantiated_classes_from_pointer (const pointer_typet &pointer_type, const namespacet &ns) |
| Build up list of methods for types for a specific pointer type. | |
| void | gather_field_types (const struct_tag_typet &class_type, const namespacet &ns) |
| For a given type, gather all fields referenced by that type. | |
Private Attributes | |
| std::unordered_set< irep_idt > & | callable_methods |
| std::unordered_set< irep_idt > & | instantiated_classes |
| const symbol_table_baset & | symbol_table |
| const select_pointer_typet & | pointer_type_selector |
Definition at line 25 of file ci_lazy_methods_needed.h.
|
inline |
Definition at line 28 of file ci_lazy_methods_needed.h.
| void ci_lazy_methods_neededt::add_all_needed_classes | ( | const pointer_typet & | pointer_type | ) |
Add to the needed classes all classes specified, the replacement type if it will be replaced, and all fields it contains.
| pointer_type | The type to add |
Definition at line 94 of file ci_lazy_methods_needed.cpp.
|
private |
For a given class id, note that its static initializer is needed.
This applies the same logic to the given class that java_bytecode_convert_methodt::get_clinit_call applies e.g. to classes whose constructor we call in a method body. This duplication is unavoidable because ci_lazy_methods essentially has to go through the same logic as __CPROVER_start in its initial setup, and because return values of opaque methods need to be considered in ci_lazy_methods too.
| class_id | The given class id |
Definition at line 42 of file ci_lazy_methods_needed.cpp.
|
private |
For a given class id, if cproverNondetInitialize exists on it or any of its ancestors then note that it is needed.
| class_id | The given class id |
Definition at line 52 of file ci_lazy_methods_needed.cpp.
| bool ci_lazy_methods_neededt::add_needed_class | ( | const irep_idt & | class_symbol_name | ) |
Notes class class_symbol_name will be instantiated, or a static field belonging to it will be accessed.
Also notes that its static initializer is therefore reachable.
| class_symbol_name | class name; must exist in symbol table. |
Definition at line 72 of file ci_lazy_methods_needed.cpp.
| void ci_lazy_methods_neededt::add_needed_method | ( | const irep_idt & | method_symbol_name | ) |
Notes method_symbol_name is referenced from some reachable function, and should therefore be elaborated.
| method_symbol_name | method name; must exist in symbol table. |
Definition at line 28 of file ci_lazy_methods_needed.cpp.
|
private |
For a given type, gather all fields referenced by that type.
| class_type | root of class tree to search |
| ns | global namespaces. |
Definition at line 147 of file ci_lazy_methods_needed.cpp.
|
private |
Build up list of methods for types for a specific pointer type.
See add_all_needed_classes for more details.
| pointer_type | The type to gather methods for. |
| ns | global namespace |
Definition at line 116 of file ci_lazy_methods_needed.cpp.
|
private |
Definition at line 51 of file ci_lazy_methods_needed.h.
|
private |
Definition at line 55 of file ci_lazy_methods_needed.h.
|
private |
Definition at line 58 of file ci_lazy_methods_needed.h.
|
private |
Definition at line 56 of file ci_lazy_methods_needed.h.