@@ -126,8 +126,12 @@ static int zend_jit_ffi_send_val(zend_jit_ctx *jit,
126126 if (opline -> op2 .num - 1 < zend_hash_num_elements (type -> func .args )) {
127127 type = zend_hash_index_find_ptr (type -> func .args , opline -> op2 .num - 1 );
128128 type = ZEND_FFI_TYPE (type );
129+ zend_ffi_type_kind type_kind = type -> kind ;
129130
130- switch (type -> kind ) {
131+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
132+ type_kind = type -> enumeration .kind ;
133+ }
134+ switch (type_kind ) {
131135 case ZEND_FFI_TYPE_FLOAT :
132136 if (op1_info == MAY_BE_LONG ) {
133137 ref = ir_INT2F ((jit_Z_LVAL (jit , op1_addr )));
@@ -304,10 +308,15 @@ static int zend_jit_ffi_do_call(zend_jit_ctx *jit,
304308 uint32_t i , num_args ;
305309 ir_type ret_type = IR_VOID ;
306310 ir_ref ref = IR_UNUSED ;
311+ zend_ffi_type_kind type_kind ;
307312
308313 ZEND_ASSERT (type -> kind == ZEND_FFI_TYPE_FUNC );
309314
310- switch (ZEND_FFI_TYPE (type -> func .ret_type )-> kind ) {
315+ type_kind = ZEND_FFI_TYPE (type -> func .ret_type )-> kind ;
316+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
317+ type_kind = ZEND_FFI_TYPE (type -> func .ret_type )-> enumeration .kind ;
318+ }
319+ switch (type_kind ) {
311320 case ZEND_FFI_TYPE_VOID :
312321 ret_type = IR_VOID ;
313322 break ;
@@ -392,7 +401,11 @@ static int zend_jit_ffi_do_call(zend_jit_ctx *jit,
392401 zend_ffi_type * ret_type = ZEND_FFI_TYPE (type -> func .ret_type );
393402 uint32_t res_type = IS_UNDEF ;
394403
395- switch (ret_type -> kind ) {
404+ type_kind = ret_type -> kind ;
405+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
406+ type_kind = ret_type -> enumeration .kind ;
407+ }
408+ switch (type_kind ) {
396409 case ZEND_FFI_TYPE_VOID :
397410 res_type = IS_NULL ;
398411 break ;
@@ -589,8 +602,12 @@ static int zend_jit_ffi_read(zend_jit_ctx *jit,
589602 zend_jit_addr res_addr )
590603{
591604 uint32_t res_type ;
605+ zend_ffi_type_kind type_kind = ffi_type -> kind ;
592606
593- switch (ffi_type -> kind ) {
607+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
608+ type_kind = ffi_type -> enumeration .kind ;
609+ }
610+ switch (type_kind ) {
594611 case ZEND_FFI_TYPE_FLOAT :
595612 jit_set_Z_DVAL (jit , res_addr , ir_F2D (ir_LOAD_F (ptr )));
596613 res_type = IS_DOUBLE ;
@@ -850,8 +867,12 @@ static int zend_jit_ffi_write(zend_jit_ctx *jit,
850867 zend_jit_addr res_addr )
851868{
852869 ir_ref ref = IR_UNUSED ;
870+ zend_ffi_type_kind type_kind = ffi_type -> kind ;
853871
854- switch (ffi_type -> kind ) {
872+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
873+ type_kind = ffi_type -> enumeration .kind ;
874+ }
875+ switch (type_kind ) {
855876 case ZEND_FFI_TYPE_FLOAT :
856877 if (val_info == MAY_BE_LONG ) {
857878 ref = ir_INT2F (jit_Z_LVAL (jit , val_addr ));
@@ -1208,7 +1229,12 @@ static int zend_jit_ffi_assign_op_helper(zend_jit_ctx *jit,
12081229 return 0 ;
12091230 }
12101231
1211- switch (el_type -> kind ) {
1232+ zend_ffi_type_kind type_kind = el_type -> kind ;
1233+
1234+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
1235+ type_kind = el_type -> enumeration .kind ;
1236+ }
1237+ switch (type_kind ) {
12121238 case ZEND_FFI_TYPE_FLOAT :
12131239 ZEND_ASSERT (op == IR_ADD || op == IR_SUB || op == IR_MUL );
12141240 type = IR_FLOAT ;
@@ -1818,7 +1844,12 @@ static int zend_jit_ffi_incdec_helper(zend_jit_ctx *jit,
18181844 return 0 ;
18191845 }
18201846
1821- switch (el_type -> kind ) {
1847+ zend_ffi_type_kind type_kind = el_type -> kind ;
1848+
1849+ if (type_kind == ZEND_FFI_TYPE_ENUM ) {
1850+ type_kind = el_type -> enumeration .kind ;
1851+ }
1852+ switch (type_kind ) {
18221853 case ZEND_FFI_TYPE_FLOAT :
18231854 type = IR_FLOAT ;
18241855 op2 = ir_CONST_FLOAT (1.0 );
0 commit comments