Skip to content

Commit 02e1588

Browse files
committed
[Static Mirror] Add entry-points for querying field type information for properties and enum cases
1 parent e376af5 commit 02e1588

File tree

6 files changed

+306
-56
lines changed

6 files changed

+306
-56
lines changed

include/swift-c/StaticMirror/BinaryScan.h

+75-19
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ typedef void *swift_static_mirror_t;
4242
typedef struct swift_static_mirror_conformance_info_s
4343
*swift_static_mirror_conformance_info_t;
4444

45+
/// Opaque container to a field info (property type or enum case)
46+
typedef struct swift_static_mirror_field_info_s
47+
*swift_static_mirror_field_info_t;
48+
49+
/// Opaque container to a property type info
50+
typedef struct swift_static_mirror_property_info_s
51+
*swift_static_mirror_property_info_t;
52+
53+
/// Opaque container to an enum case info
54+
typedef struct swift_static_mirror_enum_case_info_s
55+
*swift_static_mirror_enum_case_info_t;
56+
4557
/// Opaque container to details of an associated type specification.
4658
typedef struct swift_static_mirror_type_alias_s
4759
*swift_static_mirror_type_alias_t;
@@ -55,7 +67,6 @@ typedef struct {
5567
size_t count;
5668
} swift_static_mirror_type_alias_set_t;
5769

