cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
ci_lazy_methods_needed.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Context-insensitive lazy methods container
4
5
Author: Chris Smowton, chris.smowton@diffblue.com
6
7
\*******************************************************************/
8
11
12
#ifndef CPROVER_JAVA_BYTECODE_CI_LAZY_METHODS_H
13
#define CPROVER_JAVA_BYTECODE_CI_LAZY_METHODS_H
14
15
#include <unordered_set>
16
17
#include <
util/irep.h
>
18
19
class
namespacet
;
20
class
pointer_typet
;
21
class
select_pointer_typet
;
22
class
symbol_table_baset
;
23
class
struct_tag_typet
;
24
25
class
ci_lazy_methods_neededt
26
{
27
public
:
28
ci_lazy_methods_neededt
(
29
std::unordered_set<irep_idt> &_callable_methods,
30
std::unordered_set<irep_idt> &_instantiated_classes,
31
const
symbol_table_baset
&_symbol_table,
32
const
select_pointer_typet
&
pointer_type_selector
)
33
:
callable_methods
(_callable_methods),
34
instantiated_classes
(_instantiated_classes),
35
symbol_table
(_symbol_table),
36
pointer_type_selector
(
pointer_type_selector
)
37
{}
38
39
void
add_needed_method
(
const
irep_idt
&);
40
// Returns true if new
41
bool
add_needed_class
(
const
irep_idt
&);
42
43
void
add_all_needed_classes
(
const
pointer_typet
&
pointer_type
);
44
45
private
:
46
// callable_methods is a vector because it's used as a work-list
47
// which is periodically cleared. It can't be relied upon to
48
// contain all methods that have previously been elaborated.
49
// It should be changed to a set if we develop the need to use
50
// it that way.
51
std::unordered_set<irep_idt> &
callable_methods
;
52
// instantiated_classes on the other hand is a true set of every class
53
// found so far, so we can use a membership test to avoid
54
// repeatedly exploring a class hierarchy.
55
std::unordered_set<irep_idt> &
instantiated_classes
;
56
const
symbol_table_baset
&
symbol_table
;
57
58
const
select_pointer_typet
&
pointer_type_selector
;
59
60
void
add_clinit_call
(
const
irep_idt
&class_id);
61
void
add_cprover_nondet_initialize_if_it_exists
(
const
irep_idt
&class_id);
62
63
void
initialize_instantiated_classes_from_pointer
(
64
const
pointer_typet
&
pointer_type
,
65
const
namespacet
&ns);
66
67
void
68
gather_field_types
(
const
struct_tag_typet
&class_type,
const
namespacet
&ns);
69
};
70
71
#endif
pointer_type
pointer_typet pointer_type(const typet &subtype)
Definition
c_types.cpp:235
ci_lazy_methods_neededt::instantiated_classes
std::unordered_set< irep_idt > & instantiated_classes
Definition
ci_lazy_methods_needed.h:55
ci_lazy_methods_neededt::initialize_instantiated_classes_from_pointer
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.
Definition
ci_lazy_methods_needed.cpp:116
ci_lazy_methods_neededt::pointer_type_selector
const select_pointer_typet & pointer_type_selector
Definition
ci_lazy_methods_needed.h:58
ci_lazy_methods_neededt::gather_field_types
void gather_field_types(const struct_tag_typet &class_type, const namespacet &ns)
For a given type, gather all fields referenced by that type.
Definition
ci_lazy_methods_needed.cpp:147
ci_lazy_methods_neededt::add_needed_method
void add_needed_method(const irep_idt &)
Notes method_symbol_name is referenced from some reachable function, and should therefore be elaborat...
Definition
ci_lazy_methods_needed.cpp:28
ci_lazy_methods_neededt::ci_lazy_methods_neededt
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)
Definition
ci_lazy_methods_needed.h:28
ci_lazy_methods_neededt::add_all_needed_classes
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,...
Definition
ci_lazy_methods_needed.cpp:94
ci_lazy_methods_neededt::callable_methods
std::unordered_set< irep_idt > & callable_methods
Definition
ci_lazy_methods_needed.h:51
ci_lazy_methods_neededt::symbol_table
const symbol_table_baset & symbol_table
Definition
ci_lazy_methods_needed.h:56
ci_lazy_methods_neededt::add_needed_class
bool add_needed_class(const irep_idt &)
Notes class class_symbol_name will be instantiated, or a static field belonging to it will be accesse...
Definition
ci_lazy_methods_needed.cpp:72
ci_lazy_methods_neededt::add_cprover_nondet_initialize_if_it_exists
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 ...
Definition
ci_lazy_methods_needed.cpp:52
ci_lazy_methods_neededt::add_clinit_call
void add_clinit_call(const irep_idt &class_id)
For a given class id, note that its static initializer is needed.
Definition
ci_lazy_methods_needed.cpp:42
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition
namespace.h:91
pointer_typet
The pointer type These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (they ...
Definition
pointer_expr.h:24
select_pointer_typet
Definition
select_pointer_type.h:23
struct_tag_typet
A struct tag type, i.e., struct_typet with an identifier.
Definition
std_types.h:493
symbol_table_baset
The symbol table base class interface.
Definition
symbol_table_base.h:23
irep.h
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
jbmc
src
java_bytecode
ci_lazy_methods_needed.h
Generated by
1.17.0