Skip to content

Commit fe6a8fa

Browse files
authored
Merge pull request #82866 from glessard/rdar155275054-default-inits-allspans
[stdlib] Default initializers for Span-family types
2 parents 66b8960 + 368f547 commit fe6a8fa

File tree

8 files changed

+34
-7
lines changed

8 files changed

+34
-7
lines changed

stdlib/public/core/Span/MutableRawSpan.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ public struct MutableRawSpan: ~Copyable & ~Escapable {
3333
unsafe _pointer._unsafelyUnwrappedUnchecked
3434
}
3535

36+
@_alwaysEmitIntoClient
37+
@inline(__always)
38+
@lifetime(immortal)
39+
public init() {
40+
unsafe _pointer = nil
41+
_count = 0
42+
}
43+
3644
@unsafe
3745
@_unsafeNonescapableResult
3846
@_alwaysEmitIntoClient

stdlib/public/core/Span/MutableSpan.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ public struct MutableSpan<Element: ~Copyable>
3434
unsafe _pointer._unsafelyUnwrappedUnchecked
3535
}
3636

37+
@_alwaysEmitIntoClient
38+
@inline(__always)
39+
@lifetime(immortal)
40+
public init() {
41+
unsafe _pointer = nil
42+
_count = 0
43+
}
44+
3745
@unsafe
3846
@_unsafeNonescapableResult
3947
@_alwaysEmitIntoClient

stdlib/public/core/Span/RawSpan.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public struct RawSpan: ~Escapable, Copyable, BitwiseCopyable {
5454
@_alwaysEmitIntoClient
5555
@inline(__always)
5656
@lifetime(immortal)
57-
internal init() {
57+
public init() {
5858
unsafe _pointer = nil
5959
_count = 0
6060
}

stdlib/public/core/Span/Span.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public struct Span<Element: ~Copyable>: ~Escapable, Copyable, BitwiseCopyable {
5555
@_alwaysEmitIntoClient
5656
@inline(__always)
5757
@lifetime(immortal)
58-
internal init() {
58+
public init() {
5959
unsafe _pointer = nil
6060
_count = 0
6161
}

test/stdlib/Span/MutableRawSpanTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ suite.test("Basic Initializer")
2929

3030
var s = Array("\(#file)+\(#function)--\(Int.random(in: 1000...9999))".utf8)
3131
s.withUnsafeMutableBytes {
32-
let b = MutableRawSpan(_unsafeBytes: $0)
32+
var b = MutableRawSpan(_unsafeBytes: $0)
3333
expectEqual(b.byteCount, $0.count)
3434
expectFalse(b.isEmpty)
3535
expectEqual(b.byteOffsets, 0..<$0.count)
36+
37+
b = MutableRawSpan()
38+
expectEqual(b.byteCount, 0)
3639
}
3740
}
3841

test/stdlib/Span/MutableSpanTests.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ suite.test("Initialize with ordinary element")
3030
let capacity = 4
3131
var s = (0..<capacity).map({ "\(#file)+\(#function)--\($0)" })
3232
s.withUnsafeMutableBufferPointer {
33-
let b = MutableSpan(_unsafeElements: $0)
34-
let c = b.count
35-
expectEqual(c, $0.count)
33+
var b = MutableSpan(_unsafeElements: $0)
34+
expectEqual(b.count, $0.count)
35+
36+
b = MutableSpan()
37+
expectEqual(b.count, 0)
3638
}
3739
}
3840

test/stdlib/Span/RawSpanTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ suite.test("Initialize with Span<Int>")
3030
let capacity = 4
3131
Array(0..<capacity).withUnsafeBufferPointer {
3232
let intSpan = Span(_unsafeElements: $0)
33-
let span = RawSpan(_elements: intSpan)
33+
var span = RawSpan(_elements: intSpan)
3434
expectEqual(span.byteCount, capacity*MemoryLayout<Int>.stride)
3535
expectFalse(span.isEmpty)
36+
37+
span = RawSpan()
38+
expectTrue(span.isEmpty)
3639
}
3740

3841
let a: [Int] = []

test/stdlib/Span/SpanTests.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ suite.test("Initialize with ordinary element")
120120
let pointer: UnsafeMutablePointer = $0.baseAddress!
121121
span = Span(_unsafeStart: pointer, count: $0.count)
122122
expectEqual(span.count, capacity)
123+
124+
span = Span()
125+
expectEqual(span.count, 0)
123126
}
124127
}
125128

0 commit comments

Comments
 (0)