1818#define SWIFT_RUNTIME_CONCURRENCY_H
1919
2020#include " swift/ABI/TaskGroup.h"
21+ #include " swift/ABI/AsyncLet.h"
2122#include " swift/ABI/TaskStatus.h"
2223
2324#pragma clang diagnostic push
@@ -49,15 +50,17 @@ using FutureAsyncSignature =
4950// / closure.
5051SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
5152AsyncTaskAndContext swift_task_create_future (
52- JobFlags flags, const Metadata *futureResultType,
53+ JobFlags flags,
54+ const Metadata *futureResultType,
5355 void *closureEntryPoint,
5456 HeapObject * /* +1 */ closureContext);
5557
5658// / Create a task object with a future which will run the given
5759// / function.
5860SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
5961AsyncTaskAndContext swift_task_create_future_f (
60- JobFlags flags, const Metadata *futureResultType,
62+ JobFlags flags,
63+ const Metadata *futureResultType,
6164 FutureAsyncSignature::FunctionType *function,
6265 size_t initialContextSize);
6366
@@ -74,7 +77,8 @@ AsyncTaskAndContext swift_task_create_group_future(
7477// / function, and offer its result to the task group
7578SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
7679AsyncTaskAndContext swift_task_create_group_future_f (
77- JobFlags flags, TaskGroup *group,
80+ JobFlags flags,
81+ TaskGroup *group,
7882 const Metadata *futureResultType,
7983 FutureAsyncSignature::FunctionType *function,
8084 size_t initialContextSize);
@@ -169,7 +173,7 @@ SWIFT_CC(swiftasync)
169173// / \code
170174// / func swift_taskGroup_wait_next_throwing(
171175// / waitingTask: Builtin.NativeObject, // current task
172- // / group: UnsafeRawPointer
176+ // / group: Builtin.RawPointer
173177// / ) async -> T
174178// / \endcode
175179SWIFT_EXPORT_FROM (swift_Concurrency)
@@ -184,8 +188,7 @@ void swift_taskGroup_wait_next_throwing(
184188// / Its Swift signature is
185189// /
186190// / \code
187- // / func swift_taskGroup_initialize(group: Builtin.RawPointer
188- // / )
191+ // / func swift_taskGroup_initialize(group: Builtin.RawPointer)
189192// / \endcode
190193SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
191194void swift_taskGroup_initialize (TaskGroup *group);
@@ -202,7 +205,6 @@ void swift_taskGroup_initialize(TaskGroup *group);
202205// / \code
203206// / func swift_taskGroup_attachChild(
204207// / group: Builtin.RawPointer,
205- // / parent: Builtin.NativeObject,
206208// / child: Builtin.NativeObject
207209// / )
208210// / \endcode
@@ -214,7 +216,7 @@ void swift_taskGroup_attachChild(TaskGroup *group, AsyncTask *child);
214216// / This function MUST be called from the AsyncTask running the task group.
215217// /
216218// / \code
217- // / func swift_taskGroup_destroy(_ group: UnsafeRawPointer )
219+ // / func swift_taskGroup_destroy(_ group: Builtin.RawPointer )
218220// / \endcode
219221SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
220222void swift_taskGroup_destroy (TaskGroup *group);
@@ -244,7 +246,7 @@ bool swift_taskGroup_addPending(TaskGroup *group, bool unconditionally);
244246// / Its Swift signature is
245247// /
246248// / \code
247- // / func swift_taskGroup_cancelAll(group: UnsafeRawPointer )
249+ // / func swift_taskGroup_cancelAll(group: Builtin.RawPointer )
248250// / \endcode
249251SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
250252void swift_taskGroup_cancelAll (TaskGroup *group);
@@ -257,7 +259,7 @@ void swift_taskGroup_cancelAll(TaskGroup *group);
257259// / This can be called from any thread. Its Swift signature is
258260// /
259261// / \code
260- // / func swift_taskGroup_isCancelled(group: UnsafeRawPointer )
262+ // / func swift_taskGroup_isCancelled(group: Builtin.RawPointer )
261263// / \endcode
262264SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
263265bool swift_taskGroup_isCancelled (TaskGroup *group);
@@ -274,6 +276,63 @@ bool swift_taskGroup_isCancelled(TaskGroup *group);
274276SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
275277bool swift_taskGroup_isEmpty (TaskGroup *group);
276278
279+ // / Its Swift signature is
280+ // /
281+ // / \code
282+ // / func swift_asyncLet_start<T>(
283+ // / _ alet: Builtin.RawPointer,
284+ // / operation: __owned @Sendable @escaping () async throws -> T
285+ // / )
286+ // / \endcode
287+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
288+ void swift_asyncLet_start (
289+ AsyncLet *alet,
290+ const Metadata *futureResultType,
291+ void *closureEntryPoint,
292+ HeapObject * /* +1 */ closureContext);
293+
294+ // / This matches the ABI of a closure `<T>(Builtin.RawPointer) async -> T`
295+ using AsyncLetWaitSignature =
296+ SWIFT_CC (swiftasync)
297+ void (OpaqueValue *,
298+ SWIFT_ASYNC_CONTEXT AsyncContext *, AsyncTask *, Metadata *);
299+
300+ // / Wait for a non-throwing async-let to complete.
301+ // /
302+ // / This can be called from any thread. Its Swift signature is
303+ // /
304+ // / \code
305+ // / func swift_asyncLet_wait(
306+ // / _ asyncLet: _owned Builtin.RawPointer
307+ // / ) async -> Success
308+ // / \endcode
309+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swiftasync)
310+ void swift_asyncLet_wait (OpaqueValue *,
311+ SWIFT_ASYNC_CONTEXT AsyncContext *,
312+ AsyncLet *, Metadata *);
313+
314+ // / Wait for a potentially-throwing async-let to complete.
315+ // /
316+ // / This can be called from any thread. Its Swift signature is
317+ // /
318+ // / \code
319+ // / func swift_asyncLet_wait_throwing(
320+ // / _ asyncLet: _owned Builtin.RawPointer
321+ // / ) async throws -> Success
322+ // / \endcode
323+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swiftasync)
324+ void swift_asyncLet_wait_throwing (OpaqueValue *,
325+ SWIFT_ASYNC_CONTEXT AsyncContext *,
326+ AsyncLet *, Metadata *);
327+
328+ // / Its Swift signature is
329+ // /
330+ // / \code
331+ // / func swift_asyncLet_end(_ alet: Builtin.RawPointer)
332+ // / \endcode
333+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
334+ void swift_asyncLet_end (AsyncLet *alet);
335+
277336// / Add a status record to a task. The record should not be
278337// / modified while it is registered with a task.
279338// /
@@ -314,8 +373,7 @@ bool swift_task_removeStatusRecord(TaskStatusRecord *record);
314373// / The record must be removed with by the parent invoking
315374// / `swift_task_detachChild` when the child has completed.
316375SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
317- ChildTaskStatusRecord*
318- swift_task_attachChild (AsyncTask *child);
376+ ChildTaskStatusRecord* swift_task_attachChild (AsyncTask *child);
319377
320378// / Remove a child task from the parent tracking it.
321379SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
0 commit comments