@@ -12,37 +12,43 @@ import Builtin
12
12
13
13
struct BufferView : ~ Escapable {
14
14
let ptr : UnsafeRawBufferPointer
15
+ let c : Int
15
16
@_unsafeNonescapableResult
16
- init ( _ ptr: UnsafeRawBufferPointer ) {
17
+ init ( _ ptr: UnsafeRawBufferPointer , _ c : Int ) {
17
18
self . ptr = ptr
19
+ self . c = c
18
20
}
19
21
// CHECK: sil hidden @$s28implicit_lifetime_dependence10BufferViewVyA2ChYlscfC : $@convention(method) (@guaranteed BufferView, @thin BufferView.Type) -> _scope(1) @owned BufferView {
20
22
init ( _ otherBV: borrowing BufferView ) {
21
23
self . ptr = otherBV. ptr
24
+ self . c = otherBV. c
22
25
}
23
26
// CHECK: sil hidden @$s28implicit_lifetime_dependence10BufferViewVyA2CYlicfC : $@convention(method) (@owned BufferView, @thin BufferView.Type) -> _inherit(1) @owned BufferView {
24
27
init ( _ otherBV: consuming BufferView ) {
25
28
self . ptr = otherBV. ptr
29
+ self . c = otherBV. c
26
30
}
27
31
// CHECK: sil hidden @$s28implicit_lifetime_dependence10BufferViewVyACSWYls_SaySiGhtcfC : $@convention(method) (UnsafeRawBufferPointer, @guaranteed Array<Int>, @thin BufferView.Type) -> _scope(1) @owned BufferView {
28
32
init ( _ ptr: UnsafeRawBufferPointer , _ a: borrowing Array < Int > ) {
29
33
self . ptr = ptr
34
+ self . c = a. count
30
35
}
31
36
}
32
37
33
38
struct MutableBufferView : ~ Escapable, ~ Copyable {
34
39
let ptr : UnsafeMutableRawBufferPointer
40
+ let c : Int
35
41
@_unsafeNonescapableResult
36
- init ( _ ptr: UnsafeMutableRawBufferPointer ) {
42
+ init ( _ ptr: UnsafeMutableRawBufferPointer , _ c : Int ) {
37
43
self . ptr = ptr
44
+ self . c = c
38
45
}
39
46
}
40
47
41
48
func testBasic( ) {
42
- let capacity = 4
43
- let a = Array ( 0 ..< capacity)
49
+ let a = [ Int] ( repeating: 0 , count: 4 )
44
50
a. withUnsafeBytes {
45
- let view = BufferView ( $0)
51
+ let view = BufferView ( $0, a . count )
46
52
let derivedView = derive ( view)
47
53
let newView = consumeAndCreate ( derivedView)
48
54
use ( newView)
@@ -51,42 +57,62 @@ func testBasic() {
51
57
52
58
// CHECK: sil hidden @$s28implicit_lifetime_dependence6deriveyAA10BufferViewVADYlsF : $@convention(thin) (@guaranteed BufferView) -> _scope(1) @owned BufferView {
53
59
func derive( _ x: borrowing BufferView ) -> BufferView {
54
- return BufferView ( x. ptr)
60
+ return BufferView ( x. ptr, x . c )
55
61
}
56
62
57
63
// CHECK: sil hidden @$s28implicit_lifetime_dependence16consumeAndCreateyAA10BufferViewVADnYliF : $@convention(thin) (@owned BufferView) -> _inherit(1) @owned BufferView {
58
64
func consumeAndCreate( _ x: consuming BufferView ) -> BufferView {
59
- return BufferView ( x. ptr)
65
+ return BufferView ( x. ptr, x . c )
60
66
}
61
67
62
68
func use( _ x: borrowing BufferView ) { }
63
69
64
70
struct Wrapper : ~ Escapable {
65
- let view : BufferView
71
+ var _view : BufferView
72
+ var view : BufferView {
73
+ // CHECK: sil hidden @$s28implicit_lifetime_dependence7WrapperV4viewAA10BufferViewVvr : $@yield_once @convention(method) (@guaranteed Wrapper) -> _scope(0) @yields @guaranteed BufferView {
74
+ _read {
75
+ yield _view
76
+ }
77
+ // CHECK: sil hidden @$s28implicit_lifetime_dependence7WrapperV4viewAA10BufferViewVvM : $@yield_once @convention(method) (@inout Wrapper) -> _scope(0) @yields @inout BufferView {
78
+ _modify {
79
+ yield & _view
80
+ }
81
+ }
66
82
// CHECK: sil hidden @$s28implicit_lifetime_dependence7WrapperVyAcA10BufferViewVYlicfC : $@convention(method) (@owned BufferView, @thin Wrapper.Type) -> _inherit(1) @owned Wrapper {
67
83
init ( _ view: consuming BufferView ) {
68
- self . view = view
84
+ self . _view = view
69
85
}
70
86
// CHECK: sil hidden @$s28implicit_lifetime_dependence7WrapperV8getView1AA10BufferViewVyYLsF : $@convention(method) (@guaranteed Wrapper) -> _scope(0) @owned BufferView {
71
87
borrowing func getView1( ) -> BufferView {
72
- return view
88
+ return _view
73
89
}
74
90
75
91
// CHECK:sil hidden @$s28implicit_lifetime_dependence7WrapperV8getView2AA10BufferViewVyYLiF : $@convention(method) (@owned Wrapper) -> _inherit(0) @owned BufferView {
76
92
consuming func getView2( ) -> BufferView {
77
- return view
93
+ return _view
78
94
}
79
95
}
80
96
81
- struct Container : ~ Copyable {
82
- var ptr : UnsafeRawBufferPointer
83
- // CHECK: sil hidden @$s28implicit_lifetime_dependence9ContainerV4viewAA10BufferViewVvg : $@convention(method) (@guaranteed Container) -> _scope(0) @owned BufferView {
97
+ struct Container1 : ~ Copyable {
98
+ let ptr : UnsafeRawBufferPointer
99
+ let c : Int
100
+ // CHECK: sil hidden @$s28implicit_lifetime_dependence10Container1V4viewAA10BufferViewVvg : $@convention(method) (@guaranteed Container1) -> _scope(0) @owned BufferView {
84
101
var view : BufferView {
85
102
get {
86
- return BufferView ( ptr)
103
+ return BufferView ( ptr, c )
87
104
}
88
- set ( newView) {
89
- ptr = newView. ptr
105
+ }
106
+ }
107
+
108
+ struct Container2 : ~ Copyable {
109
+ let ptr : UnsafeMutableRawBufferPointer
110
+ let c : Int
111
+ // CHECK: sil hidden @$s28implicit_lifetime_dependence10Container2V11mutableViewAA013MutableBufferF0Vvr : $@yield_once @convention(method) (@guaranteed Container2) -> _scope(0) @yields @guaranteed MutableBufferView {
112
+ var mutableView : MutableBufferView {
113
+ _read {
114
+ yield MutableBufferView ( ptr, c)
90
115
}
91
116
}
92
117
}
118
+
0 commit comments