Skip to content

Commit 5cacff4

Browse files
committed
[Dependency Scanning] Make a module's dependency info an opaque structure
1 parent fcf9433 commit 5cacff4

File tree

4 files changed

+114
-57
lines changed

4 files changed

+114
-57
lines changed

include/swift-c/DependencyScan/DependencyScan.h

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,36 +44,10 @@ typedef enum {
4444
/// Opaque container of the details specific to a given module dependency.
4545
typedef void *swiftscan_module_details_t;
4646

47-
typedef struct {
48-
/// The module's name
49-
/// The format is:
50-
/// `<module-kind>:<module-name>`
51-
/// where `module-kind` is one of:
52-
/// "swiftTextual"
53-
/// "swiftBinary"
54-
/// "swiftPlaceholder"
55-
/// "clang""
56-
swiftscan_string_t module_name;
57-
58-
/// The path for the module.
59-
swiftscan_string_t module_path;
60-
61-
/// The source files used to build this module.
62-
swiftscan_string_set_t *source_files;
63-
64-
/**
65-
* The list of modules which this module direct depends on.
66-
* The format is:
67-
* `<module-kind>:<module-name>`
68-
*/
69-
swiftscan_string_set_t *direct_dependencies;
70-
71-
/// Specific details of a particular kind of module.
72-
swiftscan_module_details_t details;
73-
} swiftscan_dependency_info_t;
47+
/// Opaque container to a dependency info of a given module.
48+
typedef void *swiftscan_dependency_info_t;
7449

7550
/// Full Dependency Graph (Result)
76-
7751
typedef struct {
7852
int count;
7953
swiftscan_dependency_info_t *modules;
@@ -112,8 +86,23 @@ typedef struct {
11286

11387
//=== Dependency Result Functions -----------------------------------------===//
11488

89+
SWIFTSCAN_PUBLIC swiftscan_string_t
90+
swiftscan_module_info_get_module_name(swiftscan_dependency_info_t info);
91+
92+
SWIFTSCAN_PUBLIC swiftscan_string_t
93+
swiftscan_module_info_get_module_path(swiftscan_dependency_info_t info);
94+
95+
SWIFTSCAN_PUBLIC swiftscan_string_set_t *
96+
swiftscan_module_info_get_source_files(swiftscan_dependency_info_t info);
97+
98+
SWIFTSCAN_PUBLIC swiftscan_string_set_t *
99+
swiftscan_module_info_get_direct_dependencies(swiftscan_dependency_info_t info);
100+
101+
SWIFTSCAN_PUBLIC swiftscan_module_details_t
102+
swiftscan_module_info_get_details(swiftscan_dependency_info_t info);
103+
115104
SWIFTSCAN_PUBLIC swiftscan_dependency_info_kind_t
116-
swiftscan_get_module_detail_kind(swiftscan_module_details_t details);
105+
swiftscan_module_detail_get_kind(swiftscan_module_details_t details);
117106

118107
//=== Swift Textual Module Details query APIs -----------------------------===//
119108
SWIFTSCAN_PUBLIC swiftscan_string_t

include/swift/DependencyScan/DependencyScanImpl.h

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,34 @@
1919
#include "swift-c/DependencyScan/DependencyScan.h"
2020
#include "swift/DependencyScan/DependencyScanningTool.h"
2121

22+
typedef struct {
23+
/// The module's name
24+
/// The format is:
25+
/// `<module-kind>:<module-name>`
26+
/// where `module-kind` is one of:
27+
/// "swiftTextual"
28+
/// "swiftBinary"
29+
/// "swiftPlaceholder"
30+
/// "clang""
31+
swiftscan_string_t module_name;
32+
33+
/// The path for the module.
34+
swiftscan_string_t module_path;
35+
36+
/// The source files used to build this module.
37+
swiftscan_string_set_t *source_files;
38+
39+
/**
40+
* The list of modules which this module direct depends on.
41+
* The format is:
42+
* `<module-kind>:<module-name>`
43+
*/
44+
swiftscan_string_set_t *direct_dependencies;
45+
46+
/// Specific details of a particular kind of module.
47+
swiftscan_module_details_t details;
48+
} swiftscan_impl_dependency_info_t;
49+
2250
/// Swift modules to be built from a module interface, may have a bridging
2351
/// header.
2452
typedef struct {
@@ -110,13 +138,26 @@ wrap_scanner(const swift::dependencies::DependencyScanningTool *P) {
110138
const_cast<swift::dependencies::DependencyScanningTool *>(P));
111139
}
112140

113-
inline swiftscan_impl_module_details_t *unwrap_details(swiftscan_module_details_t P) {
141+
inline swiftscan_impl_module_details_t *
142+
unwrap_details(swiftscan_module_details_t P) {
114143
return reinterpret_cast<swiftscan_impl_module_details_t *>(P);
115144
}
116145

117-
inline swiftscan_module_details_t wrap_details(const swiftscan_impl_module_details_t *P) {
146+
inline swiftscan_module_details_t
147+
wrap_details(const swiftscan_impl_module_details_t *P) {
118148
return reinterpret_cast<swiftscan_module_details_t>(
119149
const_cast<swiftscan_impl_module_details_t *>(P));
120150
}
121151

152+
inline swiftscan_impl_dependency_info_t *
153+
unwrap_info(swiftscan_dependency_info_t P) {
154+
return reinterpret_cast<swiftscan_impl_dependency_info_t *>(P);
155+
}
156+
157+
inline swiftscan_dependency_info_t
158+
wrap_info(const swiftscan_impl_dependency_info_t *P) {
159+
return reinterpret_cast<swiftscan_dependency_info_t>(
160+
const_cast<swiftscan_impl_dependency_info_t *>(P));
161+
}
162+
122163
#endif // SWIFT_C_DEPENDENCY_SCAN_IMPL_H

lib/DependencyScan/DependencyScanImpl.cpp

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,107 +97,134 @@ swiftscan_prescan_result_t *swiftscan_prescan_dependencies(swiftscan_scanner_t *
9797
return ImportSet;
9898
}
9999

100+
//=== Module Dependency Info query APIs -----------------------------------===//
101+
102+
swiftscan_string_t
103+
swiftscan_module_info_get_module_name(swiftscan_dependency_info_t info) {
104+
return unwrap_info(info)->module_name;
105+
}
106+
107+
swiftscan_string_t
108+
swiftscan_module_info_get_module_path(swiftscan_dependency_info_t info) {
109+
return unwrap_info(info)->module_path;
110+
}
111+
112+
swiftscan_string_set_t *
113+
swiftscan_module_info_get_source_files(swiftscan_dependency_info_t info) {
114+
return unwrap_info(info)->source_files;
115+
}
116+
117+
swiftscan_string_set_t *
118+
swiftscan_module_info_get_direct_dependencies(swiftscan_dependency_info_t info) {
119+
return unwrap_info(info)->direct_dependencies;
120+
}
121+
122+
swiftscan_module_details_t
123+
swiftscan_module_info_get_details(swiftscan_dependency_info_t info) {
124+
return unwrap_info(info)->details;
125+
}
126+
100127
//=== Swift Textual Module Details query APIs -----------------------------===//
101128

102129
swiftscan_dependency_info_kind_t
103-
swiftscan_get_module_detail_kind(swiftscan_module_details_t details) {
130+
swiftscan_module_detail_get_kind(swiftscan_module_details_t details) {
104131
return unwrap_details(details)->kind;
105132
}
106133

107134
swiftscan_string_t
108-
swiftscan_get_swift_textual_detail_module_interface_path(swiftscan_module_details_t details) {
135+
swiftscan_swift_textual_detail_get_module_interface_path(swiftscan_module_details_t details) {
109136
return unwrap_details(details)->swift_textual_details.module_interface_path;
110137
}
111138

112-
swiftscan_string_set_t *swiftscan_get_swift_textual_detail_compiled_module_candidates(
139+
swiftscan_string_set_t *swiftscan_swift_textual_detail_get_compiled_module_candidates(
113140
swiftscan_module_details_t details) {
114141
return unwrap_details(details)
115142
->swift_textual_details.compiled_module_candidates;
116143
}
117144

118145
swiftscan_string_t
119-
swiftscan_get_swift_textual_detail_bridging_header_path(swiftscan_module_details_t details) {
146+
swiftscan_swift_textual_detail_get_bridging_header_path(swiftscan_module_details_t details) {
120147
return unwrap_details(details)->swift_textual_details.bridging_header_path;
121148
}
122149

123150
swiftscan_string_set_t *
124-
swiftscan_get_swift_textual_detail_bridging_source_files(swiftscan_module_details_t details) {
151+
swiftscan_swift_textual_detail_get_bridging_source_files(swiftscan_module_details_t details) {
125152
return unwrap_details(details)->swift_textual_details.bridging_source_files;
126153
}
127154

128-
swiftscan_string_set_t *swiftscan_get_swift_textual_detail_bridging_module_dependencies(
155+
swiftscan_string_set_t *swiftscan_swift_textual_detail_get_bridging_module_dependencies(
129156
swiftscan_module_details_t details) {
130157
return unwrap_details(details)
131158
->swift_textual_details.bridging_module_dependencies;
132159
}
133160

134161
swiftscan_string_set_t *
135-
swiftscan_get_swift_textual_detail_command_line(swiftscan_module_details_t details) {
162+
swiftscan_swift_textual_detail_get_command_line(swiftscan_module_details_t details) {
136163
return unwrap_details(details)->swift_textual_details.command_line;
137164
}
138165

139166
swiftscan_string_set_t *
140-
swiftscan_get_swift_textual_detail_extra_pcm_args(swiftscan_module_details_t details) {
167+
swiftscan_swift_textual_detail_get_extra_pcm_args(swiftscan_module_details_t details) {
141168
return unwrap_details(details)->swift_textual_details.extra_pcm_args;
142169
}
143170

144171
swiftscan_string_t
145-
swiftscan_get_swift_textual_detail_context_hash(swiftscan_module_details_t details) {
172+
swiftscan_swift_textual_detail_get_context_hash(swiftscan_module_details_t details) {
146173
return unwrap_details(details)->swift_textual_details.context_hash;
147174
}
148175

149-
bool swiftscan_get_swift_textual_detail_is_framework(swiftscan_module_details_t details) {
176+
bool swiftscan_swift_textual_detail_get_is_framework(swiftscan_module_details_t details) {
150177
return unwrap_details(details)->swift_textual_details.is_framework;
151178
}
152179

153180
//=== Swift Binary Module Details query APIs ------------------------------===//
154181

155182
swiftscan_string_t
156-
swiftscan_get_swift_binary_detail_compiled_module_path(swiftscan_module_details_t details) {
183+
swiftscan_swift_binary_detail_get_compiled_module_path(swiftscan_module_details_t details) {
157184
return unwrap_details(details)->swift_binary_details.compiled_module_path;
158185
}
159186

160187
swiftscan_string_t
161-
swiftscan_get_swift_binary_detail_module_doc_path(swiftscan_module_details_t details) {
188+
swiftscan_swift_binary_detail_get_module_doc_path(swiftscan_module_details_t details) {
162189
return unwrap_details(details)->swift_binary_details.module_doc_path;
163190
}
164191

165-
swiftscan_string_t swiftscan_get_swift_binary_detail_module_source_info_path(
192+
swiftscan_string_t swiftscan_swift_binary_detail_get_module_source_info_path(
166193
swiftscan_module_details_t details) {
167194
return unwrap_details(details)->swift_binary_details.module_source_info_path;
168195
}
169196

170197
//=== Swift Placeholder Module Details query APIs -------------------------===//
171198

172-
swiftscan_string_t swiftscan_get_swift_placeholder_detail_compiled_module_path(
199+
swiftscan_string_t swiftscan_swift_placeholder_detail_get_compiled_module_path(
173200
swiftscan_module_details_t details) {
174201
return unwrap_details(details)
175202
->swift_placeholder_details.module_source_info_path;
176203
}
177204

178205
swiftscan_string_t
179-
swiftscan_get_swift_placeholder_detail_module_doc_path(swiftscan_module_details_t details) {
206+
swiftscan_swift_placeholder_detail_get_module_doc_path(swiftscan_module_details_t details) {
180207
return unwrap_details(details)
181208
->swift_placeholder_details.module_source_info_path;
182209
}
183210

184-
swiftscan_string_t swiftscan_get_swift_placeholder_detail_module_source_info_path(
211+
swiftscan_string_t swiftscan_swift_placeholder_detail_get_module_source_info_path(
185212
swiftscan_module_details_t details) {
186213
return unwrap_details(details)
187214
->swift_placeholder_details.module_source_info_path;
188215
}
189216

190217
//=== Clang Module Details query APIs -------------------------------------===//
191218

192-
swiftscan_string_t swiftscan_get_clang_detail_module_map_path(swiftscan_module_details_t details) {
219+
swiftscan_string_t swiftscan_clang_detail_get_module_map_path(swiftscan_module_details_t details) {
193220
return unwrap_details(details)->clang_details.module_map_path;
194221
}
195222

196-
swiftscan_string_t swiftscan_get_clang_detail_context_hash(swiftscan_module_details_t details) {
223+
swiftscan_string_t swiftscan_clang_detail_get_context_hash(swiftscan_module_details_t details) {
197224
return unwrap_details(details)->clang_details.context_hash;
198225
}
199226

200-
swiftscan_string_set_t *swiftscan_get_clang_detail_command_line(swiftscan_module_details_t details) {
227+
swiftscan_string_set_t *swiftscan_clang_detail_get_command_line(swiftscan_module_details_t details) {
201228
return unwrap_details(details)->clang_details.command_line;
202229
}
203230

@@ -243,11 +270,11 @@ void swiftscan_dependency_info_details_dispose(swiftscan_module_details_t detail
243270
}
244271

245272
void swiftscan_dependency_info_dispose(swiftscan_dependency_info_t *info) {
246-
swiftscan_string_dispose(info->module_name);
247-
swiftscan_string_dispose(info->module_path);
248-
swiftscan_string_set_dispose(info->source_files);
249-
swiftscan_string_set_dispose(info->direct_dependencies);
250-
swiftscan_dependency_info_details_dispose(info->details);
273+
swiftscan_string_dispose(unwrap_info(info)->module_name);
274+
swiftscan_string_dispose(unwrap_info(info)->module_path);
275+
swiftscan_string_set_dispose(unwrap_info(info)->source_files);
276+
swiftscan_string_set_dispose(unwrap_info(info)->direct_dependencies);
277+
swiftscan_dependency_info_details_dispose(unwrap_info(info)->details);
251278
}
252279

253280
void swiftscan_dependency_set_dispose(swiftscan_dependency_set_t *set) {

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ static void writeJSON(llvm::raw_ostream &out,
500500
SWIFT_DEFER { out << " ]\n"; };
501501
const auto module_set = fullDependencies->module_set;
502502
for (int mi = 0; mi < module_set->count; ++mi) {
503-
const auto &moduleInfo = module_set->modules[mi];
503+
const auto &moduleInfo = *unwrap_info(module_set->modules[mi]);
504504
auto &directDependencies = moduleInfo.direct_dependencies;
505505
// The module we are describing.
506506
out.indent(2 * 2);
@@ -830,7 +830,7 @@ generateFullDependencyGraph(CompilerInstance &instance,
830830
return wrap_details(details);
831831
};
832832

833-
swiftscan_dependency_info_t &moduleInfo = dependencySet->modules[i];
833+
auto &moduleInfo = *unwrap_info(dependencySet->modules[i]);
834834
moduleInfo.module_name =
835835
create_dup(createEncodedModuleKindAndName(module).c_str());
836836
moduleInfo.module_path = create_dup(modulePath.c_str());

0 commit comments

Comments
 (0)