File tree Expand file tree Collapse file tree 7 files changed +38
-18
lines changed Expand file tree Collapse file tree 7 files changed +38
-18
lines changed Original file line number Diff line number Diff line change @@ -37,12 +37,34 @@ impl<T> EBox<T> {
37
37
Self { ptr : raw }
38
38
}
39
39
40
+ /// Constructs from a raw pointer with cast.
41
+ ///
42
+ /// # Safety
43
+ ///
44
+ /// Make sure the pointer is from `into_raw`, or created from `emalloc`.
45
+ pub ( crate ) unsafe fn from_raw_cast < U > ( raw : * mut U ) -> Self {
46
+ const {
47
+ assert ! ( size_of:: <U >( ) == size_of:: <T >( ) ) ;
48
+ }
49
+ Self { ptr : raw. cast ( ) }
50
+ }
51
+
40
52
/// Consumes and returning a wrapped raw pointer.
41
53
///
42
54
/// Will leak memory.
43
55
pub fn into_raw ( b : EBox < T > ) -> * mut T {
44
56
ManuallyDrop :: new ( b) . ptr
45
57
}
58
+
59
+ /// Consumes and returning a wrapped raw pointer with cast.
60
+ ///
61
+ /// Will leak memory.
62
+ pub ( crate ) fn into_raw_cast < U > ( b : EBox < T > ) -> * mut U {
63
+ const {
64
+ assert ! ( size_of:: <U >( ) == size_of:: <T >( ) ) ;
65
+ }
66
+ ManuallyDrop :: new ( b) . ptr . cast ( )
67
+ }
46
68
}
47
69
48
70
impl < T : fmt:: Debug > fmt:: Debug for EBox < T > {
Original file line number Diff line number Diff line change @@ -356,7 +356,7 @@ impl ToOwned for ZArr {
356
356
unsafe {
357
357
// TODO The source really immutable?
358
358
let dest = phper_zend_array_dup ( self . as_ptr ( ) as * mut _ ) ;
359
- ZArray :: from_raw ( dest. cast ( ) )
359
+ ZArray :: from_raw_cast ( dest)
360
360
}
361
361
}
362
362
}
@@ -369,7 +369,7 @@ impl ToRefOwned for ZArr {
369
369
unsafe {
370
370
phper_zval_arr ( val. as_mut_ptr ( ) , self . as_mut_ptr ( ) ) ;
371
371
phper_z_addref_p ( val. as_mut_ptr ( ) ) ;
372
- ZArray :: from_raw ( val. as_mut_z_arr ( ) . unwrap ( ) . as_mut_ptr ( ) . cast ( ) )
372
+ ZArray :: from_raw_cast ( val. as_mut_z_arr ( ) . unwrap ( ) . as_mut_ptr ( ) )
373
373
}
374
374
}
375
375
}
@@ -395,7 +395,7 @@ impl ZArray {
395
395
pub fn with_capacity ( n : usize ) -> Self {
396
396
unsafe {
397
397
let ptr = phper_zend_new_array ( n. try_into ( ) . unwrap ( ) ) ;
398
- Self :: from_raw ( ptr. cast ( ) )
398
+ Self :: from_raw_cast ( ptr)
399
399
}
400
400
}
401
401
}
Original file line number Diff line number Diff line change @@ -147,7 +147,7 @@ impl ClassEntry {
147
147
// day of debugging time here).
148
148
let mut val = ManuallyDrop :: new ( val) ;
149
149
let ptr = phper_z_obj_p ( val. as_mut_ptr ( ) ) ;
150
- Ok ( ZObject :: from_raw ( ptr. cast ( ) ) )
150
+ Ok ( ZObject :: from_raw_cast ( ptr) )
151
151
}
152
152
}
153
153
}
@@ -334,8 +334,7 @@ impl<T: 'static> StateClass<T> {
334
334
pub fn new_object ( & self , arguments : impl AsMut < [ ZVal ] > ) -> crate :: Result < StateObject < T > > {
335
335
self . as_class_entry ( )
336
336
. new_object ( arguments)
337
- . map ( ZObject :: into_raw)
338
- . map ( |ptr| ptr. cast ( ) )
337
+ . map ( ZObject :: into_raw_cast)
339
338
. map ( StateObject :: < T > :: from_raw_object)
340
339
}
341
340
@@ -345,8 +344,7 @@ impl<T: 'static> StateClass<T> {
345
344
pub fn init_object ( & self ) -> crate :: Result < StateObject < T > > {
346
345
self . as_class_entry ( )
347
346
. init_object ( )
348
- . map ( ZObject :: into_raw)
349
- . map ( |ptr| ptr. cast ( ) )
347
+ . map ( ZObject :: into_raw_cast)
350
348
. map ( StateObject :: < T > :: from_raw_object)
351
349
}
352
350
}
Original file line number Diff line number Diff line change @@ -651,7 +651,7 @@ impl ZFunc {
651
651
pub fn get_function_or_method_name ( & self ) -> ZString {
652
652
unsafe {
653
653
let s = phper_get_function_or_method_name ( self . as_ptr ( ) ) ;
654
- ZString :: from_raw ( s . cast ( ) )
654
+ ZString :: from_raw_cast ( s )
655
655
}
656
656
}
657
657
@@ -890,7 +890,7 @@ pub(crate) fn call_raw_common(call_fn: impl FnOnce(&mut ZVal)) -> crate::Result<
890
890
if !eg ! ( exception) . is_null ( ) {
891
891
#[ allow( static_mut_refs) ]
892
892
let e = ptr:: replace ( & mut eg ! ( exception) , null_mut ( ) ) ;
893
- let obj = ZObject :: from_raw ( e . cast ( ) ) ;
893
+ let obj = ZObject :: from_raw_cast ( e ) ;
894
894
match ThrowObject :: new ( obj) {
895
895
Ok ( e) => return Err ( e. into ( ) ) ,
896
896
Err ( e) => return Err ( e. into ( ) ) ,
Original file line number Diff line number Diff line change @@ -282,7 +282,7 @@ impl ToRefOwned for ZObj {
282
282
unsafe {
283
283
phper_zval_obj ( val. as_mut_ptr ( ) , self . as_mut_ptr ( ) ) ;
284
284
phper_z_addref_p ( val. as_mut_ptr ( ) ) ;
285
- ZObject :: from_raw ( val. as_mut_z_obj ( ) . unwrap ( ) . as_mut_ptr ( ) . cast ( ) )
285
+ ZObject :: from_raw_cast ( val. as_mut_z_obj ( ) . unwrap ( ) . as_mut_ptr ( ) )
286
286
}
287
287
}
288
288
}
@@ -447,7 +447,7 @@ impl<T> StateObject<T> {
447
447
448
448
/// Converts into [ZObject].
449
449
pub fn into_z_object ( self ) -> ZObject {
450
- unsafe { ZObject :: from_raw ( self . into_raw_object ( ) . cast ( ) ) }
450
+ unsafe { ZObject :: from_raw_cast ( self . into_raw_object ( ) ) }
451
451
}
452
452
}
453
453
Original file line number Diff line number Diff line change @@ -175,7 +175,7 @@ impl ToRefOwned for ZStr {
175
175
fn to_ref_owned ( & mut self ) -> Self :: Owned {
176
176
unsafe {
177
177
let ptr = phper_zend_string_copy ( self . as_mut_ptr ( ) ) ;
178
- ZString :: from_raw ( ptr. cast ( ) )
178
+ ZString :: from_raw_cast ( ptr)
179
179
}
180
180
}
181
181
}
@@ -198,7 +198,7 @@ impl ZString {
198
198
s. len ( ) . try_into ( ) . unwrap ( ) ,
199
199
false . into ( ) ,
200
200
) ;
201
- Self :: from_raw ( ptr. cast ( ) )
201
+ Self :: from_raw_cast ( ptr)
202
202
}
203
203
}
204
204
@@ -209,7 +209,7 @@ impl ZString {
209
209
let s = s. as_ref ( ) ;
210
210
let ptr =
211
211
phper_zend_string_init ( s. as_ptr ( ) . cast ( ) , s. len ( ) . try_into ( ) . unwrap ( ) , true . into ( ) ) ;
212
- Self :: from_raw ( ptr. cast ( ) )
212
+ Self :: from_raw_cast ( ptr)
213
213
}
214
214
}
215
215
}
@@ -222,7 +222,7 @@ impl Clone for ZString {
222
222
phper_zstr_len ( self . as_ptr ( ) ) . try_into ( ) . unwrap ( ) ,
223
223
false . into ( ) ,
224
224
) ;
225
- Self :: from_raw ( ZStr :: from_mut_ptr ( ptr. cast ( ) ) )
225
+ Self :: from_raw_cast ( ZStr :: from_mut_ptr ( ptr) )
226
226
}
227
227
}
228
228
}
Original file line number Diff line number Diff line change @@ -736,7 +736,7 @@ impl From<ZString> for ZVal {
736
736
fn from ( s : ZString ) -> Self {
737
737
unsafe {
738
738
let mut val = MaybeUninit :: < ZVal > :: uninit ( ) ;
739
- phper_zval_str ( val. as_mut_ptr ( ) . cast ( ) , ZString :: into_raw ( s ) . cast ( ) ) ;
739
+ phper_zval_str ( val. as_mut_ptr ( ) . cast ( ) , ZString :: into_raw_cast ( s ) ) ;
740
740
val. assume_init ( )
741
741
}
742
742
}
@@ -746,7 +746,7 @@ impl From<ZArray> for ZVal {
746
746
fn from ( arr : ZArray ) -> Self {
747
747
unsafe {
748
748
let mut val = MaybeUninit :: < ZVal > :: uninit ( ) ;
749
- phper_zval_arr ( val. as_mut_ptr ( ) . cast ( ) , ZArray :: into_raw ( arr) . cast ( ) ) ;
749
+ phper_zval_arr ( val. as_mut_ptr ( ) . cast ( ) , ZArray :: into_raw_cast ( arr) ) ;
750
750
val. assume_init ( )
751
751
}
752
752
}
You can’t perform that action at this time.
0 commit comments