Skip to content

Commit 0be4e00

Browse files
committed
Changes
1 parent 5156dcd commit 0be4e00

File tree

6 files changed

+138
-15
lines changed

6 files changed

+138
-15
lines changed

cpp23/default_init.dot.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#ifndef DEFAULT_INIT_INCLUDED
2+
#define DEFAULT_INIT_INCLUDED
3+
4+
#include "common.h"
5+
6+
#define NODE_DEFAULT_INIT_HEAD default_initialization_head
7+
8+
#define DEFAULT_INIT_BACKREF(source) { { source; } -> NODE_DEFAULT_INIT_HEAD [style="dotted"] }
9+
#define INTERNALLY_DEFAULT_INITS(id) { id -> NODE_DEFAULT_INIT_HEAD [style="dotted"]; }
10+
11+
// [dcl.init.general]/7
12+
subgraph cluster_default_initialization {
13+
INSTRUCTION_NODE(NODE_DEFAULT_INIT_HEAD, "Default-initialization", "[dcl.init.general]/7")
14+
-> INSTRUCTION_NODE(default_defn_t, "Let the type of the object be T.", "[dcl.init.general]/7")
15+
-> default_is_class
16+
17+
// 7,1
18+
{
19+
YN_QUESTION_NODE(default_is_class, "Is T a (possibly cv-qualified class type)?", "[dcl.init.general]/7.1", default_class_enumerate, default_is_array)
20+
21+
INSTRUCTION_NODE(default_class_enumerate, "Enumerate the applicable constructors.", "[dcl.init.general]/7.1")
22+
-> INSTRUCTION_NODE(default_class_select, "Select the best constructor for the initializer \"()\".", "[dcl.init.general]/7.1")
23+
-> INSTRUCTION_NODE(default_class_init, "Call the selected constructor with an empty argument list to initialize the object", "[dcl.init.general]/7.1")
24+
-> NEW_DONE()
25+
}
26+
27+
// 7.2
28+
{
29+
YN_QUESTION_NODE(default_is_array, "Is T an array type?", "[dcl.init.general]/7.2", default_array_init, default_no_init)
30+
31+
INSTRUCTION_NODE(default_array_init, "Default-initialize each element of the array.", "[dcl.init.general]/7.2")
32+
-> NEW_DONE()
33+
34+
DEFAULT_INIT_BACKREF(default_array_init)
35+
}
36+
37+
// 7.3
38+
{
39+
INSTRUCTION_NODE(default_no_init, "No initialization is performed.", "[dcl.init.general]/7.3")
40+
-> NEW_DONE()
41+
}
42+
}
43+
44+
#endif

