1
1
/* ******************************************************************\
2
2
3
- Module: Java Static Initializers
3
+ Module: Synthetic methods map
4
4
5
5
Author: Chris Smowton, chris.smowton@diffblue.com
6
6
@@ -9,12 +9,29 @@ Author: Chris Smowton, chris.smowton@diffblue.com
9
9
#ifndef CPROVER_JAVA_BYTECODE_SYNTHETIC_METHODS_MAP_H
10
10
#define CPROVER_JAVA_BYTECODE_SYNTHETIC_METHODS_MAP_H
11
11
12
+ // / \file Synthetic methods are particular methods internally generated by the
13
+ // / Java frontend (cf. normal methods which are translated from Java
14
+ // / bytecode). This file provides an enumeration specifying the kind of a
15
+ // / particular synthetic method and a common type of a map giving a collection
16
+ // / of synthetic methods.
17
+ // / Functions stubs and array.clone() functions are also generated by the Java
18
+ // / frontend but are not recorded using this framework, but may be in future.
19
+
20
+ // / Synthetic method kinds.
12
21
enum class synthetic_method_typet
13
22
{
23
+ // / A static initializer wrapper
24
+ // / (code of the form `if(!already_run) clinit(); already_run = true;`)
25
+ // / These are generated for both user and stub types, to ensure the actual
26
+ // / static initializer is only run once on any given path.
14
27
STATIC_INITIALIZER_WRAPPER,
28
+ // / A generated (synthetic) static initializer function for a stub type.
29
+ // / Because we don't have the bytecode for a stub type (by definition), we
30
+ // / generate a static initializer function to initialize its static fields.
15
31
STUB_CLASS_STATIC_INITIALIZER
16
32
};
17
33
34
+ // / Maps method names on to a synthetic method kind.
18
35
typedef std::unordered_map<irep_idt, synthetic_method_typet, irep_id_hash>
19
36
synthetic_methods_mapt;
20
37
0 commit comments