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,31 @@ 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
13
+ // / Synthetic methods are particular methods internally generated by the
14
+ // / Java frontend, including thunks to ensure static initializers are run once
15
+ // / and initializers created for unknown / stub types. Compare normal methods,
16
+ // / which are translated from Java bytecode. This file provides an
17
+ // / enumeration specifying the kind of a particular synthetic method and a
18
+ // / common type of a map giving a collection of synthetic methods.
19
+ // / Functions stubs and array.clone() functions are also generated by the Java
20
+ // / frontend but are not recorded using this framework, but may be in future.
21
+
22
+ // / Synthetic method kinds.
12
23
enum class synthetic_method_typet
13
24
{
25
+ // / A static initializer wrapper
26
+ // / (code of the form `if(!already_run) clinit(); already_run = true;`)
27
+ // / These are generated for both user and stub types, to ensure the actual
28
+ // / static initializer is only run once on any given path.
14
29
STATIC_INITIALIZER_WRAPPER,
30
+ // / A generated (synthetic) static initializer function for a stub type.
31
+ // / Because we don't have the bytecode for a stub type (by definition), we
32
+ // / generate a static initializer function to initialize its static fields.
15
33
STUB_CLASS_STATIC_INITIALIZER
16
34
};
17
35
36
+ // / Maps method names on to a synthetic method kind.
18
37
typedef std::unordered_map<irep_idt, synthetic_method_typet, irep_id_hash>
19
38
synthetic_methods_mapt;
20
39
0 commit comments