Skip to content

Commit b72c442

Browse files
authored
Merge pull request #81637 from glessard/rdar147780495-OutputSpan-updates
[SE-0485] OutputSpan and OutputRawSpan
2 parents f895331 + 31235db commit b72c442

19 files changed

+2062
-766
lines changed

Runtimes/Core/core/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ add_library(swiftCore
154154
Span/RawSpan.swift
155155
Span/MutableSpan.swift
156156
Span/MutableRawSpan.swift
157+
Span/OutputSpan.swift
158+
Span/OutputRawSpan.swift
157159
StaticString.swift
158160
StaticPrint.swift
159161
Stride.swift

stdlib/public/core/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ split_embedded_sources(
158158
EMBEDDED Sort.swift
159159
EMBEDDED Span/MutableRawSpan.swift
160160
EMBEDDED Span/MutableSpan.swift
161+
EMBEDDED Span/OutputRawSpan.swift
162+
EMBEDDED Span/OutputSpan.swift
161163
EMBEDDED Span/RawSpan.swift
162164
EMBEDDED Span/Span.swift
163165
EMBEDDED StaticString.swift

stdlib/public/core/GroupInfo.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@
205205
"Span": [
206206
"MutableRawSpan.swift",
207207
"MutableSpan.swift",
208+
"OutputRawSpan.swift",
209+
"OutputSpan.swift",
208210
"RawSpan.swift",
209211
"Span.swift"
210212
],

stdlib/public/core/InlineArray.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,25 @@ extension InlineArray where Element: ~Copyable {
300300
}
301301
#else
302302
fatalError()
303+
#endif
304+
}
305+
306+
@available(SwiftStdlib 6.2, *)
307+
@_alwaysEmitIntoClient
308+
public init<E: Error>(
309+
initializingWith initializer: (inout OutputSpan<Element>) throws(E) -> Void
310+
) throws(E) {
311+
#if $BuiltinEmplaceTypedThrows
312+
_storage = try Builtin.emplace { (rawPtr) throws(E) -> () in
313+
let buffer = unsafe Self._initializationBuffer(start: rawPtr)
314+
_internalInvariant(Self.count == buffer.count)
315+
var output = unsafe OutputSpan(buffer: buffer, initializedCount: 0)
316+
try initializer(&output)
317+
let initialized = unsafe output.finalize(for: buffer)
318+
_precondition(count == initialized, "InlineArray initialization underflow")
319+
}
320+
#else
321+
fatalError()
303322
#endif
304323
}
305324
}

0 commit comments

Comments
 (0)