Skip to content

Commit f686bd7

Browse files
committed
[SwiftStaticMirror] Create API to query an opaque associated type's same-type requirements
1 parent 8716fd0 commit f686bd7

File tree

4 files changed

+67
-9
lines changed

4 files changed

+67
-9
lines changed

include/swift-c/StaticMirror/BinaryScan.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
/// SWIFTSTATICMIRROR_VERSION_MINOR should increase when there are API additions.
2626
/// SWIFTSTATICMIRROR_VERSION_MAJOR is intended for "major" source/ABI breaking changes.
2727
#define SWIFTSTATICMIRROR_VERSION_MAJOR 0
28-
#define SWIFTSTATICMIRROR_VERSION_MINOR 4 // Added opaque associated type's protocol requirements
28+
#define SWIFTSTATICMIRROR_VERSION_MINOR 5 // Added opaque associated type's same-type requirements
2929

3030
SWIFTSTATICMIRROR_BEGIN_DECLS
3131

@@ -58,6 +58,10 @@ typedef struct swift_static_mirror_enum_case_info_s
5858
typedef struct swift_static_mirror_type_alias_s
5959
*swift_static_mirror_type_alias_t;
6060

61+
/// Opaque container to detail a same-type requriement on an opaque associated type
62+
typedef struct swift_static_mirror_type_alias_same_type_requirement_info_s
63+
*swift_static_mirror_type_alias_same_type_requirement_info_t;
64+
6165
/// Opaque container to an associated type (typealias) info of a given type.
6266
typedef struct swift_static_mirror_associated_type_info_s
6367
*swift_static_mirror_associated_type_info_t;
@@ -67,6 +71,11 @@ typedef struct {
6771
size_t count;
6872
} swift_static_mirror_type_alias_set_t;
6973

