@@ -2457,12 +2457,14 @@ ZEND_VM_C_LABEL(assign_object):
2457
2457
void * * cache_slot = CACHE_ADDR (opline -> extended_value );
2458
2458
uintptr_t prop_offset = (uintptr_t )CACHED_PTR_EX (cache_slot + 1 );
2459
2459
zval * property_val ;
2460
+ zend_property_info * prop_info ;
2460
2461
2461
2462
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 ):
2462
2466
property_val = OBJ_PROP (zobj , prop_offset );
2463
2467
if (Z_TYPE_P (property_val ) != IS_UNDEF ) {
2464
- zend_property_info * prop_info = (zend_property_info * ) CACHED_PTR_EX (cache_slot + 2 );
2465
-
2466
2468
if (prop_info != NULL ) {
2467
2469
value = zend_assign_to_typed_prop (prop_info , property_val , value , & garbage EXECUTE_DATA_CC );
2468
2470
ZEND_VM_C_GOTO (free_and_exit_assign_obj );
@@ -2534,14 +2536,12 @@ ZEND_VM_C_LABEL(fast_assign_obj):
2534
2536
} else {
2535
2537
ZEND_ASSERT (IS_HOOKED_PROPERTY_OFFSET (prop_offset ));
2536
2538
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 ;
2544
2543
}
2544
+ ZEND_VM_C_GOTO (assign_obj_simple );
2545
2545
}
2546
2546
/* Fall through to write_property for hooks. */
2547
2547
}
0 commit comments