From: Dmitry Stogov Date: Wed, 26 Mar 2014 20:05:06 +0000 (+0400) Subject: Fixed support for references X-Git-Tag: POST_PHPNG_MERGE~412^2~219 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=92aef5279a32bcec250f72c755e60489939986ce;p=php Fixed support for references --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 97a32dca66..49479a48c8 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3875,6 +3875,9 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY) SAVE_OPLINE(); expr = GET_OP1_ZVAL_PTR(BP_VAR_R); + if (Z_ISREF_P(expr)) { + expr = Z_REFVAL_P(expr); + } if (opline->extended_value != IS_STRING) { ZVAL_COPY_VALUE(result, expr); if (!IS_OP1_TMP_FREE()) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index ac26665fa7..6984f61e96 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2807,6 +2807,9 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); expr = opline->op1.zv; + if (Z_ISREF_P(expr)) { + expr = Z_REFVAL_P(expr); + } if (opline->extended_value != IS_STRING) { ZVAL_COPY_VALUE(result, expr); if (!0) { @@ -7879,6 +7882,9 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); expr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC); + if (Z_ISREF_P(expr)) { + expr = Z_REFVAL_P(expr); + } if (opline->extended_value != IS_STRING) { ZVAL_COPY_VALUE(result, expr); if (!1) { @@ -13037,6 +13043,9 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC); + if (Z_ISREF_P(expr)) { + expr = Z_REFVAL_P(expr); + } if (opline->extended_value != IS_STRING) { ZVAL_COPY_VALUE(result, expr); if (!0) { @@ -30460,6 +30469,9 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC); + if (Z_ISREF_P(expr)) { + expr = Z_REFVAL_P(expr); + } if (opline->extended_value != IS_STRING) { ZVAL_COPY_VALUE(result, expr); if (!0) {