@@ -9743,10 +9743,16 @@ ZEND_VM_HANDLER(209, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL, CONST, UNUSED|NUM, NUM
97439743 zend_execute_data * call ;
97449744 if (hook ) {
97459745 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 ,
97479747 hook ,
97489748 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+ }
97509756 } else {
97519757 zend_function * fbc ;
97529758 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
97599765 zend_parent_hook_call_info * hook_call_info = emalloc (sizeof (zend_parent_hook_call_info ));
97609766 hook_call_info -> object = Z_PTR_P (ZEND_THIS );
97619767 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 ,
97639769 fbc , opline -> extended_value , hook_call_info );
97649770 /* 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 ;
97669772 }
97679773
97689774 call -> prev_execute_data = EX (call );
0 commit comments