@@ -4,7 +4,7 @@ use crate::{
4
4
builders:: FunctionBuilder ,
5
5
convert:: IntoZval ,
6
6
describe:: DocComments ,
7
- enum_:: EnumCase ,
7
+ enum_:: { Discriminant , EnumCase } ,
8
8
error:: Result ,
9
9
ffi:: { zend_enum_add_case, zend_register_internal_enum} ,
10
10
flags:: { DataType , MethodFlags } ,
@@ -114,14 +114,7 @@ impl EnumBuilder {
114
114
for case in self . cases {
115
115
let name = ZendStr :: new_interned ( case. name , true ) ;
116
116
let value = match & case. discriminant {
117
- Some ( value) => {
118
- let value: Zval = match value {
119
- crate :: enum_:: Discriminant :: Int ( i) => i. into_zval ( false ) ?,
120
- crate :: enum_:: Discriminant :: String ( s) => s. into_zval ( true ) ?,
121
- } ;
122
- let mut zv = core:: mem:: ManuallyDrop :: new ( value) ;
123
- ( & raw mut zv) . cast ( )
124
- }
117
+ Some ( value) => Self :: create_enum_value ( value) ?,
125
118
None => ptr:: null_mut ( ) ,
126
119
} ;
127
120
unsafe {
@@ -137,6 +130,16 @@ impl EnumBuilder {
137
130
138
131
Ok ( ( ) )
139
132
}
133
+
134
+ fn create_enum_value ( discriminant : & Discriminant ) -> Result < * mut Zval > {
135
+ let value: Zval = match discriminant {
136
+ Discriminant :: Int ( i) => i. into_zval ( false ) ?,
137
+ Discriminant :: String ( s) => s. into_zval ( true ) ?,
138
+ } ;
139
+
140
+ let boxed_value = Box :: new ( value) ;
141
+ Ok ( Box :: into_raw ( boxed_value) . cast ( ) )
142
+ }
140
143
}
141
144
142
145
#[ cfg( test) ]
0 commit comments