|
1 | 1 | /*******************************************************************\
|
2 | 2 |
|
3 |
| -Module: Java Static Initializers |
| 3 | +Module: Synthetic methods map |
4 | 4 |
|
5 | 5 | Author: Chris Smowton, [email protected]
|
6 | 6 |
|
|
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