@@ -75,6 +75,23 @@ impl<T: ?Sized + Message, O: Ownership> MsgSendId<&'_ Class, Id<T, O>>
75
75
}
76
76
}
77
77
78
+ // Super: `new`, TODO: Can this ever happen?
79
+ impl < T : ?Sized + Message , O : Ownership > MsgSendSuperId < & ' _ Class , Id < T , O > >
80
+ for RetainSemantics < true , false , false , false >
81
+ {
82
+ #[ inline( always) ]
83
+ unsafe fn send_super_message_id < A : MessageArguments > (
84
+ obj : & Class ,
85
+ superclass : & Class ,
86
+ sel : Sel ,
87
+ args : A ,
88
+ ) -> Result < Option < Id < T , O > > , MessageError > {
89
+ unsafe {
90
+ MessageReceiver :: send_super_message ( obj, superclass, sel, args) . map ( |r| Id :: new ( r) )
91
+ }
92
+ }
93
+ }
94
+
78
95
// `alloc`, should mark the return value as "allocated, not initialized" somehow
79
96
impl < T : ?Sized + Message , O : Ownership > MsgSendId < & ' _ Class , Id < T , O > >
80
97
for RetainSemantics < false , true , false , false >
@@ -89,6 +106,23 @@ impl<T: ?Sized + Message, O: Ownership> MsgSendId<&'_ Class, Id<T, O>>
89
106
}
90
107
}
91
108
109
+ // Super: `alloc`, TODO: Can this ever happen?
110
+ impl < T : ?Sized + Message , O : Ownership > MsgSendSuperId < & ' _ Class , Id < T , O > >
111
+ for RetainSemantics < false , true , false , false >
112
+ {
113
+ #[ inline( always) ]
114
+ unsafe fn send_super_message_id < A : MessageArguments > (
115
+ cls : & Class ,
116
+ superclass : & Class ,
117
+ sel : Sel ,
118
+ args : A ,
119
+ ) -> Result < Option < Id < T , O > > , MessageError > {
120
+ unsafe {
121
+ MessageReceiver :: send_super_message ( cls, superclass, sel, args) . map ( |r| Id :: new ( r) )
122
+ }
123
+ }
124
+ }
125
+
92
126
// `init`, should mark the input value as "allocated, not initialized" somehow
93
127
impl < T : ?Sized + Message , O : Ownership > MsgSendId < Option < Id < T , O > > , Id < T , O > >
94
128
for RetainSemantics < false , false , true , false >
@@ -145,6 +179,23 @@ impl<T: MessageReceiver, U: ?Sized + Message, O: Ownership> MsgSendId<T, Id<U, O
145
179
}
146
180
}
147
181
182
+ // Super: `copy` and `mutableCopy`. TODO: Will this ever happen?
183
+ impl < T : MessageReceiver , U : ?Sized + Message , O : Ownership > MsgSendSuperId < T , Id < U , O > >
184
+ for RetainSemantics < false , false , false , true >
185
+ {
186
+ #[ inline( always) ]
187
+ unsafe fn send_super_message_id < A : MessageArguments > (
188
+ obj : T ,
189
+ superclass : & Class ,
190
+ sel : Sel ,
191
+ args : A ,
192
+ ) -> Result < Option < Id < U , O > > , MessageError > {
193
+ unsafe {
194
+ MessageReceiver :: send_super_message ( obj, superclass, sel, args) . map ( |r| Id :: new ( r) )
195
+ }
196
+ }
197
+ }
198
+
148
199
// All other selectors
149
200
impl < T : MessageReceiver , U : Message , O : Ownership > MsgSendId < T , Id < U , O > >
150
201
for RetainSemantics < false , false , false , false >
@@ -334,17 +385,25 @@ mod tests {
334
385
}
335
386
336
387
#[ test]
388
+ #[ ignore = "TMP" ]
337
389
fn test_msg_send_super_id ( ) {
338
390
// We send the messages to the class itself instead of it's actual
339
391
// superclass, just to verify that the macro works.
340
392
// TODO: Better solution!
341
393
let cls = class ! ( NSObject ) ;
342
394
343
- let obj = unsafe { msg_send_id ! [ cls, alloc] } ;
395
+ let _obj: Id < Object , Owned > = unsafe { msg_send_id ! [ super ( cls, cls) , new] . unwrap ( ) } ;
396
+
397
+ let obj = unsafe { msg_send_id ! [ super ( cls, cls) , alloc] } ;
344
398
345
399
let obj = obj. unwrap ( ) ; // Required on super
346
400
let obj: Id < Object , Owned > = unsafe { msg_send_id ! [ super ( obj, cls) , init] . unwrap ( ) } ;
347
401
402
+ let _copy: Id < Object , Shared > = unsafe { msg_send_id ! [ super ( & obj, cls) , copy] . unwrap ( ) } ;
403
+
404
+ let _mutable_copy: Id < Object , Shared > =
405
+ unsafe { msg_send_id ! [ super ( & obj, cls) , mutableCopy] . unwrap ( ) } ;
406
+
348
407
let _desc: Option < Id < Object , Shared > > =
349
408
unsafe { msg_send_id ! [ super ( & obj, cls) , description] } ;
350
409
}
0 commit comments