Skip to content

Update the Swift version to 6.0! #71707

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Feb 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> **Note**\
> This is in reverse chronological order, so newer entries are added to the top.

## Swift 5.11
## Swift 6.0
* [SE-0422][]:
Non-built-in expression macros can now be used as default arguments that
expand at each call site. For example, a custom `#CurrentFile` macro used as
Expand Down
4 changes: 2 additions & 2 deletions cmake/SwiftVersion.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SWIFT_VERSION is deliberately /not/ cached so that an existing build directory
# can be reused when a new version of Swift comes out (assuming the user hasn't
# manually set it as part of their own CMake configuration).
set(SWIFT_VERSION_MAJOR 5)
set(SWIFT_VERSION_MINOR 11)
set(SWIFT_VERSION_MAJOR 6)
set(SWIFT_VERSION_MINOR 0)
set(SWIFT_VERSION "${SWIFT_VERSION_MAJOR}.${SWIFT_VERSION_MINOR}")

2 changes: 1 addition & 1 deletion docs/ABI/Mangling.rst
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ Types
function-isolation ::= type 'Yc' // Global actor on function type
#endif
throws ::= 'K' // 'throws' annotation on function types
#if SWIFT_RUNTIME_VERSION >= 5.11
#if SWIFT_RUNTIME_VERSION >= 6.0
throws ::= type 'YK' // 'throws(type)' annotation on function types
function-isolation ::= type 'YA' // @isolated(any) on function type
#endif
Expand Down
6 changes: 3 additions & 3 deletions include/swift/AST/ASTContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -990,10 +990,10 @@ class ASTContext final {
return getSwiftAvailability(5, 10);
}

