Skip to content

Commit be89cc2

Browse files
committed
Make ClassDecl::add_method methods unsafe.
Fixes #18.
1 parent 0fba652 commit be89cc2

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

examples/custom_class.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,15 @@ pub enum MYObject { }
1313

1414
impl MYObject {
1515
fn number(&self) -> u32 {
16-
let obj = unsafe {
17-
&*(self as *const _ as *const Object)
18-
};
1916
unsafe {
17+
let obj = &*(self as *const _ as *const Object);
2018
*obj.get_ivar("_number")
2119
}
2220
}
2321

2422
fn set_number(&mut self, number: u32) {
25-
let obj = unsafe {
26-
&mut *(self as *mut _ as *mut Object)
27-
};
2823
unsafe {
24+
let obj = &mut *(self as *mut _ as *mut Object);
2925
obj.set_ivar("_number", number);
3026
}
3127
}
@@ -43,17 +39,20 @@ impl INSObject for MYObject {
4339
decl.add_ivar::<u32>("_number");
4440

4541
// Add ObjC methods for getting and setting the number
46-
extern fn my_object_set_number(this: &mut MYObject, _cmd: Sel, number: u32) {
47-
this.set_number(number);
42+
extern fn my_object_set_number(this: &mut Object, _cmd: Sel, number: u32) {
43+
unsafe { this.set_ivar("_number", number); }
4844
}
49-
decl.add_method(sel!(setNumber:),
50-
my_object_set_number as extern fn(&mut MYObject, Sel, u32));
5145

52-
extern fn my_object_get_number(this: &MYObject, _cmd: Sel) -> u32 {
53-
this.number()
46+
extern fn my_object_get_number(this: &Object, _cmd: Sel) -> u32 {
47+
unsafe { *this.get_ivar("_number") }
48+
}
49+
50+
unsafe {
51+
decl.add_method(sel!(setNumber:),
52+
my_object_set_number as extern fn(&mut Object, Sel, u32));
53+
decl.add_method(sel!(number),
54+
my_object_get_number as extern fn(&Object, Sel) -> u32);
5455
}
55-
decl.add_method(sel!(number),
56-
my_object_get_number as extern fn(&MYObject, Sel) -> u32);
5756

5857
decl.register();
5958
});

0 commit comments

Comments
 (0)