Skip to content

Commit c2190ae

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

File tree

4 files changed

+49
-9
lines changed

4 files changed

+49
-9
lines changed

include/swift-c/StaticMirror/BinaryScan.h

Lines changed: 5 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

@@ -116,7 +116,10 @@ SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
116116
swift_static_mirror_type_alias_get_substituted_type_mangled_name(
117117
swift_static_mirror_type_alias_t);
118118
SWIFTSTATICMIRROR_PUBLIC swiftscan_string_set_t *
119-
swift_static_mirror_type_alias_get_opaque_type_requirements(
119+
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements(
120+
swift_static_mirror_type_alias_t);
121+
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_set_t *
122+
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements(
120123
swift_static_mirror_type_alias_t);
121124

122125
// swift_static_mirror_associated_type_info query methods

include/swift/StaticMirror/BinaryScanImpl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ 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_set_t *opaque_same_type_requirements_set;
3839
};
3940

4041
struct swift_static_mirror_associated_type_info_s {

tools/libStaticMirror/libStaticMirror.cpp

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,41 @@ 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_set_t;
195+
typeAliasDetails->opaque_same_type_requirements_set->count =
196+
typeAliasInfo.OpaqueTypeSameTypeRequirements.size();
197+
typeAliasDetails->opaque_same_type_requirements_set->type_aliases =
198+
new swift_static_mirror_type_alias_t
199+
[typeAliasInfo.OpaqueTypeSameTypeRequirements.size()];
200+
int sameTypeReqIndex = 0;
201+
for (const auto &sameTypeReq :
202+
typeAliasInfo.OpaqueTypeSameTypeRequirements) {
203+
swift_static_mirror_type_alias_s *sameTypeReqDetails =
204+
new swift_static_mirror_type_alias_s;
205+
sameTypeReqDetails->type_alias_name =
206+
swift::c_string_utils::create_clone(
207+
sameTypeReq.TypeAliasName.c_str());
208+
sameTypeReqDetails->substituted_type_mangled_name =
209+
swift::c_string_utils::create_clone(
210+
sameTypeReq.SubstitutedTypeMangledName.c_str());
211+
sameTypeReqDetails->substituted_type_name =
212+
swift::c_string_utils::create_clone(
213+
sameTypeReq.SubstitutedTypeFullyQualifiedName.c_str());
214+
typeAliasDetails->opaque_same_type_requirements_set
215+
->type_aliases[sameTypeReqIndex] = sameTypeReqDetails;
216+
sameTypeReqIndex += 1;
217+
}
218+
219+
info->type_alias_set->type_aliases[typealiasIndex] = typeAliasDetails;
220+
typealiasIndex += 1;
191221
}
192222
result->associated_type_infos[associatedTypeInfoIndex] = info;
193223
associatedTypeInfoIndex += 1;
@@ -282,9 +312,14 @@ swift_static_mirror_type_alias_get_substituted_type_mangled_name(
282312
return type_alias->substituted_type_mangled_name;
283313
}
284314
swiftscan_string_set_t *
285-
swift_static_mirror_type_alias_get_opaque_type_requirements(
315+
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements(
316+
swift_static_mirror_type_alias_t type_alias) {
317+
return type_alias->opaque_protocol_requirements_set;
318+
}
319+
swift_static_mirror_type_alias_set_t *
320+
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements(
286321
swift_static_mirror_type_alias_t type_alias) {
287-
return type_alias->opaque_requirements_set;
322+
return type_alias->opaque_same_type_requirements_set;
288323
}
289324

290325
// 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)