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,76 @@ bool swift_taskGroup_isCancelled(TaskGroup *group);
274276SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
275277bool swift_taskGroup_isEmpty (TaskGroup *group);
276278
279+ // / Initialize an `AsyncLet` in the passed `asyncLet` memory location.
280+ // / The caller is responsible for retaining and managing the asyncLet's lifecycle.
281+ // /
282+ // / Its Swift signature is
283+ // /
284+ // / \code
285+ // / func swift_asyncLet_initialize(
286+ // / .... // TODO: fill in
287+ // / )
288+ // / \endcode
289+ // SWIFT_EXPORT_FROM(swift_Concurrency) SWIFT_CC(swift)
290+ // void swift_asyncLet_initialize(AsyncLet *alet, AsyncTask *task);
291+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
292+ void swift_asyncLet_initialize (
293+ AsyncLet *alet,
294+ JobFlags flags,
295+ const Metadata *futureResultType,
296+ void *closureEntryPoint,
297+ HeapObject * /* +1 */ closureContext);
298+
299+ // / Its Swift signature is
300+ // /
301+ // / \code
302+ // / func swift_asyncLet_start(_ alet: Builtin.RawPointer)
303+ // / \endcode
304+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
305+ void swift_asyncLet_start (AsyncLet *alet, void * operation);
306+
307+ // / This matches the ABI of a closure `<T>(Builtin.RawPointer) async -> T`
308+ using AsyncLetWaitSignature =
309+ SWIFT_CC (swiftasync)
310+ void (OpaqueValue *,
311+ SWIFT_ASYNC_CONTEXT AsyncContext *, AsyncTask *, Metadata *);
312+
313+ // / Wait for a non-throwing async-let to complete.
314+ // /
315+ // / This can be called from any thread. Its Swift signature is
316+ // /
317+ // / \code
318+ // / func swift_asyncLet_wait(
319+ // / _ asyncLet: _owned Builtin.RawPointer
320+ // / ) async -> Success
321+ // / \endcode
322+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swiftasync)
323+ void swift_asyncLet_wait (OpaqueValue *,
324+ SWIFT_ASYNC_CONTEXT AsyncContext *,
325+ AsyncLet *, Metadata *);
326+
327+ // / Wait for a potentially-throwing async-let to complete.
328+ // /
329+ // / This can be called from any thread. Its Swift signature is
330+ // /
331+ // / \code
332+ // / func swift_asyncLet_wait_throwing(
333+ // / _ asyncLet: _owned Builtin.RawPointer
334+ // / ) async throws -> Success
335+ // / \endcode
336+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swiftasync)
337+ void swift_asyncLet_wait_throwing (OpaqueValue *,
338+ SWIFT_ASYNC_CONTEXT AsyncContext *,
339+ AsyncLet *, Metadata *);
340+
341+ // / Its Swift signature is
342+ // /
343+ // / \code
344+ // / func swift_asyncLet_end(_ alet: Builtin.RawPointer)
345+ // / \endcode
346+ SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
347+ void swift_asyncLet_end (AsyncLet *alet);
348+
277349// / Add a status record to a task. The record should not be
278350// / modified while it is registered with a task.
279351// /
@@ -314,8 +386,7 @@ bool swift_task_removeStatusRecord(TaskStatusRecord *record);
314386// / The record must be removed with by the parent invoking
315387// / `swift_task_detachChild` when the child has completed.
316388SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
317- ChildTaskStatusRecord*
318- swift_task_attachChild (AsyncTask *child);
389+ ChildTaskStatusRecord* swift_task_attachChild (AsyncTask *child);
319390
320391// / Remove a child task from the parent tracking it.
321392SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
0 commit comments