Skip to content

Commit b0560f0

Browse files
committed
Allow using older API if $BuiltinCreateAsyncTaskOwnedTaskExecutor is not available
1 parent dc8e72a commit b0560f0

File tree

2 files changed

+92
-26
lines changed

2 files changed

+92
-26
lines changed

stdlib/public/Concurrency/Task+TaskExecutor.swift

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,13 @@ extension Task where Failure == Never {
241241
flags: flags,
242242
initialTaskExecutorConsuming: taskExecutor,
243243
operation: operation)
244-
245-
self._task = task
246244
#else
247-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
245+
let executorBuiltin: Builtin.Executor =
246+
taskExecutor.asUnownedTaskExecutor().executor
247+
let (task, _) = Builtin.createAsyncTaskWithExecutor(
248+
flags, executorBuiltin, operation)
248249
#endif
250+
self._task = task
249251
}
250252
}
251253

@@ -301,11 +303,13 @@ extension Task where Failure == Error {
301303
flags: flags,
302304
initialTaskExecutorConsuming: taskExecutor,
303305
operation: operation)
304-
305-
self._task = task
306306
#else
307-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
307+
let executorBuiltin: Builtin.Executor =
308+
taskExecutor.asUnownedTaskExecutor().executor
309+
let (task, _) = Builtin.createAsyncTaskWithExecutor(
310+
flags, executorBuiltin, operation)
308311
#endif
312+
self._task = task
309313
}
310314
}
311315

@@ -357,14 +361,15 @@ extension Task where Failure == Never {
357361
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
358362
let (task, _) = Builtin.createTask(
359363
flags: flags,
360-
// initialTaskExecutor: executorBuiltin, deprecated
361364
initialTaskExecutorConsuming: taskExecutor,
362365
operation: operation)
363-
364-
return Task(task)
365366
#else
366-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
367+
let executorBuiltin: Builtin.Executor =
368+
taskExecutor.asUnownedTaskExecutor().executor
369+
let (task, _) = Builtin.createAsyncTaskWithExecutor(
370+
flags, executorBuiltin, operation)
367371
#endif
372+
return Task(task)
368373
}
369374
}
370375

@@ -418,11 +423,13 @@ extension Task where Failure == Error {
418423
flags: flags,
419424
initialTaskExecutorConsuming: taskExecutor,
420425
operation: operation)
421-
422-
return Task(task)
423426
#else
424-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
427+
let executorBuiltin: Builtin.Executor =
428+
taskExecutor.asUnownedTaskExecutor().executor
429+
let (task, _) = Builtin.createAsyncTaskWithExecutor(
430+
flags, executorBuiltin, operation)
425431
#endif
432+
return Task(task)
426433
}
427434
}
428435

stdlib/public/Concurrency/TaskGroup+TaskExecutor.swift

Lines changed: 72 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ extension TaskGroup {
4646
addPendingGroupTaskUnconditionally: true,
4747
isDiscardingTask: false)
4848

49-
// Create the task in this group with an executor preference.
5049
let builtinSerialExecutor =
5150
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
5251

@@ -57,7 +56,14 @@ extension TaskGroup {
5756
initialTaskExecutorConsuming: taskExecutor,
5857
operation: operation)
5958
#else
60-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
59+
let executorBuiltin: Builtin.Executor =
60+
taskExecutor.asUnownedTaskExecutor().executor
61+
62+
_ = Builtin.createTask(flags: flags,
63+
initialSerialExecutor: builtinSerialExecutor,
64+
taskGroup: _group,
65+
initialTaskExecutor: executorBuiltin,
66+
operation: operation)
6167
#endif
6268
}
6369

@@ -107,10 +113,18 @@ extension TaskGroup {
107113
taskGroup: _group,
108114
initialTaskExecutorConsuming: taskExecutor,
109115
operation: operation)
110-
return true
111116
#else
112-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
117+
let executorBuiltin: Builtin.Executor =
118+
taskExecutor.asUnownedTaskExecutor().executor
119+
120+
_ = Builtin.createTask(flags: flags,
121+
initialSerialExecutor: builtinSerialExecutor,
122+
taskGroup: _group,
123+
initialTaskExecutor: executorBuiltin,
124+
operation: operation)
113125
#endif
126+
127+
return true
114128
}
115129
}
116130

