]> granicus.if.org Git - php/commitdiff
We don't have to check for undefined CV if we fetch it for isset() operation
authorDmitry Stogov <dmitry@zend.com>
Tue, 16 Sep 2014 05:15:47 +0000 (09:15 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 16 Sep 2014 05:15:47 +0000 (09:15 +0400)
Zend/zend_execute.c
Zend/zend_operators.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 5e774e25fec1bc30d26d1db051f1fa03835587b0..679d551a31ebc0738ca7376f8a4a3bdfb0627ce1 100644 (file)
@@ -210,11 +210,6 @@ static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_UNSET(zval *ptr, uint
        return &EG(uninitialized_zval);
 }
 
-static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_IS(zval *ptr, uint32_t var, const zend_execute_data *execute_data TSRMLS_DC)
-{
-       return &EG(uninitialized_zval);
-}
-
 static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_RW(zval *ptr, uint32_t var, const zend_execute_data *execute_data TSRMLS_DC)
 {
        zend_string *cv = CV_DEF_OF(EX_VAR_TO_NUM(var));
@@ -297,9 +292,6 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_IS(const zend_execute_da
 {
        zval *ret = EX_VAR(var);
 
-       if (Z_TYPE_P(ret) == IS_UNDEF) {
-               return _get_zval_cv_lookup_BP_VAR_IS(ret, var, execute_data TSRMLS_CC);
-       }
        return ret;
 }
 
@@ -307,9 +299,6 @@ static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_IS(const zend_exec
 {
        zval *ret = EX_VAR(var);
 
-       if (Z_TYPE_P(ret) == IS_UNDEF) {
-               return _get_zval_cv_lookup_BP_VAR_IS(ret, var, execute_data TSRMLS_CC);
-       }
        ZVAL_DEREF(ret);
        return ret;
 }
index dad13d90de261679def2dd8524ca3d243b548c2d..d3a2da86183ac23203c6fb8644948e03c21e43da 100644 (file)
@@ -540,6 +540,7 @@ ZEND_API void _convert_to_cstring(zval *op ZEND_FILE_LINE_DC) /* {{{ */
 ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) /* {{{ */
 {
        switch (Z_TYPE_P(op)) {
+               case IS_UNDEF:
                case IS_NULL:
                case IS_FALSE: {
                        TSRMLS_FETCH();
@@ -822,6 +823,7 @@ ZEND_API zend_string *_zval_get_string_func(zval *op TSRMLS_DC) /* {{{ */
 {
 try_again:
        switch (Z_TYPE_P(op)) {
+               case IS_UNDEF:
                case IS_NULL:
                case IS_FALSE:
                        return STR_EMPTY_ALLOC();
index d2171579667700beb06de4e084ff3b9bf7564f6f..d2b3c72269a283cb099b57514fd93f58017c24ff 100644 (file)
@@ -1158,8 +1158,7 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -1179,8 +1178,7 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
index 53a36958eb038b7f5c821bdd48d134918cb4e3a0..94aa9662b7b6816a79d43bb359ec2fa89d8502b0 100644 (file)
@@ -3771,8 +3771,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -3792,8 +3791,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -6282,8 +6280,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -6303,8 +6300,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -7342,8 +7338,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -7363,8 +7358,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -10522,8 +10516,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -10543,8 +10536,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -12811,8 +12803,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -12832,8 +12823,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -13828,8 +13818,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -13849,8 +13838,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -17932,8 +17920,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -17953,8 +17940,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -22296,8 +22282,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -22317,8 +22302,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -24193,8 +24177,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -24214,8 +24197,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -35131,8 +35113,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -35152,8 +35133,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -39190,8 +39170,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -39211,8 +39190,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -40967,8 +40945,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                        /* break missing intentionally */
                                case BP_VAR_IS:
-                                       retval = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(retval);
+                                       retval = &EG(uninitialized_zval);
                                        break;
                                case BP_VAR_RW:
                                        zend_error(E_NOTICE,"Undefined variable: %s", name->val);
@@ -40988,8 +40965,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);
                                                /* break missing intentionally */
                                        case BP_VAR_IS:
-                                               retval = EX_VAR(opline->result.var);
-                                               ZVAL_NULL(retval);
+                                               retval = &EG(uninitialized_zval);
                                                break;
                                        case BP_VAR_RW:
                                                zend_error(E_NOTICE,"Undefined variable: %s", name->val);