Skip to content

Commit dd84527

Browse files
[CAS] Add a callback version of the makeGlobal API
Provide a callback version of the makeGlobal API for uploading build artifacts on top of the async verison.
1 parent 000eb49 commit dd84527

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

Sources/SwiftDriver/SwiftScan/SwiftScanCAS.swift

+30
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,36 @@ public final class CachedCompilation {
3737
lib.api.swiftscan_cached_compilation_is_uncacheable(ptr)
3838
}
3939

40+
public func makeGlobal(_ callback: @escaping (Swift.Error?) -> ()) {
41+
class CallbackContext {
42+
func retain() -> UnsafeMutableRawPointer {
43+
return Unmanaged.passRetained(self).toOpaque()
44+
}
45+
46+
let comp: CachedCompilation
47+
let callback: (Swift.Error?) -> ()
48+
init(_ compilation: CachedCompilation, _ callback: @escaping (Swift.Error?) -> ()) {
49+
self.comp = compilation
50+
self.callback = callback
51+
}
52+
}
53+
54+
func callbackFunc(_ context: UnsafeMutableRawPointer?, _ error: swiftscan_string_ref_t) {
55+
let obj = Unmanaged<CallbackContext>.fromOpaque(context!).takeRetainedValue()
56+
if error.length != 0 {
57+
if let err = try? obj.comp.lib.toSwiftString(error) {
58+
obj.callback(DependencyScanningError.casError(err))
59+
} else {
60+
obj.callback(DependencyScanningError.casError("unknown makeGlobal error"))
61+
}
62+
}
63+
obj.callback(nil)
64+
}
65+
66+
let context = CallbackContext(self, callback)
67+
lib.api.swiftscan_cached_compilation_make_global_async(ptr, context.retain(), callbackFunc, nil)
68+
}
69+
4070
deinit {
4171
lib.api.swiftscan_cached_compilation_dispose(ptr)
4272
}

0 commit comments

Comments
 (0)