Skip to content

Commit 3aad9fa

Browse files
committed
[SwiftStaticMirror] Create API to query an opaque associated type's protocol requirements
1 parent f38f3ff commit 3aad9fa

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

include/swift-c/StaticMirror/BinaryScan.h

+4-1
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 3 // Added filed type info gather
28+
#define SWIFTSTATICMIRROR_VERSION_MINOR 4 // Added opaque associated type's protocol requirements
2929

3030
SWIFTSTATICMIRROR_BEGIN_DECLS
3131

@@ -115,6 +115,9 @@ SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
115115
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);
118+
SWIFTSTATICMIRROR_PUBLIC swiftscan_string_set_t *
119+
swift_static_mirror_type_alias_get_opaque_type_requirements(
120+
swift_static_mirror_type_alias_t);
118121

119122
// swift_static_mirror_associated_type_info query methods
120123
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t

include/swift/StaticMirror/BinaryScanImpl.h

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ 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;
3738
};
3839

3940
struct swift_static_mirror_associated_type_info_s {

tools/libStaticMirror/libStaticMirror.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ swiftscan_string_ref_t create_clone(const char *string) {
4343
return str;
4444
}
4545

46+
swiftscan_string_set_t *create_set(const std::vector<std::string> &strings) {
47+
swiftscan_string_set_t *set = new swiftscan_string_set_t;
48+
set->count = strings.size();
49+
set->strings = new swiftscan_string_ref_t[set->count];
50+
for (unsigned SI = 0, SE = set->count; SI < SE; ++SI)
51+
set->strings[SI] = create_clone(strings[SI].c_str());
52+
return set;
53+
}
4654
} // namespace c_string_utils
4755
} // namespace swift
4856

@@ -177,6 +185,9 @@ convertAssociatedTypeQueryResult(
177185
typeAliasInfo.SubstitutedTypeMangledName.c_str());
178186
info->type_alias_set->type_aliases[typealiasIndex] = typeAliasDetails;
179187
typealiasIndex += 1;
188+
typeAliasDetails->opaque_requirements_set =
189+
swift::c_string_utils::create_set(
190+
typeAliasInfo.OpaqueTypeProtocolConformanceRequirements);
180191
}
181192
result->associated_type_infos[associatedTypeInfoIndex] = info;
182193
associatedTypeInfoIndex += 1;
@@ -270,6 +281,11 @@ swift_static_mirror_type_alias_get_substituted_type_mangled_name(
270281
swift_static_mirror_type_alias_t type_alias) {
271282
return type_alias->substituted_type_mangled_name;
272283
}
284+
swiftscan_string_set_t *
285+
swift_static_mirror_type_alias_get_opaque_type_requirements(
286+
swift_static_mirror_type_alias_t type_alias) {
287+
return type_alias->opaque_requirements_set;
288+
}
273289

274290
// swift_static_mirror_associated_type_info query methods
275291
swift_static_mirror_string_ref_t

tools/libStaticMirror/libStaticMirror.exports

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ 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
1011
swift_static_mirror_associated_type_info_get_mangled_type_name
1112
swift_static_mirror_associated_type_info_get_type_alias_set
1213
swift_static_mirror_associated_type_info_set_create

0 commit comments

Comments
 (0)