@@ -2450,12 +2450,14 @@ ZEND_VM_C_LABEL(assign_object):
2450
2450
void * * cache_slot = CACHE_ADDR (opline -> extended_value );
2451
2451
uintptr_t prop_offset = (uintptr_t )CACHED_PTR_EX (cache_slot + 1 );
2452
2452
zval * property_val ;
2453
+ zend_property_info * prop_info ;
2453
2454
2454
2455
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 ):
2455
2459
property_val = OBJ_PROP (zobj , prop_offset );
2456
2460
if (Z_TYPE_P (property_val ) != IS_UNDEF ) {
2457
- zend_property_info * prop_info = (zend_property_info * ) CACHED_PTR_EX (cache_slot + 2 );
2458
-
2459
2461
if (prop_info != NULL ) {
2460
2462
value = zend_assign_to_typed_prop (prop_info , property_val , value , & garbage EXECUTE_DATA_CC );
2461
2463
ZEND_VM_C_GOTO (free_and_exit_assign_obj );
@@ -2527,14 +2529,12 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2527
2529
} else {
2528
2530
ZEND_ASSERT (IS_HOOKED_PROPERTY_OFFSET (prop_offset ));
2529
2531
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 ;
2537
2536
}
2537
+ ZEND_VM_C_GOTO (assign_obj_simple );
2538
2538
}
2539
2539
/* Fall through to write_property for hooks. */
2540
2540
}
0 commit comments