@@ -4889,7 +4889,7 @@ ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, CONST|UNUSED|NUM, SPE
4889
4889
ZVAL_COPY_VALUE (arg , varptr );
4890
4890
4891
4891
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 ))) {
4893
4893
ZEND_VM_NEXT_OPCODE ();
4894
4894
}
4895
4895
} else {
@@ -4901,7 +4901,7 @@ ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, CONST|UNUSED|NUM, SPE
4901
4901
ZVAL_COPY_VALUE (arg , varptr );
4902
4902
4903
4903
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 ))) {
4905
4905
ZEND_VM_NEXT_OPCODE ();
4906
4906
}
4907
4907
}
@@ -4966,10 +4966,10 @@ ZEND_VM_HANDLER(209, ZEND_SEND_EXPLICIT_REF, VAR|CV, NUM, SPEC(QUICK_ARG))
4966
4966
uint32_t arg_num = opline -> op2 .num ;
4967
4967
4968
4968
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 )) {
4970
4970
ZEND_VM_C_GOTO (invalid_send_ref );
4971
4971
}
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 )) {
4973
4973
ZEND_VM_C_LABEL (invalid_send_ref ):
4974
4974
SAVE_OPLINE ();
4975
4975
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)
5000
5000
uint32_t arg_num = opline -> op2 .num ;
5001
5001
5002
5002
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 )) {
5004
5004
ZEND_VM_C_GOTO (invalid_send_ref );
5005
5005
}
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 )) {
5007
5007
ZEND_VM_C_LABEL (invalid_send_ref ):
5008
5008
SAVE_OPLINE ();
5009
5009
zend_throw_error (NULL , "Cannot pass reference to by-value parameter %" PRIu32 , arg_num );
@@ -5455,7 +5455,7 @@ ZEND_VM_C_LABEL(send_array):
5455
5455
break ;
5456
5456
} else if (ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5457
5457
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 )) {
5459
5459
/* By-value send is not allowed -- emit a warning,
5460
5460
* but still perform the call. */
5461
5461
zend_param_must_be_ref (EX (call )-> func , arg_num );
@@ -5507,7 +5507,7 @@ ZEND_VM_C_LABEL(send_array):
5507
5507
bool must_wrap = 0 ;
5508
5508
if (ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> func , arg_num )) {
5509
5509
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 )) {
5511
5511
/* By-value send is not allowed -- emit a warning,
5512
5512
* but still perform the call. */
5513
5513
zend_param_must_be_ref (EX (call )-> func , arg_num );
@@ -5540,31 +5540,21 @@ ZEND_VM_C_LABEL(send_array):
5540
5540
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
5541
5541
}
5542
5542
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 )
5544
5544
{
5545
5545
USE_OPLINE
5546
5546
zval * arg , * param ;
5547
5547
5548
5548
SAVE_OPLINE ();
5549
5549
5550
+ arg = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
5550
5551
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 );
5559
5556
} 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 );
5568
5558
}
5569
5559
5570
5560
FREE_OP1 ();
0 commit comments