cpp23/flowchart.dot.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
digraph initialization {
44
compound="true";
55

6+
#include "default_init.dot.cpp"
7+
#include "zero_init.dot.cpp"
68
#include "value_init.dot.cpp"
79
#include "string_init.dot.cpp"
810
#include "reference_init.dot.cpp"

cpp23/list_init.dot.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ subgraph list_initialization {
119119
YN_QUESTION_NODE(list_enum_is_convertible, "Can v be implicitly converted to U?", "[dcl.init.list]/3.8", list_enum_is_direct, list_final_is_singleton)
120120
YN_QUESTION_NODE(list_enum_is_direct, "Is the initialization direct-list-initialization?", "[dcl.init.list]/3.8", list_enum_initialization, list_final_is_singleton)
121121

122-
INSTRUCTION_NODE(list_enum_initialization, "The object is initialized with the value \"T(v)\" (an explicit type conversion).")
122+
INSTRUCTION_NODE(list_enum_initialization, "Initialized the object with the value \"T(v)\" (an explicit type conversion).")
123123
-> list_enum_is_narrowing
124124

125125
YN_QUESTION_NODE(list_enum_is_narrowing, "Is a narrowing conversion required to convert v to U?", "[dcl.init.list]/3.8", NEW_ILL_FORMED(), NEW_DONE())

cpp23/string_init.dot.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#define STRING_LITERAL_INIT_HEAD string_literal_initialization_head
77

8+
#include "zero_init.dot.cpp"
9+
810
subgraph cluster_string_literal_initialization {
911
INSTRUCTION_NODE(STRING_LITERAL_INIT_HEAD, "Initialization as follows:", "[dcl.init.string]")
1012
-> INSTRUCTION_NODE(string_literal_verify_kind, "Verify array type and literal type match.")
@@ -33,6 +35,8 @@ subgraph cluster_string_literal_initialization {
3335

3436
INSTRUCTION_NODE(string_literal_initialize_rest, "Zero-initialize the remaining elements of the array (if any).")
3537
-> NEW_DONE()
38+
39+
INTERNALLY_ZERO_INITS(string_literal_initialize_rest)
3640
}
3741

3842
#endif

cpp23/value_init.dot.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,51 @@
44
#include "common.h"
55

66
#define NODE_VALUE_INIT_HEAD value_initialization_head
7-
#define INST_VALUE_INIT(id, ...) { INSTRUCTION_NODE(id, "The object is value-initialized.", __VA_ARGS__); } -> NODE_VALUE_INIT_HEAD
7+
#define INST_VALUE_INIT(id, ...) { INSTRUCTION_NODE(id, "Value-initialize the objecct.", __VA_ARGS__); } -> NODE_VALUE_INIT_HEAD
88
#define INTERNALLY_VALUE_INITS(id) { id -> NODE_VALUE_INIT_HEAD [style="dotted"]; }
99

10+
#include "default_init.dot.cpp"
11+
#include "zero_init.dot.cpp"
12+
1013
// [dcl.init.general]/9
1114
subgraph cluster_value_initialization {
1215
INSTRUCTION_NODE(NODE_VALUE_INIT_HEAD, "Value-initialization", "[dcl.init.general]/9")
16+
-> INSTRUCTION_NODE(value_defn_t, "Let T be the type of the object.", "[dcl.init.general]/9")
1317
-> value_is_class
1418

1519
// 9.1
1620
{
17-
YN_QUESTION_NODE(value_is_class, "Is the type a (possibly cv-qualified) class type?", "[dcl.init.general]/9.1", value_class_find_dflt_ctor, value_is_array)
21+
YN_QUESTION_NODE(value_is_class, "Is the type a (possibly cv-qualified) class type?", "[dcl.init.general]/9.1", value_class_has_default, value_is_array)
1822

19-
INSTRUCTION_NODE(value_class_find_dflt_ctor, "Let C be the constructor selected to default-initialize the object, if any.", "[dcl.init.general]/9.1")
20-
-> value_class_dflt_ctor_is_user_provided
23+
YN_QUESTION_NODE(value_class_has_default, "Does T have a default constructor?", "[dcl.init.general]/9.1", value_class_default_is_deleted, value_class_direct_default_init)
24+
YN_QUESTION_NODE(value_class_default_is_deleted, "Is that default constructor deleted?", "[dcl.init.general]/9.1", value_class_direct_default_init, value_class_default_is_user_provided)
25+
YN_QUESTION_NODE(value_class_default_is_user_provided, "Is that default constructor user-provided?", "[dcl.init.general]/9.1", value_class_direct_default_init, value_class_dflt_ctor_check_zero)
2126

22-
YN_QUESTION_NODE(value_class_dflt_ctor_is_user_provided, "Is C user-provided?", "[dcl.init.general]/9.1", value_class_dflt_ctor_zero_init, value_class_default_initialize)
27+
INSTRUCTION_NODE(value_class_direct_default_init, "Default-initialize the object.", "[dcl.init.general]/9.1")
28+
-> NODE_DEFAULT_INIT_HEAD
2329

24-
INSTRUCTION_NODE(value_class_dflt_ctor_zero_init, "The object is zero-initialized.", "[dcl.init.general]/9.1")
25-
-> value_class_default_initialize
30+
INSTRUCTION_NODE(value_class_dflt_ctor_check_zero, "Check the semantic constraints for default-initialization.", "[dcl.init.general]/9.1")
31+
-> INSTRUCTION_NODE(value_class_dflt_ctor_zero_init, "Zero-initialize the object.", "[dcl.init.general]/9.1")
32+
-> INSTRUCTION_NODE(value_class_dflt_ctor_default_init, "Default-initialize the object.", "[dcl.init.general]/9.1")
33+
-> NODE_DEFAULT_INIT_HEAD
2634

27-
INSTRUCTION_NODE(value_class_default_initialize, "The object is default-initialized.", "[dcl.init.general]/9.1")
28-
-> NEW_DONE()
35+
INTERNALLY_ZERO_INITS(value_class_dflt_ctor_zero_init)
2936
}
3037

3138
// 9.3
3239
{
33-
YN_QUESTION_NODE(value_is_array, "Is the type an array type?", "[dcl.init.general]/9.2", value_array_semantic_constraints, value_zero_initialize_fallback)
40+
YN_QUESTION_NODE(value_is_array, "Is the type an array type?", "[dcl.init.general]/9.2", value_array_initialize_elements, value_zero_initialize_fallback)
3441

35-
YN_QUESTION_NODE(value_array_semantic_constraints, "Are the semantic constraints of value-initializing a hypothetical element met?", "[dcl.init.general]/9.2", value_array_initialize_elements, NEW_ILL_FORMED())
36-
INSTRUCTION_NODE(value_array_initialize_elements, "Each element of the array is value-initialized.", "[dcl.init.general]/9.2")
42+
INSTRUCTION_NODE(value_array_initialize_elements, "Value-initialize each element of the array.", "[dcl.init.general]/9.2")
3743
-> NEW_DONE()
3844

3945
INTERNALLY_VALUE_INITS(value_array_initialize_elements)
4046
}
4147

4248
// 9.3
4349
{
44-
INSTRUCTION_NODE(value_zero_initialize_fallback, "The object is zero-initialized.", "[dcl.init.general]/9.3")
45-
-> NEW_DONE()
50+
INSTRUCTION_NODE(value_zero_initialize_fallback, "Zero-initialize the object.", "[dcl.init.general]/9.3")
51+
-> NODE_ZERO_INIT_HEAD
4652
}
4753
}
4854

cpp23/zero_init.dot.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#ifndef ZERO_INIT_INCLUDED
2+
#define ZERO_INIT_INCLUDED
3+
4+
#include "common.h"
5+
6+
#define NODE_ZERO_INIT_HEAD zero_initialization_head
7+
8+
#define ZERO_INIT_BACKREF(source) { { source; } -> NODE_ZERO_INIT_HEAD [style="dotted"] }
9+
#define INTERNALLY_ZERO_INITS(id) { id -> NODE_ZERO_INIT_HEAD [style="dotted"]; }
10+
11+
// [dcl.init.general]/9
12+
subgraph cluster_zero_initialization {
13+
INSTRUCTION_NODE(NODE_ZERO_INIT_HEAD, "Zero-initialization", "[dcl.init.general]/6")
14+
-> INSTRUCTION_NODE(zero_defn_t, "Let the type of the object or reference be T.", "[dcl.init.general]/6")
15+
-> zero_is_scalar
16+
17+
// 6.1
18+
{
19+
YN_QUESTION_NODE(zero_is_scalar, "Is T a scalar type?", "[dcl.init.general]/6.1", zero_scalar_init, zero_is_class)
20+
INSTRUCTION_NODE(zero_scalar_init, "Initialized the objecct to the value obtained by converting the literal 0 to T.", "[dcl.init.general]/6.1")
21+
-> NEW_DONE()
22+
}
23+
24+
// 6.2-6.3
25+
{
26+
YN_QUESTION_NODE(zero_is_class, "Is T a class type?", "[dcl.init.general]/6.2", zero_is_union, zero_is_array)
27+
YN_QUESTION_NODE(zero_is_union, "Is T a union type?", "[dcl.init.general]/6.2-3", zero_union_padding, zero_class_padding)
28+
29+
INSTRUCTION_NODE(zero_class_padding, "Initialize the object's padding bits to zero bits.", "[dcl.init.general]/6.2")
30+
-> INSTRUCTION_NODE(zero_class_members, "Zero-initialize each of the object's non-static data members.", "[dcl.init.general]/6.2")
31+
-> INSTRUCTION_NODE(zero_class_bases, "Zero-initialize each of the object's non-virtual base class subobjects.", "[dcl.init.general]/6.2")
32+
-> zero_class_is_base_subobject
33+
34+
YN_QUESTION_NODE(zero_class_is_base_subobject, "Is the object a base class subobject?", "[dcl.init.general]/6.2", zero_class_virtual_bases, NEW_DONE())
35+
36+
INSTRUCTION_NODE(zero_class_virtual_bases, "Zero-initialize each of the object's virtual base class subobjects.", "[dcl.init.general]/6.2")
37+
-> NEW_DONE()
38+
39+
ZERO_INIT_BACKREF({
40+
zero_class_padding zero_class_members zero_class_bases zero_class_virtual_bases
41+
})
42+
43+
INSTRUCTION_NODE(zero_union_padding, "Initialize the object's padding bits to zero bits.", "[dcl.init.general]/6.3")
44+
-> INSTRUCTION_NODE(zero_union_first_nsdm, "Zero-nitialize the object's first non-static named data member.")
45+
-> NEW_DONE()
46+
47+
ZERO_INIT_BACKREF(zero_union_first_nsdm)
48+
}
49+
50+
// 6.4
51+
{
52+
YN_QUESTION_NODE(zero_is_array, "Is T an array type?", "[dcl.init.general]/6.4", zero_array_elements, zero_is_reference)
53+
54+
INSTRUCTION_NODE(zero_array_elements, "Zero-initialize each element.", "[dcl.init.general]/6.4")
55+
-> NEW_DONE()
56+
57+
ZERO_INIT_BACKREF(zero_array_elements)
58+
}
59+
60+
// 6.5
61+
{
62+
YN_QUESTION_NODE(zero_is_reference, "Is T a reference type?", "[dcl.init.general]/6.5", zero_reference_no_init, NEW_DONE())
63+
INSTRUCTION_NODE(zero_reference_no_init, "No initialization is performed.", "[dcl.init.general]/6.5")
64+
}
65+
}
66+
67+
#endif

0 commit comments

Comments
 (0)