@@ -158,7 +172,14 @@ extension ThrowingTaskGroup {
158172
initialTaskExecutorConsuming: taskExecutor,
159173
operation: operation)
160174
#else
161-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
175+
let executorBuiltin: Builtin.Executor =
176+
taskExecutor.asUnownedTaskExecutor().executor
177+
178+
_ = Builtin.createTask(flags: flags,
179+
initialSerialExecutor: builtinSerialExecutor,
180+
taskGroup: _group,
181+
initialTaskExecutor: executorBuiltin,
182+
operation: operation)
162183
#endif
163184
}
164185

@@ -204,10 +225,18 @@ extension ThrowingTaskGroup {
204225
taskGroup: _group,
205226
initialTaskExecutorConsuming: taskExecutor,
206227
operation: operation)
207-
return true
208228
#else
209-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
229+
let executorBuiltin: Builtin.Executor =
230+
taskExecutor.asUnownedTaskExecutor().executor
231+
232+
_ = Builtin.createTask(flags: flags,
233+
initialSerialExecutor: builtinSerialExecutor,
234+
taskGroup: _group,
235+
initialTaskExecutor: executorBuiltin,
236+
operation: operation)
210237
#endif
238+
239+
return true
211240
}
212241
}
213242

@@ -255,7 +284,14 @@ extension DiscardingTaskGroup {
255284
initialTaskExecutorConsuming: taskExecutor,
256285
operation: operation)
257286
#else
258-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
287+
let executorBuiltin: Builtin.Executor =
288+
taskExecutor.asUnownedTaskExecutor().executor
289+
290+
_ = Builtin.createTask(flags: flags,
291+
initialSerialExecutor: builtinSerialExecutor,
292+
taskGroup: _group,
293+
initialTaskExecutor: executorBuiltin,
294+
operation: operation)
259295
#endif
260296
}
261297

@@ -306,10 +342,18 @@ extension DiscardingTaskGroup {
306342
taskGroup: _group,
307343
initialTaskExecutorConsuming: taskExecutor,
308344
operation: operation)
309-
return true
310345
#else
311-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
346+
let executorBuiltin: Builtin.Executor =
347+
taskExecutor.asUnownedTaskExecutor().executor
348+
349+
_ = Builtin.createTask(flags: flags,
350+
initialSerialExecutor: builtinSerialExecutor,
351+
taskGroup: _group,
352+
initialTaskExecutor: executorBuiltin,
353+
operation: operation)
312354
#endif
355+
356+
return true
313357
}
314358
}
315359

@@ -357,7 +401,14 @@ extension ThrowingDiscardingTaskGroup {
357401
initialTaskExecutorConsuming: taskExecutor,
358402
operation: operation)
359403
#else
360-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
404+
let executorBuiltin: Builtin.Executor =
405+
taskExecutor.asUnownedTaskExecutor().executor
406+
407+
_ = Builtin.createTask(flags: flags,
408+
initialSerialExecutor: builtinSerialExecutor,
409+
taskGroup: _group,
410+
initialTaskExecutor: executorBuiltin,
411+
operation: operation)
361412
#endif
362413
}
363414

@@ -408,10 +459,18 @@ extension ThrowingDiscardingTaskGroup {
408459
taskGroup: _group,
409460
initialTaskExecutorConsuming: taskExecutor,
410461
operation: operation)
411-
return true
412462
#else
413-
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
463+
let executorBuiltin: Builtin.Executor =
464+
taskExecutor.asUnownedTaskExecutor().executor
465+
466+
_ = Builtin.createTask(flags: flags,
467+
initialSerialExecutor: builtinSerialExecutor,
468+
taskGroup: _group,
469+
initialTaskExecutor: executorBuiltin,
470+
operation: operation)
414471
#endif
472+
473+
return true
415474
}
416475
}
417476

0 commit comments

Comments
 (0)