]> granicus.if.org Git - php/commitdiff
Fixed support for references
authorDmitry Stogov <dmitry@zend.com>
Wed, 26 Mar 2014 20:05:06 +0000 (00:05 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 26 Mar 2014 20:05:06 +0000 (00:05 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 97a32dca660be4f8a0f4cbdaa2a521559a4d5b40..49479a48c86ea80e730fa2a15c871a60dc13b088 100644 (file)
@@ -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()) {
index ac26665fa798845e0b7e7575a9edd344c50610d6..6984f61e9651ff650f66d3e5cb161cc36f8c4204 100644 (file)
@@ -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) {