74+
typedef struct {
75+
swift_static_mirror_type_alias_same_type_requirement_info_t *same_type_requirements;
76+
size_t count;
77+
} swift_static_mirror_type_alias_same_type_requirement_info_set_t;
78+
7079
typedef struct {
7180
swift_static_mirror_associated_type_info_t *associated_type_infos;
7281
size_t count;
@@ -116,7 +125,10 @@ SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
116125
swift_static_mirror_type_alias_get_substituted_type_mangled_name(
117126
swift_static_mirror_type_alias_t);
118127
SWIFTSTATICMIRROR_PUBLIC swiftscan_string_set_t *
119-
swift_static_mirror_type_alias_get_opaque_type_requirements(
128+
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements(
129+
swift_static_mirror_type_alias_t);
130+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_same_type_requirement_info_set_t *
131+
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements(
120132
swift_static_mirror_type_alias_t);
121133

122134
// swift_static_mirror_associated_type_info query methods

include/swift/StaticMirror/BinaryScanImpl.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@ struct swift_static_mirror_type_alias_s {
3434
swift_static_mirror_string_ref_t type_alias_name;
3535
swift_static_mirror_string_ref_t substituted_type_name;
3636
swift_static_mirror_string_ref_t substituted_type_mangled_name;
37-
swift_static_mirror_string_set_t *opaque_requirements_set;
37+
swift_static_mirror_string_set_t *opaque_protocol_requirements_set;
38+
swift_static_mirror_type_alias_same_type_requirement_info_set_t
39+
*opaque_same_type_requirements_set;
40+
};
41+
42+
struct swift_static_mirror_type_alias_same_type_requirement_info_s {
43+
swift_static_mirror_string_ref_t type_alias_name;
44+
swift_static_mirror_string_ref_t substituted_type_name;
45+
swift_static_mirror_string_ref_t substituted_type_mangled_name;
3846
};
3947

4048
struct swift_static_mirror_associated_type_info_s {

tools/libStaticMirror/libStaticMirror.cpp

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,43 @@ convertAssociatedTypeQueryResult(
183183
typeAliasDetails->substituted_type_mangled_name =
184184
swift::c_string_utils::create_clone(
185185
typeAliasInfo.SubstitutionInfo.SubstitutedTypeMangledName.c_str());
186-
info->type_alias_set->type_aliases[typealiasIndex] = typeAliasDetails;
187-
typealiasIndex += 1;
188-
typeAliasDetails->opaque_requirements_set =
186+
187+
// Opaque type's protocol conformance requirements
188+
typeAliasDetails->opaque_protocol_requirements_set =
189189
swift::c_string_utils::create_set(
190190
typeAliasInfo.OpaqueTypeProtocolConformanceRequirements);
191+
192+
// Opaque type's same-type requirements
193+
typeAliasDetails->opaque_same_type_requirements_set =
194+
new swift_static_mirror_type_alias_same_type_requirement_info_set_t;
195+
typeAliasDetails->opaque_same_type_requirements_set->count =
196+
typeAliasInfo.OpaqueTypeSameTypeRequirements.size();
197+
typeAliasDetails->opaque_same_type_requirements_set
198+
->same_type_requirements =
199+
new swift_static_mirror_type_alias_same_type_requirement_info_t
200+
[typeAliasInfo.OpaqueTypeSameTypeRequirements.size()];
201+
int sameTypeReqIndex = 0;
202+
for (const auto &sameTypeReq :
203+
typeAliasInfo.OpaqueTypeSameTypeRequirements) {
204+
swift_static_mirror_type_alias_same_type_requirement_info_s
205+
*sameTypeReqDetails =
206+
new swift_static_mirror_type_alias_same_type_requirement_info_s;
207+
sameTypeReqDetails->type_alias_name =
208+
swift::c_string_utils::create_clone(
209+
sameTypeReq.TypeAliasName.c_str());
210+
sameTypeReqDetails->substituted_type_mangled_name =
211+
swift::c_string_utils::create_clone(
212+
sameTypeReq.SubstitutedTypeMangledName.c_str());
213+
sameTypeReqDetails->substituted_type_name =
214+
swift::c_string_utils::create_clone(
215+
sameTypeReq.SubstitutedTypeFullyQualifiedName.c_str());
216+
typeAliasDetails->opaque_same_type_requirements_set
217+
->same_type_requirements[sameTypeReqIndex] = sameTypeReqDetails;
218+
sameTypeReqIndex += 1;
219+
}
220+
221+
info->type_alias_set->type_aliases[typealiasIndex] = typeAliasDetails;
222+
typealiasIndex += 1;
191223
}
192224
result->associated_type_infos[associatedTypeInfoIndex] = info;
193225
associatedTypeInfoIndex += 1;
@@ -282,9 +314,14 @@ swift_static_mirror_type_alias_get_substituted_type_mangled_name(
282314
return type_alias->substituted_type_mangled_name;
283315
}
284316
swiftscan_string_set_t *
285-
swift_static_mirror_type_alias_get_opaque_type_requirements(
317+
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements(
318+
swift_static_mirror_type_alias_t type_alias) {
319+
return type_alias->opaque_protocol_requirements_set;
320+
}
321+
swift_static_mirror_type_alias_same_type_requirement_info_set_t *
322+
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements(
286323
swift_static_mirror_type_alias_t type_alias) {
287-
return type_alias->opaque_requirements_set;
324+
return type_alias->opaque_same_type_requirements_set;
288325
}
289326

290327
// swift_static_mirror_associated_type_info query methods

tools/libStaticMirror/libStaticMirror.exports

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ swift_static_mirror_conformance_info_get_mangled_type_name
77
swift_static_mirror_type_alias_get_type_alias_name
88
swift_static_mirror_type_alias_get_substituted_type_name
99
swift_static_mirror_type_alias_get_substituted_type_mangled_name
10-
swift_static_mirror_type_alias_get_opaque_type_requirements
10+
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements
11+
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements
1112
swift_static_mirror_associated_type_info_get_mangled_type_name
1213
swift_static_mirror_associated_type_info_get_type_alias_set
1314
swift_static_mirror_associated_type_info_set_create

0 commit comments

Comments
 (0)