@@ -9743,10 +9743,16 @@ ZEND_VM_HANDLER(209, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL, CONST, UNUSED|NUM, NUM
9743
9743
zend_execute_data * call ;
9744
9744
if (hook ) {
9745
9745
call = zend_vm_stack_push_call_frame (
9746
- ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS ,
9746
+ ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS ,
9747
9747
hook ,
9748
9748
opline -> extended_value ,
9749
- ZEND_THIS );
9749
+ Z_OBJ_P (ZEND_THIS ));
9750
+ if (EXPECTED (hook -> type == ZEND_USER_FUNCTION )) {
9751
+ if (UNEXPECTED (!RUN_TIME_CACHE (& hook -> op_array ))) {
9752
+ init_func_run_time_cache (& hook -> op_array );
9753
+ }
9754
+ call -> run_time_cache = RUN_TIME_CACHE (& hook -> op_array );
9755
+ }
9750
9756
} else {
9751
9757
zend_function * fbc ;
9752
9758
if (hook_kind == ZEND_PROPERTY_HOOK_GET ) {
@@ -9759,10 +9765,10 @@ ZEND_VM_HANDLER(209, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL, CONST, UNUSED|NUM, NUM
9759
9765
zend_parent_hook_call_info * hook_call_info = emalloc (sizeof (zend_parent_hook_call_info ));
9760
9766
hook_call_info -> object = Z_PTR_P (ZEND_THIS );
9761
9767
hook_call_info -> property = property_name ;
9762
- call = zend_vm_stack_push_call_frame (ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS ,
9768
+ call = zend_vm_stack_push_call_frame (ZEND_CALL_NESTED_FUNCTION ,
9763
9769
fbc , opline -> extended_value , hook_call_info );
9764
9770
/* zend_vm_stack_push_call_frame stores this as IS_OBJECT, we need to convert it to IS_PTR. */
9765
- ZVAL_PTR ( & call -> This , hook_call_info ) ;
9771
+ call -> This . u1 . v . type = IS_PTR ;
9766
9772
}
9767
9773
9768
9774
call -> prev_execute_data = EX (call );
0 commit comments