Skip to content

Commit

Permalink
Allow using older API if $BuiltinCreateAsyncTaskOwnedTaskExecutor is …
Browse files Browse the repository at this point in the history
…not available
  • Loading branch information
ktoso authored and tshortli committed Jul 3, 2024
1 parent 9ee719d commit 70ed180
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 26 deletions.
33 changes: 20 additions & 13 deletions stdlib/public/Concurrency/Task+TaskExecutor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -241,11 +241,13 @@ extension Task where Failure == Never {
flags: flags,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)

self._task = task
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor
let (task, _) = Builtin.createAsyncTaskWithExecutor(
flags, executorBuiltin, operation)
#endif
self._task = task
}
}

Expand Down Expand Up @@ -301,11 +303,13 @@ extension Task where Failure == Error {
flags: flags,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)

self._task = task
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor
let (task, _) = Builtin.createAsyncTaskWithExecutor(
flags, executorBuiltin, operation)
#endif
self._task = task
}
}

Expand Down Expand Up @@ -357,14 +361,15 @@ extension Task where Failure == Never {
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
let (task, _) = Builtin.createTask(
flags: flags,
// initialTaskExecutor: executorBuiltin, deprecated
initialTaskExecutorConsuming: taskExecutor,
operation: operation)

return Task(task)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor
let (task, _) = Builtin.createAsyncTaskWithExecutor(
flags, executorBuiltin, operation)
#endif
return Task(task)
}
}

Expand Down Expand Up @@ -418,11 +423,13 @@ extension Task where Failure == Error {
flags: flags,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)

return Task(task)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor
let (task, _) = Builtin.createAsyncTaskWithExecutor(
flags, executorBuiltin, operation)
#endif
return Task(task)
}
}

Expand Down
85 changes: 72 additions & 13 deletions stdlib/public/Concurrency/TaskGroup+TaskExecutor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ extension TaskGroup {
addPendingGroupTaskUnconditionally: true,
isDiscardingTask: false)

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

Expand All @@ -57,7 +56,14 @@ extension TaskGroup {
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif
}

Expand Down Expand Up @@ -107,10 +113,18 @@ extension TaskGroup {
taskGroup: _group,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
return true
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif

return true
}
}

Expand Down Expand Up @@ -158,7 +172,14 @@ extension ThrowingTaskGroup {
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif
}

Expand Down Expand Up @@ -204,10 +225,18 @@ extension ThrowingTaskGroup {
taskGroup: _group,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
return true
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif

return true
}
}

Expand Down Expand Up @@ -255,7 +284,14 @@ extension DiscardingTaskGroup {
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif
}

Expand Down Expand Up @@ -306,10 +342,18 @@ extension DiscardingTaskGroup {
taskGroup: _group,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
return true
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif

return true
}
}

Expand Down Expand Up @@ -357,7 +401,14 @@ extension ThrowingDiscardingTaskGroup {
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif
}

Expand Down Expand Up @@ -408,10 +459,18 @@ extension ThrowingDiscardingTaskGroup {
taskGroup: _group,
initialTaskExecutorConsuming: taskExecutor,
operation: operation)
return true
#else
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
let executorBuiltin: Builtin.Executor =
taskExecutor.asUnownedTaskExecutor().executor

_ = Builtin.createTask(flags: flags,
initialSerialExecutor: builtinSerialExecutor,
taskGroup: _group,
initialTaskExecutor: executorBuiltin,
operation: operation)
#endif

return true
}
}

Expand Down

0 comments on commit 70ed180

Please sign in to comment.