Skip to content

Commit 15fe6c8

Browse files
ktosotshortli
authored andcommitted
Allow using older API if $BuiltinCreateAsyncTaskOwnedTaskExecutor is not available
1 parent 2c7e62a commit 15fe6c8

File tree

2 files changed

+92
-28
lines changed

2 files changed

+92
-28
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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,12 @@ extension TaskGroup {
4040
guard let taskExecutor else {
4141
return self.addTask(priority: priority, operation: operation)
4242
}
43-
#if $BuiltinCreateAsyncTaskInGroupWithExecutor
4443
let flags = taskCreateFlags(
4544
priority: priority, isChildTask: true, copyTaskLocals: false,
4645
inheritContext: false, enqueueJob: true,
4746
addPendingGroupTaskUnconditionally: true,
4847
isDiscardingTask: false)
4948

50-
// Create the task in this group with an executor preference.
51-
#if $BuiltinCreateTask
5249
let builtinSerialExecutor =
5350
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
5451

@@ -59,7 +56,14 @@ extension TaskGroup {
5956
initialTaskExecutorConsuming: taskExecutor,
6057
operation: operation)
6158
#else
62-
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)
6367
#endif
6468
}
6569

@@ -109,10 +113,18 @@ extension TaskGroup {
109113
taskGroup: _group,
110114
initialTaskExecutorConsuming: taskExecutor,
111115
operation: operation)
112-
return true
113116
#else
114-
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)
115125
#endif
126+
127+
return true
116128
}
117129
}
118130

@@ -160,7 +172,14 @@ extension ThrowingTaskGroup {
160172
initialTaskExecutorConsuming: taskExecutor,
161173
operation: operation)
162174
#else
163-
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)
164183
#endif
165184
}
166185

@@ -206,10 +225,18 @@ extension ThrowingTaskGroup {
206225
taskGroup: _group,
207226
initialTaskExecutorConsuming: taskExecutor,
208227
operation: operation)
209-
return true
210228
#else
211-
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)
212237
#endif
238+
239+
return true
213240
}
214241
}
215242

@@ -257,7 +284,14 @@ extension DiscardingTaskGroup {
257284
initialTaskExecutorConsuming: taskExecutor,
258285
operation: operation)
259286
#else
260-
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)
261295
#endif
262296
}
263297

@@ -308,10 +342,18 @@ extension DiscardingTaskGroup {
308342
taskGroup: _group,
309343
initialTaskExecutorConsuming: taskExecutor,
310344
operation: operation)
311-
return true
312345
#else
313-
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)
314354
#endif
355+
356+
return true
315357
}
316358
}
317359

@@ -359,7 +401,14 @@ extension ThrowingDiscardingTaskGroup {
359401
initialTaskExecutorConsuming: taskExecutor,
360402
operation: operation)
361403
#else
362-
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)
363412
#endif
364413
}
365414

@@ -410,10 +459,18 @@ extension ThrowingDiscardingTaskGroup {
410459
taskGroup: _group,
411460
initialTaskExecutorConsuming: taskExecutor,
412461
operation: operation)
413-
return true
414462
#else
415-
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)
416471
#endif
472+
473+
return true
417474
}
418475
}
419476

0 commit comments

Comments
 (0)