Skip to content

Commit bbad3ad

Browse files
committed
Document synthetic methods generated by the Java frontend
1 parent 442f315 commit bbad3ad

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/java_bytecode/java_bytecode_language.h

+4
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ class java_bytecode_languaget:public languaget
172172

173173
private:
174174
const std::unique_ptr<const select_pointer_typet> pointer_type_selector;
175+
176+
/// Maps synthetic method names on to the particular type of synthetic method
177+
/// (static initializer, initializer wrapper, etc). For full documentation see
178+
/// synthetic_method_map.h
175179
synthetic_methods_mapt synthetic_methods;
176180
stub_global_initializer_factoryt stub_global_initializer_factory;
177181
class_hierarchyt class_hierarchy;

src/java_bytecode/synthetic_methods_map.h

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************\
22
3-
Module: Java Static Initializers
3+
Module: Synthetic methods map
44
55
Author: Chris Smowton, [email protected]
66
@@ -9,12 +9,30 @@ Author: Chris Smowton, [email protected]
99
#ifndef CPROVER_JAVA_BYTECODE_SYNTHETIC_METHODS_MAP_H
1010
#define CPROVER_JAVA_BYTECODE_SYNTHETIC_METHODS_MAP_H
1111

12+
/// \file
13+
/// Synthetic methods are particular methods internally generated by the
14+
/// Java frontend (cf. normal methods which are translated from Java
15+
/// bytecode). This file provides an enumeration specifying the kind of a
16+
/// particular synthetic method and a common type of a map giving a collection
17+
/// of synthetic methods.
18+
/// Functions stubs and array.clone() functions are also generated by the Java
19+
/// frontend but are not recorded using this framework, but may be in future.
20+
21+
/// Synthetic method kinds.
1222
enum class synthetic_method_typet
1323
{
24+
/// A static initializer wrapper
25+
/// (code of the form `if(!already_run) clinit(); already_run = true;`)
26+
/// These are generated for both user and stub types, to ensure the actual
27+
/// static initializer is only run once on any given path.
1428
STATIC_INITIALIZER_WRAPPER,
29+
/// A generated (synthetic) static initializer function for a stub type.
30+
/// Because we don't have the bytecode for a stub type (by definition), we
31+
/// generate a static initializer function to initialize its static fields.
1532
STUB_CLASS_STATIC_INITIALIZER
1633
};
1734

35+
/// Maps method names on to a synthetic method kind.
1836
typedef std::unordered_map<irep_idt, synthetic_method_typet, irep_id_hash>
1937
synthetic_methods_mapt;
2038

0 commit comments

Comments
 (0)