18
18
#define SWIFT_RUNTIME_CONCURRENCY_H
19
19
20
20
#include " swift/ABI/TaskGroup.h"
21
+ #include " swift/ABI/AsyncLet.h"
21
22
#include " swift/ABI/TaskStatus.h"
22
23
23
24
#pragma clang diagnostic push
@@ -49,15 +50,17 @@ using FutureAsyncSignature =
49
50
// / closure.
50
51
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
51
52
AsyncTaskAndContext swift_task_create_future (
52
- JobFlags flags, const Metadata *futureResultType,
53
+ JobFlags flags,
54
+ const Metadata *futureResultType,
53
55
void *closureEntryPoint,
54
56
HeapObject * /* +1 */ closureContext);
55
57
56
58
// / Create a task object with a future which will run the given
57
59
// / function.
58
60
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
59
61
AsyncTaskAndContext swift_task_create_future_f (
60
- JobFlags flags, const Metadata *futureResultType,
62
+ JobFlags flags,
63
+ const Metadata *futureResultType,
61
64
FutureAsyncSignature::FunctionType *function,
62
65
size_t initialContextSize);
63
66
@@ -74,7 +77,8 @@ AsyncTaskAndContext swift_task_create_group_future(
74
77
// / function, and offer its result to the task group
75
78
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
76
79
AsyncTaskAndContext swift_task_create_group_future_f (
77
- JobFlags flags, TaskGroup *group,
80
+ JobFlags flags,
81
+ TaskGroup *group,
78
82
const Metadata *futureResultType,
79
83
FutureAsyncSignature::FunctionType *function,
80
84
size_t initialContextSize);
@@ -169,7 +173,7 @@ SWIFT_CC(swiftasync)
169
173
// / \code
170
174
// / func swift_taskGroup_wait_next_throwing(
171
175
// / waitingTask: Builtin.NativeObject, // current task
172
- // / group: UnsafeRawPointer
176
+ // / group: Builtin.RawPointer
173
177
// / ) async -> T
174
178
// / \endcode
175
179
SWIFT_EXPORT_FROM (swift_Concurrency)
@@ -184,8 +188,7 @@ void swift_taskGroup_wait_next_throwing(
184
188
// / Its Swift signature is
185
189
// /
186
190
// / \code
187
- // / func swift_taskGroup_initialize(group: Builtin.RawPointer
188
- // / )
191
+ // / func swift_taskGroup_initialize(group: Builtin.RawPointer)
189
192
// / \endcode
190
193
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
191
194
void swift_taskGroup_initialize (TaskGroup *group);
@@ -202,7 +205,6 @@ void swift_taskGroup_initialize(TaskGroup *group);
202
205
// / \code
203
206
// / func swift_taskGroup_attachChild(
204
207
// / group: Builtin.RawPointer,
205
- // / parent: Builtin.NativeObject,
206
208
// / child: Builtin.NativeObject
207
209
// / )
208
210
// / \endcode
@@ -214,7 +216,7 @@ void swift_taskGroup_attachChild(TaskGroup *group, AsyncTask *child);
214
216
// / This function MUST be called from the AsyncTask running the task group.
215
217
// /
216
218
// / \code
217
- // / func swift_taskGroup_destroy(_ group: UnsafeRawPointer )
219
+ // / func swift_taskGroup_destroy(_ group: Builtin.RawPointer )
218
220
// / \endcode
219
221
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
220
222
void swift_taskGroup_destroy (TaskGroup *group);
@@ -244,7 +246,7 @@ bool swift_taskGroup_addPending(TaskGroup *group, bool unconditionally);
244
246
// / Its Swift signature is
245
247
// /
246
248
// / \code
247
- // / func swift_taskGroup_cancelAll(group: UnsafeRawPointer )
249
+ // / func swift_taskGroup_cancelAll(group: Builtin.RawPointer )
248
250
// / \endcode
249
251
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
250
252
void swift_taskGroup_cancelAll (TaskGroup *group);
@@ -257,7 +259,7 @@ void swift_taskGroup_cancelAll(TaskGroup *group);
257
259
// / This can be called from any thread. Its Swift signature is
258
260
// /
259
261
// / \code
260
- // / func swift_taskGroup_isCancelled(group: UnsafeRawPointer )
262
+ // / func swift_taskGroup_isCancelled(group: Builtin.RawPointer )
261
263
// / \endcode
262
264
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
263
265
bool swift_taskGroup_isCancelled (TaskGroup *group);
@@ -274,6 +276,76 @@ bool swift_taskGroup_isCancelled(TaskGroup *group);
274
276
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
275
277
bool swift_taskGroup_isEmpty (TaskGroup *group);
276
278
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
+
277
349
// / Add a status record to a task. The record should not be
278
350
// / modified while it is registered with a task.
279
351
// /
@@ -314,8 +386,7 @@ bool swift_task_removeStatusRecord(TaskStatusRecord *record);
314
386
// / The record must be removed with by the parent invoking
315
387
// / `swift_task_detachChild` when the child has completed.
316
388
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
317
- ChildTaskStatusRecord*
318
- swift_task_attachChild (AsyncTask *child);
389
+ ChildTaskStatusRecord* swift_task_attachChild (AsyncTask *child);
319
390
320
391
// / Remove a child task from the parent tracking it.
321
392
SWIFT_EXPORT_FROM (swift_Concurrency) SWIFT_CC(swift)
0 commit comments