@@ -38,12 +38,25 @@ pub struct ExecuteData {
38
38
}
39
39
40
40
impl ExecuteData {
41
+ /// # Safety
42
+ ///
43
+ /// Create from raw pointer.
44
+ #[ inline]
45
+ pub unsafe fn from_ptr < ' a > ( ptr : * const zend_execute_data ) -> & ' a Self {
46
+ ( ptr as * const Self ) . as_ref ( ) . expect ( "ptr should't be null" )
47
+ }
48
+
49
+ #[ inline]
50
+ pub fn as_ptr ( & self ) -> * const zend_execute_data {
51
+ & self . inner
52
+ }
53
+
41
54
/// # Safety
42
55
///
43
56
/// Create from raw pointer.
44
57
#[ inline]
45
58
pub unsafe fn from_mut_ptr < ' a > ( ptr : * mut zend_execute_data ) -> & ' a mut Self {
46
- & mut * ( ptr as * mut Self )
59
+ ( ptr as * mut Self ) . as_mut ( ) . expect ( "ptr should't be null" )
47
60
}
48
61
49
62
#[ inline]
@@ -55,32 +68,29 @@ impl ExecuteData {
55
68
///
56
69
/// Get value from union.
57
70
#[ inline]
58
- pub unsafe fn common_num_args ( & self ) -> u32 {
59
- ( * self . inner . func ) . common . num_args
71
+ pub fn common_num_args ( & self ) -> u32 {
72
+ unsafe { ( * self . inner . func ) . common . num_args }
60
73
}
61
74
62
75
/// # Safety
63
76
///
64
77
/// Get value from union.
65
78
#[ inline]
66
- pub unsafe fn common_required_num_args ( & self ) -> u16 {
67
- ( * self . inner . func ) . common . required_num_args as u16
79
+ pub fn common_required_num_args ( & self ) -> u16 {
80
+ unsafe { ( * self . inner . func ) . common . required_num_args as u16 }
68
81
}
69
82
70
83
/// # Safety
71
84
///
72
85
/// Get value from union.
73
86
#[ inline]
74
- pub unsafe fn common_arg_info ( & self ) -> * mut zend_arg_info {
75
- ( * self . inner . func ) . common . arg_info
87
+ pub fn common_arg_info ( & self ) -> * mut zend_arg_info {
88
+ unsafe { ( * self . inner . func ) . common . arg_info }
76
89
}
77
90
78
- /// # Safety
79
- ///
80
- /// Get value from union.
81
91
#[ inline]
82
- pub unsafe fn num_args ( & self ) -> u16 {
83
- self . inner . This . u2 . num_args as u16
92
+ pub fn num_args ( & self ) -> usize {
93
+ unsafe { phper_zend_num_args ( self . as_ptr ( ) ) . try_into ( ) . unwrap ( ) }
84
94
}
85
95
86
96
/// # Safety
@@ -103,14 +113,14 @@ impl ExecuteData {
103
113
let num_args = self . num_args ( ) ;
104
114
let mut arguments = vec ! [ zeroed:: <zval>( ) ; num_args as usize ] ;
105
115
if num_args > 0 {
106
- _zend_get_parameters_array_ex ( num_args. into ( ) , arguments. as_mut_ptr ( ) ) ;
116
+ _zend_get_parameters_array_ex ( num_args. try_into ( ) . unwrap ( ) , arguments. as_mut_ptr ( ) ) ;
107
117
}
108
118
transmute ( arguments)
109
119
}
110
120
111
121
pub fn get_parameter ( & mut self , index : usize ) -> & mut ZVal {
112
122
unsafe {
113
- let val = phper_execute_data_call_arg ( self . as_mut_ptr ( ) , index as c_int ) ;
123
+ let val = phper_zend_call_arg ( self . as_mut_ptr ( ) , index as c_int ) ;
114
124
ZVal :: from_mut_ptr ( val)
115
125
}
116
126
}
0 commit comments