@@ -124,7 +124,7 @@ mod ivar_encode;
124124mod ivar_forwarding_impls;
125125
126126use alloc:: format;
127- use alloc :: string :: ToString ;
127+ use core :: ffi :: CStr ;
128128use core:: mem;
129129use core:: mem:: ManuallyDrop ;
130130use core:: ptr;
@@ -550,17 +550,11 @@ impl ClassBuilder {
550550 /// happens if there already was an ivar with that name.
551551 pub fn add_ivar < T : Encode > ( & mut self , name : & str ) {
552552 // SAFETY: The encoding is correct
553- unsafe { self . add_ivar_inner :: < T > ( name, & T :: ENCODING ) }
553+ unsafe { self . add_ivar_inner :: < T > ( name, & T :: ENCODING_CSTR ) }
554554 }
555555
556556 // Monomorphized version
557- unsafe fn add_ivar_inner_mono (
558- & mut self ,
559- name : & str ,
560- size : usize ,
561- align : u8 ,
562- encoding : & Encoding ,
563- ) {
557+ unsafe fn add_ivar_inner_mono ( & mut self , name : & str , size : usize , align : u8 , encoding : & CStr ) {
564558 // `class_addIvar` sadly doesn't check this for us.
565559 //
566560 // We must _always_ do the check, since there is no way for the user
@@ -575,7 +569,6 @@ impl ClassBuilder {
575569 }
576570
577571 let c_name = CString :: new ( name) . unwrap ( ) ;
578- let encoding = CString :: new ( encoding. to_string ( ) ) . unwrap ( ) ;
579572 let success = Bool :: from_raw ( unsafe {
580573 ffi:: class_addIvar (
581574 self . as_mut_ptr ( ) ,
@@ -588,7 +581,7 @@ impl ClassBuilder {
588581 assert ! ( success. as_bool( ) , "failed to add ivar {name}" ) ;
589582 }
590583
591- unsafe fn add_ivar_inner < T > ( & mut self , name : & str , encoding : & Encoding ) {
584+ unsafe fn add_ivar_inner < T > ( & mut self , name : & str , encoding : & CStr ) {
592585 unsafe { self . add_ivar_inner_mono ( name, mem:: size_of :: < T > ( ) , T :: LOG2_ALIGNMENT , encoding) }
593586 }
594587
@@ -600,7 +593,7 @@ impl ClassBuilder {
600593 /// Same as [`ClassBuilder::add_ivar`].
601594 pub fn add_static_ivar < T : IvarType > ( & mut self ) {
602595 // SAFETY: The encoding is correct
603- unsafe { self . add_ivar_inner :: < T :: Type > ( T :: NAME , & T :: Type :: ENCODING ) }
596+ unsafe { self . add_ivar_inner :: < T :: Type > ( T :: NAME , & T :: Type :: ENCODING_CSTR ) }
604597 }
605598
606599 /// Adds the given protocol to self.
0 commit comments