Skip to content

Commit a345e3a

Browse files
authored
Merge pull request #83000 from glessard/rdar147780495-OutputSpan-updates-62
[SE-0485, 6.2] OutputSpan and OutputRawSpan
2 parents ba7944b + 2a88f0e commit a345e3a

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
@@ -202,6 +202,8 @@
202202
"Span": [
203203
"MutableRawSpan.swift",
204204
"MutableSpan.swift",
205+
"OutputRawSpan.swift",
206+
"OutputSpan.swift",
205207
"RawSpan.swift",
206208
"Span.swift"
207209
],

stdlib/public/core/InlineArray.swift

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

0 commit comments

Comments
 (0)