/// Get the runtime availability of features introduced in the Swift 5.11
/// Get the runtime availability of features introduced in the Swift 6.0
/// compiler for the target platform.
inline AvailabilityContext getSwift511Availability() const {
return getSwiftAvailability(5, 11);
inline AvailabilityContext getSwift60Availability() const {
return getSwiftAvailability(6, 0);
}

/// Get the runtime availability for a particular version of Swift (5.0+).
Expand Down
2 changes: 1 addition & 1 deletion include/swift/Basic/LangOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ namespace swift {
///

/// User-overridable language version to compile for.
version::Version EffectiveLanguageVersion = version::Version::getCurrentLanguageVersion();
version::Version EffectiveLanguageVersion = version::Version{5, 10};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shahmishal, do you plan to bump this to 6 soon? Otherwise, I'm seeing strange behavior like this when compiling code with the Swift 6 snapshots:

> cat check.swift
#if swift(>=6.0)
print("got to 6.0")
#else
print("no go to 6.0")
#endif
> ./swift-DEVELOPMENT-SNAPSHOT-2024-07-29-a-ubi9/usr/bin/swiftc check.swift  && ./check
no go to 6.0
> ./swift-6.0-DEVELOPMENT-SNAPSHOT-2024-08-02-a-ubi9/usr/bin/swiftc check.swift  && ./check
no go to 6.0

Of course, this can be worked around by explicitly setting the language version:

> ./swift-DEVELOPMENT-SNAPSHOT-2024-07-29-a-ubi9/usr/bin/swiftc check.swift -swift-version 6 && ./check
got to 6.0

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is expected, the Swift 6.0 language mode is not enabled by default. Developers are required to enable Swift 6 language mode by using -swift-version 6.0

https://www.swift.org/migration

Important
The Swift 6 language mode is opt-in. Existing projects will not switch to this mode without configuration changes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I now see this was discussed on the forum months ago, which I missed: I will ask about it there.


/// Swift runtime version to compile for.
version::Version RuntimeVersion = version::Version::getCurrentLanguageVersion();
Expand Down
4 changes: 2 additions & 2 deletions include/swift/Demangling/DemangleNodes.def
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ NODE(AsyncSuspendResumePartialFunction)
NODE(AccessibleFunctionRecord)
NODE(CompileTimeConst)

// Added in Swift 5.11
// Added in Swift 6.0
NODE(AccessibleProtocolRequirementFunctionRecord)

// Added in Swift 5.7
Expand All @@ -379,7 +379,7 @@ NODE(HasSymbolQuery)
NODE(OpaqueReturnTypeIndex)
NODE(OpaqueReturnTypeParent)

// Addedn in Swift 5.11
// Addedn in Swift 6.0
NODE(OutlinedEnumTagStore)
NODE(OutlinedEnumProjectDataForLoad)
NODE(OutlinedEnumGetTag)
Expand Down
4 changes: 2 additions & 2 deletions include/swift/Runtime/CMakeConfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#cmakedefine01 SWIFT_BNI_OS_BUILD
#cmakedefine01 SWIFT_BNI_XCODE_BUILD

#cmakedefine SWIFT_VERSION_MAJOR "@SWIFT_VERSION_MAJOR@"
#cmakedefine SWIFT_VERSION_MINOR "@SWIFT_VERSION_MINOR@"
#define SWIFT_VERSION_MAJOR "@SWIFT_VERSION_MAJOR@"
#define SWIFT_VERSION_MINOR "@SWIFT_VERSION_MINOR@"

#endif
6 changes: 3 additions & 3 deletions lib/Basic/Version.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,11 @@ std::optional<Version> Version::getEffectiveLanguageVersion() const {
assert(size() == 2 && Components[0] == 4 && Components[1] == 2);
return Version{4, 2};
case 5:
static_assert(SWIFT_VERSION_MAJOR == 5,
return Version{5, 10};
case 6:
static_assert(SWIFT_VERSION_MAJOR == 6,
"getCurrentLanguageVersion is no longer correct here");
return Version::getCurrentLanguageVersion();
case 6:
return Version{6};
default:
return std::nullopt;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/Driver/DarwinToolChains.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,8 +384,8 @@ toolchains::Darwin::addArgsToLinkStdlib(ArgStringList &Arguments,
runtimeCompatibilityVersion = llvm::VersionTuple(5, 6);
} else if (value.equals("5.8")) {
runtimeCompatibilityVersion = llvm::VersionTuple(5, 8);
} else if (value.equals("5.11")) {
runtimeCompatibilityVersion = llvm::VersionTuple(5, 11);
} else if (value.equals("6.0")) {
runtimeCompatibilityVersion = llvm::VersionTuple(6, 0);
} else if (value.equals("none")) {
runtimeCompatibilityVersion = std::nullopt;
} else {
Expand Down
4 changes: 2 additions & 2 deletions lib/Frontend/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2907,8 +2907,8 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
runtimeCompatibilityVersion = llvm::VersionTuple(5, 6);
} else if (version.equals("5.8")) {
runtimeCompatibilityVersion = llvm::VersionTuple(5, 8);
} else if (version.equals("5.11")) {
runtimeCompatibilityVersion = llvm::VersionTuple(5, 11);
} else if (version.equals("6.0")) {
runtimeCompatibilityVersion = llvm::VersionTuple(6, 0);
} else {
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
versionArg->getAsString(Args), version);
Expand Down
4 changes: 2 additions & 2 deletions lib/IRGen/GenReflection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ class PrintMetadataSource

std::optional<llvm::VersionTuple>
getRuntimeVersionThatSupportsDemanglingType(CanType type) {
// The Swift 5.11 runtime is the first version able to demangle types
// The Swift 6.0 runtime is the first version able to demangle types
// that involve typed throws.
bool usesTypedThrows = type.findIf([](CanType t) -> bool {
if (auto fn = dyn_cast<AnyFunctionType>(t)) {
Expand All @@ -187,7 +187,7 @@ getRuntimeVersionThatSupportsDemanglingType(CanType type) {
return false;
});
if (usesTypedThrows) {
return llvm::VersionTuple(5, 11);
return llvm::VersionTuple(6, 0);
}

// The Swift 5.5 runtime is the first version able to demangle types
Expand Down
4 changes: 2 additions & 2 deletions lib/Macros/Sources/SwiftMacros/DistributedProtocolMacro.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public struct DistributedProtocolMacro: ExtensionMacro, PeerMacro {
.map { req in
"""
\(req) {
if #available(SwiftStdlib 5.11, *) {
if #available(SwiftStdlib 6.0, *) {
Distributed._distributedStubFatalError()
} else {
fatalError()
Expand Down Expand Up @@ -82,4 +82,4 @@ public struct DistributedProtocolMacro: ExtensionMacro, PeerMacro {
return [stubActorDecl]
}

}
}
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncCompactMapSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ extension AsyncCompactMapSequence: AsyncSequence {
///
/// The compact map sequence produces whatever type of error its
/// base sequence does.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -138,7 +138,7 @@ extension AsyncCompactMapSequence: AsyncSequence {
/// transform returns a non-`nil` value. If the transform returns `nil`,
/// this method continues to wait for further elements until it gets one
/// that transforms to a non-`nil` value.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> ElementOfResult? {
while true {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncDropFirstSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ extension AsyncDropFirstSequence: AsyncSequence {
///
/// The drop-first sequence produces whatever type of error its base
/// sequence produces.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -123,7 +123,7 @@ extension AsyncDropFirstSequence: AsyncSequence {
/// iterator returns `nil`. After reaching the number of elements to drop,
/// this iterator passes along the result of calling `next(isolation:)` on
/// the base iterator.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
var remainingToDrop = count
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncDropWhileSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ extension AsyncDropWhileSequence: AsyncSequence {
///
/// The drop-while sequence produces whatever type of error its base
/// sequence produces.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -136,7 +136,7 @@ extension AsyncDropWhileSequence: AsyncSequence {
/// method returns that value. After that, the iterator returns values
/// received from its base iterator as-is, and never executes the predicate
/// closure again.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
while let predicate = self.predicate {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncFilterSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ extension AsyncFilterSequence: AsyncSequence {
///
/// The filter sequence produces whatever type of error its
/// base sequence does.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -121,7 +121,7 @@ extension AsyncFilterSequence: AsyncSequence {
/// `next(isolation:)` evaluates the result with the `predicate` closure. If
/// the closure returns `true`, `next(isolation:)` returns the received
/// element; otherwise it awaits the next element from the base iterator.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
while true {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncFlatMapSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ extension AsyncFlatMapSequence: AsyncSequence {
/// sequence. By construction, the sequence produced by the `transform`
/// closure must either produce this type of error or not produce errors
/// at all.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -275,7 +275,7 @@ extension AsyncFlatMapSequence: AsyncSequence {
/// from this iterator until it terminates. At this point,
/// `next(isolation:)` is ready to receive the next value from the base
/// sequence.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> SegmentOfResult.Element? {
while !finished {
Expand Down
6 changes: 3 additions & 3 deletions stdlib/public/Concurrency/AsyncIteratorProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public protocol AsyncIteratorProtocol<Element, Failure> {
associatedtype Element

/// The type of failure produced by iteration.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
associatedtype Failure: Error = any Error

/// Asynchronously advances to the next element and returns it, or ends the
Expand All @@ -105,15 +105,15 @@ public protocol AsyncIteratorProtocol<Element, Failure> {
///
/// - Returns: The next element, if it exists, or `nil` to signal the end of
/// the sequence.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Element?
}

@available(SwiftStdlib 5.1, *)
extension AsyncIteratorProtocol {
/// Default implementation of `next()` in terms of `next()`, which is
/// required to maintain backward compatibility with existing async iterators.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Element? {
do {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncMapSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ extension AsyncMapSequence: AsyncSequence {
///
/// The map sequence produces whatever type of error its
/// base sequence does.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -124,7 +124,7 @@ extension AsyncMapSequence: AsyncSequence {
/// call returns `nil`, `next(isolation:)` returns `nil`. Otherwise,
/// `next(isolation:)` returns the result of calling the transforming
/// closure on the received element.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Transformed? {
guard let element = try await baseIterator.next(isolation: actor) else {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncPrefixSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ extension AsyncPrefixSequence: AsyncSequence {
///
/// The prefix sequence produces whatever type of error its
/// base sequence does.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -115,7 +115,7 @@ extension AsyncPrefixSequence: AsyncSequence {
/// `next(isolation:)` on its base iterator and passes through the
/// result. After reaching the maximum number of elements, subsequent calls
/// to `next(isolation:)` return `nil`.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
if remaining != 0 {
Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncPrefixWhileSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ extension AsyncPrefixWhileSequence: AsyncSequence {
///
/// The prefix-while sequence produces whatever type of error its
/// base sequence does.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public typealias Failure = Base.Failure
/// The type of iterator that produces elements of the sequence.
public typealias AsyncIterator = Iterator
Expand Down Expand Up @@ -127,7 +127,7 @@ extension AsyncPrefixWhileSequence: AsyncSequence {
/// from the base sequence and calls the predicate with it. If this call
/// succeeds, this method passes along the element. Otherwise, it returns
/// `nil`, ending the sequence.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
if !predicateHasFailed, let nextElement = try await baseIterator.next(isolation: actor) {
Expand Down
2 changes: 1 addition & 1 deletion stdlib/public/Concurrency/AsyncSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public protocol AsyncSequence<Element, Failure> {
associatedtype Element

/// The type of errors produced when iteration over the sequence fails.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
associatedtype Failure: Error = AsyncIterator.Failure
where AsyncIterator.Failure == Failure

Expand Down
4 changes: 2 additions & 2 deletions stdlib/public/Concurrency/AsyncStream.swift
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ extension AsyncStream: AsyncSequence {
/// is awaiting a value, the `AsyncStream` terminates. In this case,
/// `next()` might return `nil` immediately, or return `nil` on
/// subsequent calls.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
public mutating func next(isolation actor: isolated (any Actor)?) async -> Element? {
await context.produce()
}
Expand Down Expand Up @@ -549,7 +549,7 @@ extension AsyncStream {
fatalError("Unavailable in task-to-thread concurrency model")
}

@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@available(*, unavailable, message: "Unavailable in task-to-thread concurrency model")
public mutating func next(isolation actor: isolated (any Actor)?) async -> Element? {
fatalError("Unavailable in task-to-thread concurrency model")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ extension AsyncThrowingCompactMapSequence: AsyncSequence {
/// this method continues to wait for further elements until it gets one
/// that transforms to a non-`nil` value. If calling the closure throws an
/// error, the sequence ends and `next()` rethrows the error.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> ElementOfResult? {
while !finished {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ extension AsyncThrowingDropWhileSequence: AsyncSequence {
/// received from its base iterator as-is, and never executes the predicate
/// closure again. If calling the closure throws an error, the sequence
/// ends and `next(isolation:)` rethrows the error.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
while !finished && !doneDropping {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ extension AsyncThrowingFilterSequence: AsyncSequence {
/// otherwise it awaits the next element from the base iterator. If calling
/// the closure throws an error, the sequence ends and `next(isolation:)`
/// rethrows the error.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Base.Element? {
while !finished {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ extension AsyncThrowingFlatMapSequence: AsyncSequence {
/// from this iterator until it terminates. At this point,
/// `next(isolation:)` is ready to receive the next value from the base
/// sequence. If `transform` throws an error, the sequence terminates.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> SegmentOfResult.Element? {
while !finished {
Expand Down
2 changes: 1 addition & 1 deletion stdlib/public/Concurrency/AsyncThrowingMapSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ extension AsyncThrowingMapSequence: AsyncSequence {
/// `next(isolation:)` returns the result of calling the transforming
/// closure on the received element. If calling the closure throws an error,
/// the sequence ends and `next(isolation:)` rethrows the error.
@available(SwiftStdlib 5.11, *)
@available(SwiftStdlib 6.0, *)
@inlinable
public mutating func next(isolation actor: isolated (any Actor)?) async throws(Failure) -> Transformed? {
guard !finished, let element = try await baseIterator.next(isolation: actor) else {
Expand Down
Loading