@@ -2457,12 +2457,14 @@ ZEND_VM_C_LABEL(assign_object):
24572457 void * * cache_slot = CACHE_ADDR (opline -> extended_value );
24582458 uintptr_t prop_offset = (uintptr_t )CACHED_PTR_EX (cache_slot + 1 );
24592459 zval * property_val ;
2460+ zend_property_info * prop_info ;
24602461
24612462 if (EXPECTED (IS_VALID_PROPERTY_OFFSET (prop_offset ))) {
2463+ prop_info = (zend_property_info * ) CACHED_PTR_EX (cache_slot + 2 );
2464+
2465+ ZEND_VM_C_LABEL (assign_obj_simple ):
24622466 property_val = OBJ_PROP (zobj , prop_offset );
24632467 if (Z_TYPE_P (property_val ) != IS_UNDEF ) {
2464- zend_property_info * prop_info = (zend_property_info * ) CACHED_PTR_EX (cache_slot + 2 );
2465-
24662468 if (prop_info != NULL ) {
24672469 value = zend_assign_to_typed_prop (prop_info , property_val , value , & garbage EXECUTE_DATA_CC );
24682470 ZEND_VM_C_GOTO (free_and_exit_assign_obj );
@@ -2534,14 +2536,12 @@ ZEND_VM_C_LABEL(fast_assign_obj):
25342536 } else {
25352537 ZEND_ASSERT (IS_HOOKED_PROPERTY_OFFSET (prop_offset ));
25362538 if (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE (prop_offset )) {
2537- zend_property_info * prop_info = CACHED_PTR_EX (cache_slot + 2 );
2538- property_val = OBJ_PROP (zobj , prop_info -> offset );
2539- if (ZEND_TYPE_IS_SET (prop_info -> type )) {
2540- value = zend_assign_to_typed_prop (prop_info , property_val , value , & garbage EXECUTE_DATA_CC );
2541- ZEND_VM_C_GOTO (free_and_exit_assign_obj );
2542- } else {
2543- ZEND_VM_C_GOTO (fast_assign_obj );
2539+ prop_info = CACHED_PTR_EX (cache_slot + 2 );
2540+ prop_offset = prop_info -> offset ;
2541+ if (!ZEND_TYPE_IS_SET (prop_info -> type )) {
2542+ prop_info = NULL ;
25442543 }
2544+ ZEND_VM_C_GOTO (assign_obj_simple );
25452545 }
25462546 /* Fall through to write_property for hooks. */
25472547 }
0 commit comments