@@ -30,7 +30,7 @@ unsafe fn from_refs<A: INSArray + ?Sized>(refs: &[&A::Item]) -> Id<A, A::Ownersh
3030
3131pub unsafe trait INSArray : INSObject {
3232 type Ownership : Ownership ;
33- type Item : INSObject ;
33+ type Item : INSObject + ? Sized ;
3434 type ItemOwnership : Ownership ;
3535
3636 unsafe_def_fn ! ( fn new -> Self :: Ownership ) ;
@@ -169,7 +169,7 @@ object!(
169169 /// TODO: Can we make it impossible? Should we?
170170 ///
171171 /// What about `Id<NSArray<T, Shared>, Owned>`?
172- unsafe pub struct NSArray <T , O : Ownership > {
172+ unsafe pub struct NSArray <T : ? Sized , O : Ownership > {
173173 item: PhantomData <Id <T , O >>,
174174 }
175175) ;
@@ -179,22 +179,22 @@ object!(
179179// The `PhantomData` can't get these impls to display in the docs.
180180//
181181// TODO: Properly verify this
182- unsafe impl < T : Sync + Send > Sync for NSArray < T , Shared > { }
183- unsafe impl < T : Sync + Send > Send for NSArray < T , Shared > { }
184- unsafe impl < T : Sync > Sync for NSArray < T , Owned > { }
185- unsafe impl < T : Send > Send for NSArray < T , Owned > { }
182+ unsafe impl < T : Sync + Send + ? Sized > Sync for NSArray < T , Shared > { }
183+ unsafe impl < T : Sync + Send + ? Sized > Send for NSArray < T , Shared > { }
184+ unsafe impl < T : Sync + ? Sized > Sync for NSArray < T , Owned > { }
185+ unsafe impl < T : Send + ? Sized > Send for NSArray < T , Owned > { }
186186
187187/// ```compile_fail
188188/// use objc2::rc::Shared;
189189/// use objc2::runtime::Object;
190190/// use objc2_foundation::NSArray;
191- /// fn needs_send_sync<T: Send + Sync>() {}
191+ /// fn needs_send_sync<T: Send + Sync + ?Sized >() {}
192192/// needs_send_sync::<NSArray<Object, Shared>>();
193193/// ```
194194#[ cfg( doctest) ]
195195pub struct NSArrayWithObjectNotSendSync ;
196196
197- unsafe impl < T : INSObject , O : Ownership > INSArray for NSArray < T , O > {
197+ unsafe impl < T : INSObject + ? Sized , O : Ownership > INSArray for NSArray < T , O > {
198198 /// The `NSArray` itself (length and number of items) is always immutable,
199199 /// but we would like to know when we're the only owner of the array, to
200200 /// allow mutation of the array's items.
@@ -208,20 +208,20 @@ unsafe impl<T: INSObject, O: Ownership> INSArray for NSArray<T, O> {
208208
209209// Copying only possible when ItemOwnership = Shared
210210
211- unsafe impl < T : INSObject > INSCopying for NSArray < T , Shared > {
211+ unsafe impl < T : INSObject + ? Sized > INSCopying for NSArray < T , Shared > {
212212 type Ownership = Shared ;
213213 type Output = NSArray < T , Shared > ;
214214}
215215
216- unsafe impl < T : INSObject > INSMutableCopying for NSArray < T , Shared > {
216+ unsafe impl < T : INSObject + ? Sized > INSMutableCopying for NSArray < T , Shared > {
217217 type Output = NSMutableArray < T , Shared > ;
218218}
219219
220- unsafe impl < T : INSObject , O : Ownership > INSFastEnumeration for NSArray < T , O > {
220+ unsafe impl < T : INSObject + ? Sized , O : Ownership > INSFastEnumeration for NSArray < T , O > {
221221 type Item = T ;
222222}
223223
224- impl < T : INSObject , O : Ownership > Index < usize > for NSArray < T , O > {
224+ impl < T : INSObject + ? Sized , O : Ownership > Index < usize > for NSArray < T , O > {
225225 type Output = T ;
226226
227227 fn index ( & self , index : usize ) -> & T {
@@ -306,7 +306,7 @@ pub unsafe trait INSMutableArray: INSArray {
306306 where
307307 F : FnMut ( & Self :: Item , & Self :: Item ) -> Ordering ,
308308 {
309- extern "C" fn compare_with_closure < T , F : FnMut ( & T , & T ) -> Ordering > (
309+ extern "C" fn compare_with_closure < T : ? Sized , F : FnMut ( & T , & T ) -> Ordering > (
310310 obj1 : & T ,
311311 obj2 : & T ,
312312 context : * mut c_void ,
@@ -334,43 +334,43 @@ pub unsafe trait INSMutableArray: INSArray {
334334}
335335
336336object ! (
337- unsafe pub struct NSMutableArray <T , O : Ownership > {
337+ unsafe pub struct NSMutableArray <T : ? Sized , O : Ownership > {
338338 item: PhantomData <Id <T , O >>,
339339 }
340340) ;
341341
342342// SAFETY: Same as NSArray.
343343//
344344// TODO: Properly verify this
345- unsafe impl < T : Sync + Send > Sync for NSMutableArray < T , Shared > { }
346- unsafe impl < T : Sync + Send > Send for NSMutableArray < T , Shared > { }
347- unsafe impl < T : Sync > Sync for NSMutableArray < T , Owned > { }
348- unsafe impl < T : Send > Send for NSMutableArray < T , Owned > { }
345+ unsafe impl < T : Sync + Send + ? Sized > Sync for NSMutableArray < T , Shared > { }
346+ unsafe impl < T : Sync + Send + ? Sized > Send for NSMutableArray < T , Shared > { }
347+ unsafe impl < T : Sync + ? Sized > Sync for NSMutableArray < T , Owned > { }
348+ unsafe impl < T : Send + ? Sized > Send for NSMutableArray < T , Owned > { }
349349
350- unsafe impl < T : INSObject , O : Ownership > INSArray for NSMutableArray < T , O > {
350+ unsafe impl < T : INSObject + ? Sized , O : Ownership > INSArray for NSMutableArray < T , O > {
351351 type Ownership = Owned ;
352352 type Item = T ;
353353 type ItemOwnership = O ;
354354}
355355
356- unsafe impl < T : INSObject , O : Ownership > INSMutableArray for NSMutableArray < T , O > { }
356+ unsafe impl < T : INSObject + ? Sized , O : Ownership > INSMutableArray for NSMutableArray < T , O > { }
357357
358358// Copying only possible when ItemOwnership = Shared
359359
360- unsafe impl < T : INSObject > INSCopying for NSMutableArray < T , Shared > {
360+ unsafe impl < T : INSObject + ? Sized > INSCopying for NSMutableArray < T , Shared > {
361361 type Ownership = Shared ;
362362 type Output = NSArray < T , Shared > ;
363363}
364364
365- unsafe impl < T : INSObject > INSMutableCopying for NSMutableArray < T , Shared > {
365+ unsafe impl < T : INSObject + ? Sized > INSMutableCopying for NSMutableArray < T , Shared > {
366366 type Output = NSMutableArray < T , Shared > ;
367367}
368368
369- unsafe impl < T : INSObject , O : Ownership > INSFastEnumeration for NSMutableArray < T , O > {
369+ unsafe impl < T : INSObject + ? Sized , O : Ownership > INSFastEnumeration for NSMutableArray < T , O > {
370370 type Item = T ;
371371}
372372
373- impl < T : INSObject , O : Ownership > Index < usize > for NSMutableArray < T , O > {
373+ impl < T : INSObject + ? Sized , O : Ownership > Index < usize > for NSMutableArray < T , O > {
374374 type Output = T ;
375375
376376 fn index ( & self , index : usize ) -> & T {
@@ -571,7 +571,7 @@ mod tests {
571571
572572 #[ test]
573573 fn test_send_sync ( ) {
574- fn assert_send_sync < T : Send + Sync > ( ) { }
574+ fn assert_send_sync < T : Send + Sync + ? Sized > ( ) { }
575575
576576 assert_send_sync :: < NSArray < NSString , Shared > > ( ) ;
577577 assert_send_sync :: < NSMutableArray < NSString , Shared > > ( ) ;
0 commit comments