@@ -2457,6 +2457,49 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
24572457 goto jit_failure ;
24582458 }
24592459 goto done ;
2460+ case ZEND_PRE_INC_OBJ :
2461+ case ZEND_PRE_DEC_OBJ :
2462+ case ZEND_POST_INC_OBJ :
2463+ case ZEND_POST_DEC_OBJ :
2464+ if (opline -> op2_type != IS_CONST
2465+ || Z_TYPE_P (RT_CONSTANT (opline , opline -> op2 )) != IS_STRING
2466+ || Z_STRVAL_P (RT_CONSTANT (opline , opline -> op2 ))[0 ] == '\0' ) {
2467+ break ;
2468+ }
2469+ if (PROFITABILITY_CHECKS && (!ssa -> ops || !ssa -> var_info )) {
2470+ break ;
2471+ }
2472+ ce = NULL ;
2473+ ce_is_instanceof = 0 ;
2474+ if (opline -> op1_type == IS_UNUSED ) {
2475+ op1_info = MAY_BE_OBJECT |MAY_BE_RC1 |MAY_BE_RCN ;
2476+ ce = op_array -> scope ;
2477+ ce_is_instanceof = (ce -> ce_flags & ZEND_ACC_FINAL ) != 0 ;
2478+ op1_addr = 0 ;
2479+ } else {
2480+ op1_info = OP1_INFO ();
2481+ if (!(op1_info & MAY_BE_OBJECT )) {
2482+ break ;
2483+ }
2484+ op1_addr = OP1_REG_ADDR ();
2485+ if (ssa -> var_info && ssa -> ops ) {
2486+ zend_ssa_op * ssa_op = & ssa -> ops [opline - op_array -> opcodes ];
2487+ if (ssa_op -> op1_use >= 0 ) {
2488+ zend_ssa_var_info * op1_ssa = ssa -> var_info + ssa_op -> op1_use ;
2489+ if (op1_ssa -> ce && !op1_ssa -> ce -> create_object ) {
2490+ ce = op1_ssa -> ce ;
2491+ ce_is_instanceof = op1_ssa -> is_instanceof ;
2492+ }
2493+ }
2494+ }
2495+ }
2496+ if (!zend_jit_incdec_obj (& dasm_state , opline , op_array , ssa , ssa_op ,
2497+ op1_info , op1_addr ,
2498+ 0 , ce , ce_is_instanceof , 0 , NULL ,
2499+ zend_may_throw (opline , ssa_op , op_array , ssa ))) {
2500+ goto jit_failure ;
2501+ }
2502+ goto done ;
24602503 case ZEND_ASSIGN_OBJ_OP :
24612504 if (opline -> extended_value == ZEND_POW
24622505 || opline -> extended_value == ZEND_DIV ) {
0 commit comments