Skip to content

Commit 57ec738

Browse files
committed
[JSON] 5.7 compatibility
* Add SE-0370 methods * Return concrete type instead of existential (cherry picked from commit 7d41485)
1 parent 5e8205b commit 57ec738

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

Sources/SwiftCompilerPluginMessageHandling/JSON/JSONDecoding.swift

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,7 @@ extension JSONDecoding.UnkeyedContainer: UnkeyedDecodingContainer {
11731173
}
11741174

11751175
@inline(__always)
1176-
mutating func _getOrThrow() throws -> (index: any CodingKey, value: JSONMapValue) {
1176+
mutating func _getOrThrow() throws -> (index: _CodingKey, value: JSONMapValue) {
11771177
let idx = currentIndex
11781178
guard !isAtEnd else {
11791179
throw DecodingError.valueNotFound(
@@ -1314,3 +1314,40 @@ extension JSONDecoding.UnkeyedContainer: UnkeyedDecodingContainer {
13141314
self._currMapIdx = array.startIndex
13151315
}
13161316
}
1317+
1318+
// Compatibility shim for SE-0370
1319+
#if swift(<5.8)
1320+
extension UnsafeMutableBufferPointer {
1321+
fileprivate func initialize(
1322+
fromContentsOf source: some Collection<Element>
1323+
) -> Index {
1324+
let count = source.withContiguousStorageIfAvailable {
1325+
guard let sourceAddress = $0.baseAddress, !$0.isEmpty else {
1326+
return 0
1327+
}
1328+
precondition(
1329+
$0.count <= self.count,
1330+
"buffer cannot contain every element from source."
1331+
)
1332+
baseAddress?.initialize(from: sourceAddress, count: $0.count)
1333+
return $0.count
1334+
}
1335+
if let count {
1336+
return startIndex.advanced(by: count)
1337+
}
1338+
1339+
var (iterator, copied) = self.initialize(from: source)
1340+
precondition(
1341+
iterator.next() == nil,
1342+
"buffer cannot contain every element from source."
1343+
)
1344+
return startIndex.advanced(by: copied)
1345+
}
1346+
1347+
fileprivate func initializeElement(at index: Index, to value: Element) {
1348+
precondition(startIndex <= index && index < endIndex)
1349+
let p = baseAddress!.advanced(by: index)
1350+
p.initialize(to: value)
1351+
}
1352+
}
1353+
#endif

0 commit comments

Comments
 (0)