mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
Fixed return anf yield by reference
This commit is contained in:
parent
e49c0804da
commit
60eadc80b8
@ -2789,7 +2789,7 @@ void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC) /* {{{ */
|
||||
|
||||
if (do_end_vparse) {
|
||||
if (returns_reference && !zend_is_function_or_method_call(expr)) {
|
||||
zend_do_end_variable_parse(expr, BP_VAR_W, 0 TSRMLS_CC);
|
||||
zend_do_end_variable_parse(expr, BP_VAR_W, 1 TSRMLS_CC);
|
||||
} else {
|
||||
zend_do_end_variable_parse(expr, BP_VAR_R, 0 TSRMLS_CC);
|
||||
}
|
||||
@ -2851,7 +2851,7 @@ void zend_do_yield(znode *result, znode *value, const znode *key, zend_bool is_v
|
||||
|
||||
if (is_variable) {
|
||||
if ((CG(active_op_array)->fn_flags & ZEND_ACC_RETURN_REFERENCE) && !zend_is_function_or_method_call(value)) {
|
||||
zend_do_end_variable_parse(value, BP_VAR_W, 0 TSRMLS_CC);
|
||||
zend_do_end_variable_parse(value, BP_VAR_W, 1 TSRMLS_CC);
|
||||
} else {
|
||||
zend_do_end_variable_parse(value, BP_VAR_R, 0 TSRMLS_CC);
|
||||
}
|
||||
|
@ -2861,7 +2861,7 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY)
|
||||
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
|
||||
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
|
||||
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
|
||||
//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
//??? if (EX(return_value)) {
|
||||
//??? ZVAL_DUP(EX(return_value), retval_ptr);
|
||||
//??? }
|
||||
|
@ -2613,7 +2613,7 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HAND
|
||||
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
|
||||
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
|
||||
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
|
||||
//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
//??? if (EX(return_value)) {
|
||||
//??? ZVAL_DUP(EX(return_value), retval_ptr);
|
||||
//??? }
|
||||
@ -7667,7 +7667,7 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLE
|
||||
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
|
||||
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
|
||||
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
|
||||
//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
//??? if (EX(return_value)) {
|
||||
//??? ZVAL_DUP(EX(return_value), retval_ptr);
|
||||
//??? }
|
||||
@ -12671,7 +12671,7 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
|
||||
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
|
||||
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
|
||||
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
|
||||
//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
//??? if (EX(return_value)) {
|
||||
//??? ZVAL_DUP(EX(return_value), retval_ptr);
|
||||
//??? }
|
||||
@ -29576,7 +29576,7 @@ static int ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER
|
||||
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
|
||||
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
|
||||
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
|
||||
//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
zend_error(E_NOTICE, "Only variable references should be returned by reference");
|
||||
//??? if (EX(return_value)) {
|
||||
//??? ZVAL_DUP(EX(return_value), retval_ptr);
|
||||
//??? }
|
||||
|
Loading…
Reference in New Issue
Block a user