@@ -4889,7 +4889,7 @@ ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, CONST|UNUSED|NUM, SPE
48894889 ZVAL_COPY_VALUE (arg , varptr );
48904890
48914891 if (EXPECTED (Z_ISREF_P (varptr ) ||
4892- ! ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , arg_num ))) {
4892+ QUICK_ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num ))) {
48934893 ZEND_VM_NEXT_OPCODE ();
48944894 }
48954895 } else {
@@ -4901,7 +4901,7 @@ ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, CONST|UNUSED|NUM, SPE
49014901 ZVAL_COPY_VALUE (arg , varptr );
49024902
49034903 if (EXPECTED (Z_ISREF_P (varptr ) ||
4904- ! ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , arg_num ))) {
4904+ ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num ))) {
49054905 ZEND_VM_NEXT_OPCODE ();
49064906 }
49074907 }
@@ -4966,10 +4966,10 @@ ZEND_VM_HANDLER(209, ZEND_SEND_EXPLICIT_REF, VAR|CV, NUM, SPEC(QUICK_ARG))
49664966 uint32_t arg_num = opline -> op2 .num ;
49674967
49684968 if (EXPECTED (arg_num <= MAX_ARG_FLAG_NUM )) {
4969- if (!QUICK_ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
4969+ if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
49704970 ZEND_VM_C_GOTO (invalid_send_ref );
49714971 }
4972- } else if (!ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
4972+ } else if (!ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
49734973ZEND_VM_C_LABEL (invalid_send_ref ):
49744974 SAVE_OPLINE ();
49754975 zend_throw_error (NULL , "Cannot pass reference to by-value parameter %" PRIu32 , arg_num );
@@ -5000,10 +5000,10 @@ ZEND_VM_HANDLER(210, ZEND_SEND_EXPLICIT_REF_FUNC, VAR, NUM)
50005000 uint32_t arg_num = opline -> op2 .num ;
50015001
50025002 if (EXPECTED (arg_num <= MAX_ARG_FLAG_NUM )) {
5003- if (!QUICK_ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5003+ if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
50045004 ZEND_VM_C_GOTO (invalid_send_ref );
50055005 }
5006- } else if (!ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5006+ } else if (!ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
50075007ZEND_VM_C_LABEL (invalid_send_ref ):
50085008 SAVE_OPLINE ();
50095009 zend_throw_error (NULL , "Cannot pass reference to by-value parameter %" PRIu32 , arg_num );
@@ -5455,7 +5455,7 @@ ZEND_VM_C_LABEL(send_array):
54555455 break ;
54565456 } else if (ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
54575457 if (UNEXPECTED (!Z_ISREF_P (arg ))) {
5458- if (ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5458+ if (! ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
54595459 /* By-value send is not allowed -- emit a warning,
54605460 * but still perform the call. */
54615461 zend_param_must_be_ref (EX (call )-> func , arg_num );
@@ -5507,7 +5507,7 @@ ZEND_VM_C_LABEL(send_array):
55075507 bool must_wrap = 0 ;
55085508 if (ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
55095509 if (UNEXPECTED (!Z_ISREF_P (arg ))) {
5510- if (ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5510+ if (! ARG_MAY_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
55115511 /* By-value send is not allowed -- emit a warning,
55125512 * but still perform the call. */
55135513 zend_param_must_be_ref (EX (call )-> func , arg_num );
@@ -5540,31 +5540,21 @@ ZEND_VM_C_LABEL(send_array):
55405540 ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
55415541}
55425542
5543- ZEND_VM_HANDLER (120 , ZEND_SEND_USER , CONST |TMP |VAR |CV , NUM , REF )
5543+ ZEND_VM_HANDLER (120 , ZEND_SEND_USER , CONST |TMP |VAR |CV , NUM )
55445544{
55455545 USE_OPLINE
55465546 zval * arg , * param ;
55475547
55485548 SAVE_OPLINE ();
55495549
5550+ arg = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
55505551 param = ZEND_CALL_VAR (EX (call ), opline -> result .var );
5551- if (opline -> extended_value ) {
5552- arg = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
5553- if (Z_ISREF_P (arg )) {
5554- Z_ADDREF_P (arg );
5555- } else {
5556- ZVAL_MAKE_REF_EX (arg , 2 );
5557- }
5558- ZVAL_REF (param , Z_REF_P (arg ));
5552+ if (UNEXPECTED (ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , opline -> op2 .num ))) {
5553+ zend_param_must_be_ref (EX (call )-> func , opline -> op2 .num );
5554+ Z_TRY_ADDREF_P (arg );
5555+ ZVAL_NEW_REF (param , arg );
55595556 } else {
5560- arg = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
5561- if (UNEXPECTED (ARG_MUST_BE_SENT_BY_REF (EX (call )-> func , opline -> op2 .num ))) {
5562- zend_param_must_be_ref (EX (call )-> func , opline -> op2 .num );
5563- Z_TRY_ADDREF_P (arg );
5564- ZVAL_NEW_REF (param , arg );
5565- } else {
5566- ZVAL_COPY (param , arg );
5567- }
5557+ ZVAL_COPY (param , arg );
55685558 }
55695559
55705560 FREE_OP1 ();
0 commit comments