]> granicus.if.org Git - php/commitdiff
Fixed test tests/classes/__call_007.php
authorXinchen Hui <laruence@gmail.com>
Fri, 21 Feb 2014 13:39:02 +0000 (21:39 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 21 Feb 2014 13:47:41 +0000 (21:47 +0800)
Zend/zend_API.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index f1ba871712143ec3676e953583bc25b9216beeb1..58f5eccdbee5991037b20288fe31351abdbb6d93 100644 (file)
@@ -3149,7 +3149,7 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zval *object_ptr, uint ch
                                                }
 
                                        } else {
-                                               if (!!EG(objects_store).object_buckets ||
+                                               if (!EG(objects_store).object_buckets ||
                                                    !IS_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(obj)])) {
                                                        return 0;
                                                }
index 8c0971195c1259ec6272872d2d6dfb4675327a77..75acee396db6f7c32fa66b0b0b1e2a7add2b1c6a 100644 (file)
@@ -1025,7 +1025,9 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -1060,30 +1062,33 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
        if (OP1_TYPE != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
-               }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
+               } 
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
index be5c464ff853ebda5eb85c4573a961ba81b7aa6b..9aaa17c4845b889088d4d23aefddf1386562b609 100644 (file)
@@ -3544,7 +3544,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -3579,30 +3581,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -5296,7 +5301,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -5331,30 +5338,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -5979,7 +5989,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -6014,30 +6026,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -8574,7 +8589,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -8609,30 +8626,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10207,7 +10227,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -10242,30 +10264,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10898,7 +10923,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -10933,30 +10960,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14130,7 +14160,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -14165,30 +14197,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -18473,7 +18508,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -18508,30 +18545,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20340,7 +20380,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -20375,30 +20417,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -30637,7 +30682,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -30672,30 +30719,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -34635,7 +34685,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -34670,30 +34722,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -36376,7 +36431,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       ZVAL_NULL(retval);
+                                       //???
+                                       //ZVAL_NULL(retval);
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
@@ -36411,30 +36468,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                zval_dtor(&tmp_varname);
        }
+
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
 
-       if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
-       switch (type) {
-               case BP_VAR_R:
-               case BP_VAR_IS:
-                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
-                       break;
-               case BP_VAR_UNSET: {
-//???                  zend_free_op free_res;
-//???
-//???                  PZVAL_UNLOCK(*retval, &free_res);
-//???                  if (retval != &EG(uninitialized_zval_ptr)) {
-//???                          SEPARATE_ZVAL_IF_NOT_REF(retval);
-//???                  }
-//???                  PZVAL_LOCK(*retval);
-//???                  FREE_OP_VAR_PTR(free_res);
+       if (EXPECTED(retval)) {
+               if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval);
+               switch (type) {
+                       case BP_VAR_R:
+                       case BP_VAR_IS:
+                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval);
+                               break;
+                       case BP_VAR_UNSET: {
+       //???                   zend_free_op free_res;
+       //???
+       //???                   PZVAL_UNLOCK(*retval, &free_res);
+       //???                   if (retval != &EG(uninitialized_zval_ptr)) {
+       //???                           SEPARATE_ZVAL_IF_NOT_REF(retval);
+       //???                   }
+       //???                   PZVAL_LOCK(*retval);
+       //???                   FREE_OP_VAR_PTR(free_res);
+                       }
+                       /* break missing intentionally */
+                       default:
+                               ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
+                               break;
                }
-               /* break missing intentionally */
-               default:
-                       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
-                       break;
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();