13
13
@_implementationOnly import CSwiftScan
14
14
import struct Foundation. Data
15
15
16
+ // Swift Package Manager is building with `-disable-implicit-concurrency-module-import`
17
+ // to avoid warnings on old SDKs. Explicity importing concurrency if available
18
+ // and only adds async APIs when concurrency is available.
19
+ #if canImport(_Concurrency)
20
+ import _Concurrency
21
+ #endif
22
+
16
23
public final class CachedCompilation {
17
24
let ptr : swiftscan_cached_compilation_t
18
25
private let lib : SwiftScan
@@ -30,38 +37,6 @@ public final class CachedCompilation {
30
37
lib. api. swiftscan_cached_compilation_is_uncacheable ( ptr)
31
38
}
32
39
33
- public func makeGlobal( ) async throws -> Bool {
34
- class CallbackContext {
35
- func retain( ) -> UnsafeMutableRawPointer {
36
- return Unmanaged . passRetained ( self ) . toOpaque ( )
37
- }
38
-
39
- let continuation : CheckedContinuation < Bool , Swift . Error >
40
- let comp : CachedCompilation
41
- init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , compilation: CachedCompilation ) {
42
- self . continuation = continuation
43
- self . comp = compilation
44
- }
45
- }
46
-
47
- func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ error: swiftscan_string_ref_t ) {
48
- let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
49
- if error. length != 0 {
50
- if let err = try ? obj. comp. lib. toSwiftString ( error) {
51
- obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
52
- } else {
53
- obj. continuation. resume ( throwing: DependencyScanningError . casError ( " unknown makeGlobal error " ) )
54
- }
55
- }
56
- obj. continuation. resume ( returning: true )
57
- }
58
-
59
- return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
60
- let context = CallbackContext ( continuation, compilation: self )
61
- lib. api. swiftscan_cached_compilation_make_global_async ( ptr, context. retain ( ) , callbackFunc, nil )
62
- }
63
- }
64
-
65
40
deinit {
66
41
lib. api. swiftscan_cached_compilation_dispose ( ptr)
67
42
}
@@ -103,38 +78,6 @@ public final class CachedOutput {
103
78
}
104
79
}
105
80
106
- public func load( ) async throws -> Bool {
107
- class CallbackContext {
108
- func retain( ) -> UnsafeMutableRawPointer {
109
- return Unmanaged . passRetained ( self ) . toOpaque ( )
110
- }
111
-
112
- let continuation : CheckedContinuation < Bool , Swift . Error >
113
- let output : CachedOutput
114
- init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , output: CachedOutput ) {
115
- self . continuation = continuation
116
- self . output = output
117
- }
118
- }
119
-
120
- func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ success: Bool , _ error: swiftscan_string_ref_t ) {
121
- let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
122
- if error. length != 0 {
123
- if let err = try ? obj. output. lib. toSwiftString ( error) {
124
- obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
125
- } else {
126
- obj. continuation. resume ( throwing: DependencyScanningError . casError ( " unknown output loading error " ) )
127
- }
128
- }
129
- obj. continuation. resume ( returning: success)
130
- }
131
-
132
- return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
133
- let context = CallbackContext ( continuation, output: self )
134
- lib. api. swiftscan_cached_output_load_async ( ptr, context. retain ( ) , callbackFunc, nil )
135
- }
136
- }
137
-
138
81
public var isMaterialized : Bool {
139
82
lib. api. swiftscan_cached_output_is_materialized ( ptr)
140
83
}
@@ -260,6 +203,106 @@ public final class SwiftScanCAS {
260
203
return convert ( compilation: result)
261
204
}
262
205
206
+ public func replayCompilation( instance: CacheReplayInstance , compilation: CachedCompilation ) throws -> CacheReplayResult {
207
+ let result = try scanner. handleCASError { err_msg in
208
+ scanner. api. swiftscan_cache_replay_compilation ( instance. ptr, compilation. ptr, & err_msg)
209
+ }
210
+ guard let res = convert ( result: result) else {
211
+ throw DependencyScanningError . casError ( " unexpected nil for cache_replay_result " )
212
+ }
213
+ return res
214
+ }
215
+ }
216
+
217
+ extension swiftscan_cached_compilation_t {
218
+ func convert( _ lib: SwiftScan ) -> CachedCompilation {
219
+ return CachedCompilation ( self , lib: lib)
220
+ }
221
+ }
222
+
223
+ extension swiftscan_cache_replay_instance_t {
224
+ func convert( _ lib: SwiftScan ) -> CacheReplayInstance {
225
+ return CacheReplayInstance ( self , lib: lib)
226
+ }
227
+ }
228
+
229
+ extension swiftscan_cache_replay_result_t {
230
+ func convert( _ lib: SwiftScan ) -> CacheReplayResult {
231
+ return CacheReplayResult ( self , lib: lib)
232
+ }
233
+ }
234
+
235
+ #if canImport(_Concurrency)
236
+ // Async API Vendor
237
+ extension CachedCompilation {
238
+ public func makeGlobal( ) async throws -> Bool {
239
+ class CallbackContext {
240
+ func retain( ) -> UnsafeMutableRawPointer {
241
+ return Unmanaged . passRetained ( self ) . toOpaque ( )
242
+ }
243
+
244
+ let continuation : CheckedContinuation < Bool , Swift . Error >
245
+ let comp : CachedCompilation
246
+ init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , compilation: CachedCompilation ) {
247
+ self . continuation = continuation
248
+ self . comp = compilation
249
+ }
250
+ }
251
+
252
+ func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ error: swiftscan_string_ref_t ) {
253
+ let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
254
+ if error. length != 0 {
255
+ if let err = try ? obj. comp. lib. toSwiftString ( error) {
256
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
257
+ } else {
258
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( " unknown makeGlobal error " ) )
259
+ }
260
+ }
261
+ obj. continuation. resume ( returning: true )
262
+ }
263
+
264
+ return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
265
+ let context = CallbackContext ( continuation, compilation: self )
266
+ lib. api. swiftscan_cached_compilation_make_global_async ( ptr, context. retain ( ) , callbackFunc, nil )
267
+ }
268
+ }
269
+ }
270
+
271
+ extension CachedOutput {
272
+ public func load( ) async throws -> Bool {
273
+ class CallbackContext {
274
+ func retain( ) -> UnsafeMutableRawPointer {
275
+ return Unmanaged . passRetained ( self ) . toOpaque ( )
276
+ }
277
+
278
+ let continuation : CheckedContinuation < Bool , Swift . Error >
279
+ let output : CachedOutput
280
+ init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , output: CachedOutput ) {
281
+ self . continuation = continuation
282
+ self . output = output
283
+ }
284
+ }
285
+
286
+ func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ success: Bool , _ error: swiftscan_string_ref_t ) {
287
+ let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
288
+ if error. length != 0 {
289
+ if let err = try ? obj. output. lib. toSwiftString ( error) {
290
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
291
+ } else {
292
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( " unknown output loading error " ) )
293
+ }
294
+ }
295
+ obj. continuation. resume ( returning: success)
296
+ }
297
+
298
+ return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
299
+ let context = CallbackContext ( continuation, output: self )
300
+ lib. api. swiftscan_cached_output_load_async ( ptr, context. retain ( ) , callbackFunc, nil )
301
+ }
302
+ }
303
+ }
304
+
305
+ extension SwiftScanCAS {
263
306
public func queryCacheKey( _ key: String , globally: Bool ) async throws -> CachedCompilation ? {
264
307
class CallbackContext {
265
308
func retain( ) -> UnsafeMutableRawPointer {
@@ -291,32 +334,5 @@ public final class SwiftScanCAS {
291
334
scanner. api. swiftscan_cache_query_async ( cas, key. cString ( using: . utf8) , globally, context. retain ( ) , callbackFunc, nil )
292
335
}
293
336
}
294
-
295
- public func replayCompilation( instance: CacheReplayInstance , compilation: CachedCompilation ) throws -> CacheReplayResult {
296
- let result = try scanner. handleCASError { err_msg in
297
- scanner. api. swiftscan_cache_replay_compilation ( instance. ptr, compilation. ptr, & err_msg)
298
- }
299
- guard let res = convert ( result: result) else {
300
- throw DependencyScanningError . casError ( " unexpected nil for cache_replay_result " )
301
- }
302
- return res
303
- }
304
- }
305
-
306
- extension swiftscan_cached_compilation_t {
307
- func convert( _ lib: SwiftScan ) -> CachedCompilation {
308
- return CachedCompilation ( self , lib: lib)
309
- }
310
- }
311
-
312
- extension swiftscan_cache_replay_instance_t {
313
- func convert( _ lib: SwiftScan ) -> CacheReplayInstance {
314
- return CacheReplayInstance ( self , lib: lib)
315
- }
316
- }
317
-
318
- extension swiftscan_cache_replay_result_t {
319
- func convert( _ lib: SwiftScan ) -> CacheReplayResult {
320
- return CacheReplayResult ( self , lib: lib)
321
- }
322
337
}
338
+ #endif
0 commit comments