@@ -9599,25 +9599,59 @@ ZEND_VM_C_LABEL(try_again):
9599
9599
}
9600
9600
}
9601
9601
9602
+ ZEND_VM_HELPER (zend_frameless_observed_call , ANY , ANY , uint8_t num_args , zend_function * fbc , zval * op1 , zval * op2 , zval * op3 , zval * result )
9603
+ {
9604
+ USE_OPLINE
9605
+
9606
+ zend_execute_data * call = zend_vm_stack_push_call_frame_ex (zend_vm_calc_used_stack (num_args , fbc ), ZEND_CALL_NESTED_FUNCTION , fbc , num_args , NULL );
9607
+ call -> prev_execute_data = execute_data ;
9608
+ EG (current_execute_data ) = call ;
9609
+
9610
+ switch (num_args ) {
9611
+ case 3 : ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 2 ), op3 ); if ((opline + 1 )-> op1_type & (IS_TMP_VAR |IS_VAR )) { zval_ptr_dtor_nogc (op3 ); ZVAL_UNDEF (op3 ); } ZEND_FALLTHROUGH ;
9612
+ case 2 : ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 1 ), op2 ); if (opline -> op2_type & (IS_TMP_VAR |IS_VAR )) { zval_ptr_dtor_nogc (op2 ); ZVAL_UNDEF (op2 ); } ZEND_FALLTHROUGH ;
9613
+ case 1 : ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 0 ), op1 ); if (opline -> op1_type & (IS_TMP_VAR |IS_VAR )) { zval_ptr_dtor_nogc (op1 ); ZVAL_UNDEF (op1 ); }
9614
+ }
9615
+
9616
+ zend_observer_fcall_begin_prechecked (call , ZEND_OBSERVER_DATA (fbc ));
9617
+ fbc -> internal_function .handler (call , result );
9618
+ zend_observer_fcall_end (call , result );
9619
+
9620
+ EG (current_execute_data ) = execute_data ;
9621
+ zend_vm_stack_free_args (call );
9622
+
9623
+ uint32_t call_info = ZEND_CALL_INFO (call );
9624
+ if (UNEXPECTED (call_info & ZEND_CALL_ALLOCATED )) {
9625
+ zend_vm_stack_free_call_frame_ex (call_info , call );
9626
+ } else {
9627
+ EG (vm_stack_top ) = (zval * )call ;
9628
+ }
9629
+
9630
+ if (UNEXPECTED (EG (exception ) != NULL )) {
9631
+ zend_rethrow_exception (execute_data );
9632
+ HANDLE_EXCEPTION ();
9633
+ }
9634
+
9635
+ ZEND_VM_SET_OPCODE (opline + 1 + (num_args == 3 ));
9636
+ ZEND_VM_CONTINUE ();
9637
+ }
9638
+
9602
9639
ZEND_VM_HANDLER (204 , ZEND_FRAMELESS_ICALL_0 , UNUSED , UNUSED , SPEC (OBSERVER ))
9603
9640
{
9604
9641
USE_OPLINE
9605
9642
SAVE_OPLINE ();
9606
9643
9644
+ zval * result = EX_VAR (opline -> result .var );
9645
+ ZVAL_NULL (result );
9607
9646
#if !ZEND_VM_SPEC || ZEND_OBSERVER_ENABLED
9608
9647
if (ZEND_OBSERVER_ENABLED ) {
9609
9648
zend_function * fbc = ZEND_FLF_FUNC (opline );
9610
9649
if (UNEXPECTED (zend_observer_handler_is_unobserved (ZEND_OBSERVER_DATA (fbc )) == false)) {
9611
- zend_execute_data * call = _zend_vm_stack_push_call_frame_ex (zend_vm_calc_used_stack (0 , fbc ), ZEND_CALL_NESTED_FUNCTION , fbc , 0 , NULL );
9612
- call -> prev_execute_data = EX (call );
9613
- EX (call ) = call ;
9614
- ZEND_VM_DISPATCH_TO_HANDLER (ZEND_DO_ICALL );
9650
+ ZEND_VM_DISPATCH_TO_HELPER (zend_frameless_observed_call , args , 0 , fbc , fbc , op1 , NULL , op2 , NULL , op3 , NULL , result , result );
9615
9651
}
9616
9652
}
9617
9653
#endif
9618
9654
zend_frameless_function_0 function = (zend_frameless_function_0 )ZEND_FLF_HANDLER (opline );
9619
- zval * result = EX_VAR (opline -> result .var );
9620
- ZVAL_NULL (result );
9621
9655
function (EX_VAR (opline -> result .var ));
9622
9656
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
9623
9657
}
@@ -9638,12 +9672,7 @@ ZEND_VM_HANDLER(205, ZEND_FRAMELESS_ICALL_1, ANY, UNUSED, SPEC(OBSERVER))
9638
9672
if (ZEND_OBSERVER_ENABLED ) {
9639
9673
zend_function * fbc = ZEND_FLF_FUNC (opline );
9640
9674
if (UNEXPECTED (zend_observer_handler_is_unobserved (ZEND_OBSERVER_DATA (fbc )) == false)) {
9641
- zend_execute_data * call = _zend_vm_stack_push_call_frame_ex (zend_vm_calc_used_stack (1 , fbc ), ZEND_CALL_NESTED_FUNCTION , fbc , 1 , NULL );
9642
- call -> prev_execute_data = EX (call );
9643
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 0 ), arg1 );
9644
- FREE_OP1 ();
9645
- EX (call ) = call ;
9646
- ZEND_VM_DISPATCH_TO_HANDLER (ZEND_DO_ICALL );
9675
+ ZEND_VM_DISPATCH_TO_HELPER (zend_frameless_observed_call , args , 1 , fbc , fbc , op1 , arg1 , op2 , NULL , op3 , NULL , result , result );
9647
9676
}
9648
9677
}
9649
9678
#endif
@@ -9670,14 +9699,7 @@ ZEND_VM_HANDLER(206, ZEND_FRAMELESS_ICALL_2, ANY, ANY, SPEC(OBSERVER))
9670
9699
if (ZEND_OBSERVER_ENABLED ) {
9671
9700
zend_function * fbc = ZEND_FLF_FUNC (opline );
9672
9701
if (UNEXPECTED (zend_observer_handler_is_unobserved (ZEND_OBSERVER_DATA (fbc )) == false)) {
9673
- zend_execute_data * call = _zend_vm_stack_push_call_frame_ex (zend_vm_calc_used_stack (2 , fbc ), ZEND_CALL_NESTED_FUNCTION , fbc , 2 , NULL );
9674
- call -> prev_execute_data = EX (call );
9675
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 0 ), arg1 );
9676
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 1 ), arg2 );
9677
- FREE_OP1 ();
9678
- FREE_OP2 ();
9679
- EX (call ) = call ;
9680
- ZEND_VM_DISPATCH_TO_HANDLER (ZEND_DO_ICALL );
9702
+ ZEND_VM_DISPATCH_TO_HELPER (zend_frameless_observed_call , args , 2 , fbc , fbc , op1 , arg1 , op2 , arg2 , op3 , NULL , result , result );
9681
9703
}
9682
9704
}
9683
9705
#endif
@@ -9711,17 +9733,7 @@ ZEND_VM_HANDLER(207, ZEND_FRAMELESS_ICALL_3, ANY, ANY, SPEC(OBSERVER))
9711
9733
if (ZEND_OBSERVER_ENABLED ) {
9712
9734
zend_function * fbc = ZEND_FLF_FUNC (opline );
9713
9735
if (UNEXPECTED (zend_observer_handler_is_unobserved (ZEND_OBSERVER_DATA (fbc )) == false)) {
9714
- zend_execute_data * call = _zend_vm_stack_push_call_frame_ex (zend_vm_calc_used_stack (3 , fbc ), ZEND_CALL_NESTED_FUNCTION , fbc , 3 , NULL );
9715
- call -> prev_execute_data = EX (call );
9716
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 0 ), arg1 );
9717
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 1 ), arg2 );
9718
- ZVAL_COPY (ZEND_CALL_VAR_NUM (call , 2 ), arg3 );
9719
- FREE_OP1 ();
9720
- FREE_OP2 ();
9721
- FREE_OP_DATA ();
9722
- EX (call ) = call ;
9723
- ZEND_VM_INC_OPCODE (); // Jump over OP_DATA
9724
- ZEND_VM_DISPATCH_TO_HANDLER (ZEND_DO_ICALL );
9736
+ ZEND_VM_DISPATCH_TO_HELPER (zend_frameless_observed_call , args , 3 , fbc , fbc , op1 , arg1 , op2 , arg2 , op3 , arg3 , result , result );
9725
9737
}
9726
9738
}
9727
9739
#endif
0 commit comments