58-
5970
typedef struct {
6071
swift_static_mirror_associated_type_info_t *associated_type_infos;
6172
size_t count;
@@ -66,26 +77,35 @@ typedef struct {
6677
size_t count;
6778
} swift_static_mirror_conformances_set_t;
6879

80+
typedef struct {
81+
swift_static_mirror_property_info_t *properties;
82+
size_t count;
83+
} swift_static_mirror_property_info_set_t;
6984

70-
// swift_static_mirror_conformance_info query methods
85+
typedef struct {
86+
swift_static_mirror_enum_case_info_t *enum_cases;
87+
size_t count;
88+
} swift_static_mirror_enum_case_info_set_t;
89+
90+
typedef struct {
91+
swift_static_mirror_field_info_t *field_infos;
92+
size_t count;
93+
} swift_static_mirror_field_info_set_t;
7194

95+
// swift_static_mirror_conformance_info query methods
7296
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
7397
swift_static_mirror_conformance_info_get_type_name(
7498
swift_static_mirror_conformance_info_t);
75-
7699
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
77100
swift_static_mirror_conformance_info_get_protocol_name(
78101
swift_static_mirror_conformance_info_t);
79-
80102
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
81103
swift_static_mirror_conformance_info_get_mangled_type_name(
82104
swift_static_mirror_conformance_info_t);
105+
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_conformance_info_dispose(
106+
swift_static_mirror_conformance_info_t);
83107

84-
SWIFTSTATICMIRROR_PUBLIC void
85-
swift_static_mirror_conformance_info_dispose(
86-
swift_static_mirror_conformance_info_t);
87-
88-
// swift_static_mirror_associated_type query methods
108+
// swift_static_mirror_associated_type_info query methods
89109
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
90110
swift_static_mirror_type_alias_get_type_alias_name(
91111
swift_static_mirror_type_alias_t);
@@ -100,41 +120,77 @@ SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
100120
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
101121
swift_static_mirror_associated_type_info_get_mangled_type_name(
102122
swift_static_mirror_associated_type_info_t);
103-
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_set_t*
123+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_set_t *
104124
swift_static_mirror_associated_type_info_get_type_alias_set(
105125
swift_static_mirror_associated_type_info_t);
106126

127+
// swift_static_mirror_field_info query methods
128+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
129+
swift_static_mirror_field_info_get_mangled_type_name(
130+
swift_static_mirror_field_info_t);
131+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_property_info_set_t *
132+
swift_static_mirror_field_info_get_property_info_set(
133+
swift_static_mirror_field_info_t);
134+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_enum_case_info_set_t *
135+
swift_static_mirror_field_info_get_enum_case_info_set(
136+
swift_static_mirror_field_info_t);
137+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
138+
swift_static_mirror_property_info_get_label(
139+
swift_static_mirror_property_info_t);
140+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
141+
swift_static_mirror_property_info_get_type_name(
142+
swift_static_mirror_property_info_t);
143+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
144+
swift_static_mirror_property_info_get_mangled_type_name(
145+
swift_static_mirror_property_info_t);
146+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
147+
swift_static_mirror_enum_case_info_get_label(
148+
swift_static_mirror_enum_case_info_t);
149+
107150
/// Create an \c swift_static_mirror_t instance.
108151
/// The returned \c swift_static_mirror_t is owned by the caller and must be
109152
/// disposed of using \c swift_static_mirror_dispose .
110153
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_t
111154
swift_static_mirror_create(int, const char **, const char *);
112155

113156
SWIFTSTATICMIRROR_PUBLIC void
114-
swift_static_mirror_dispose(swift_static_mirror_t);
157+
swift_static_mirror_dispose(swift_static_mirror_t);
115158

116159
/// Identify and collect all types conforming to any of the protocol names
117160
/// specified as arguments
118161
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_conformances_set_t *
119-
swift_static_mirror_conformances_set_create(
120-
swift_static_mirror_t, int, const char **);
162+
swift_static_mirror_conformances_set_create(swift_static_mirror_t, int,
163+
const char **);
121164

122165
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_conformances_set_dispose(
123166
swift_static_mirror_conformances_set_t *);
124167

125-
/// Identify and collect all associated types of a given input type (by mangled name)
168+
/// Identify and collect all associated types of a given input type (by mangled
169+
/// name)
126170
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_associated_type_info_set_t *
127-
swift_static_mirror_associated_type_info_set_create(
128-
swift_static_mirror_t, const char *);
171+
swift_static_mirror_associated_type_info_set_create(swift_static_mirror_t,
172+
const char *);
129173

130174
/// Identify and collect associated types of all discovered types.
131175
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_associated_type_info_set_t *
132-
swift_static_mirror_all_associated_type_info_set_create(
133-
swift_static_mirror_t);
176+
swift_static_mirror_all_associated_type_info_set_create(
177+
swift_static_mirror_t);
134178

135-
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_associated_type_info_set_dispose(
179+
SWIFTSTATICMIRROR_PUBLIC void
180+
swift_static_mirror_associated_type_info_set_dispose(
136181
swift_static_mirror_associated_type_info_set_t *);
137182

183+
/// Identify and collect all field types of a given input type (by mangled name)
184+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_field_info_set_t *
185+
swift_static_mirror_field_info_set_create(swift_static_mirror_t, const char *);
186+
187+
/// Identify and collect field types of all discovered types.
188+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_field_info_set_t *
189+
swift_static_mirror_all_field_info_set_create(swift_static_mirror_t);
190+
191+
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_field_info_set_dispose(
192+
swift_static_mirror_field_info_set_t *);
193+
138194
SWIFTSTATICMIRROR_END_DECLS
139195

140196
#endif // SWIFT_C_BINARY_SCAN_H

include/swift/Reflection/TypeRefBuilder.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ struct AssociatedType {
304304
std::string SubstitutedTypeDiagnosticPrintName;
305305
};
306306

307-
/// Info about a given type's associated type, as read out from an Image
307+
/// Info about all of a given type's associated types, as read out from an Image
308308
struct AssociatedTypeInfo {
309309
std::string MangledTypeName;
310310
std::string FullyQualifiedName;
@@ -328,6 +328,7 @@ struct EnumCaseInfo {
328328
std::string Label;
329329
};
330330

331+
/// Info about all of a given type's fields, as read out from an Image
331332
struct FieldMetadata {
332333
std::string MangledTypeName;
333334
std::string FullyQualifiedName;

include/swift/StaticMirror/BinaryScanImpl.h

+16
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,20 @@ struct swift_static_mirror_associated_type_info_s {
4141
swift_static_mirror_type_alias_set_t *type_alias_set;
4242
};
4343

44+
struct swift_static_mirror_enum_case_info_s {
45+
swift_static_mirror_string_ref_t label;
46+
};
47+
48+
struct swift_static_mirror_property_info_s {
49+
swift_static_mirror_string_ref_t label;
50+
swift_static_mirror_string_ref_t type_name;
51+
swift_static_mirror_string_ref_t mangled_type_name;
52+
};
53+
54+
struct swift_static_mirror_field_info_s {
55+
swift_static_mirror_string_ref_t mangled_type_name;
56+
swift_static_mirror_property_info_set_t *property_set;
57+
swift_static_mirror_enum_case_info_set_t *enum_case_set;
58+
};
59+
4460
#endif // SWIFT_C_BINARY_SCAN_IMPL_H

0 commit comments

Comments
 (0)