]> granicus.if.org Git - php/commitdiff
Fixed return anf yield by reference
authorDmitry Stogov <dmitry@zend.com>
Wed, 26 Feb 2014 14:07:16 +0000 (18:07 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 26 Feb 2014 14:07:16 +0000 (18:07 +0400)
Zend/zend_compile.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 66410d41d336c28fec433303ebb9c9fb92cf6af8..40694377be961ec5c03d60828c9751be433d3a9f 100644 (file)
@@ -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);
                }
index 1d30af91379bda8e4f1c0906c8fdfb554f61a8b5..c97fa0d759e4e9961d13bd4e172f86b9b054f6db 100644 (file)
@@ -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);
 //???                          }
index f0af3e7174927b706e9b106b1e2d9816d646058f..36f6c81f42ffba2500d1da26dabacd585c942e7d 100644 (file)
@@ -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);
 //???                          }