@@ -2450,12 +2450,14 @@ ZEND_VM_C_LABEL(assign_object):
24502450			void  * * cache_slot  =  CACHE_ADDR (opline -> extended_value );
24512451			uintptr_t  prop_offset  =  (uintptr_t )CACHED_PTR_EX (cache_slot  +  1 );
24522452			zval  * property_val ;
2453+ 			zend_property_info  * prop_info ;
24532454
24542455			if  (EXPECTED (IS_VALID_PROPERTY_OFFSET (prop_offset ))) {
2456+ 				prop_info  =  (zend_property_info * ) CACHED_PTR_EX (cache_slot  +  2 );
2457+ 
2458+ ZEND_VM_C_LABEL (assign_obj_simple ):
24552459				property_val  =  OBJ_PROP (zobj , prop_offset );
24562460				if  (Z_TYPE_P (property_val ) !=  IS_UNDEF ) {
2457- 					zend_property_info  * prop_info  =  (zend_property_info * ) CACHED_PTR_EX (cache_slot  +  2 );
2458- 
24592461					if  (prop_info  !=  NULL ) {
24602462						value  =  zend_assign_to_typed_prop (prop_info , property_val , value , & garbage  EXECUTE_DATA_CC );
24612463						ZEND_VM_C_GOTO (free_and_exit_assign_obj );
@@ -2527,14 +2529,12 @@ ZEND_VM_C_LABEL(fast_assign_obj):
25272529			} else  {
25282530				ZEND_ASSERT (IS_HOOKED_PROPERTY_OFFSET (prop_offset ));
25292531				if  (ZEND_IS_PROPERTY_HOOK_SIMPLE_WRITE (prop_offset )) {
2530- 					zend_property_info  * prop_info  =  CACHED_PTR_EX (cache_slot  +  2 );
2531- 					property_val  =  OBJ_PROP (zobj , prop_info -> offset );
2532- 					if  (ZEND_TYPE_IS_SET (prop_info -> type )) {
2533- 						value  =  zend_assign_to_typed_prop (prop_info , property_val , value , & garbage  EXECUTE_DATA_CC );
2534- 						ZEND_VM_C_GOTO (free_and_exit_assign_obj );
2535- 					} else  {
2536- 						ZEND_VM_C_GOTO (fast_assign_obj );
2532+ 					prop_info  =  CACHED_PTR_EX (cache_slot  +  2 );
2533+ 					prop_offset  =  prop_info -> offset ;
2534+ 					if  (!ZEND_TYPE_IS_SET (prop_info -> type )) {
2535+ 						prop_info  =  NULL ;
25372536					}
2537+ 					ZEND_VM_C_GOTO (assign_obj_simple );
25382538				}
25392539				/* Fall through to write_property for hooks. */ 
25402540			}
0 commit comments