]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorDmitry Stogov <dmitry@zend.com>
Mon, 1 Jul 2019 22:13:23 +0000 (01:13 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 1 Jul 2019 22:13:23 +0000 (01:13 +0300)
* PHP-7.4:
  Eliminate exception checks

1  2 
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index f073ff9ac96259145097581392d84637f7a7ee91,13f36ef5077b0c66fb11511e35eceffc96b1150d..f5f5901fbb2018079c1deb0cb5c93aac968458b3
@@@ -2046,12 -2005,16 +2052,16 @@@ ZEND_VM_C_LABEL(fetch_obj_r_fast_copy)
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               ZEND_VM_C_GOTO(fetch_obj_r_copy);
+                                                               if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR))) {
+                                                                       ZEND_VM_C_GOTO(fetch_obj_r_copy);
+                                                               } else {
+                                                                       ZEND_VM_C_GOTO(fetch_obj_r_fast_copy);
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -2201,12 -2161,16 +2221,16 @@@ ZEND_VM_C_LABEL(fetch_obj_is_fast_copy)
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               ZEND_VM_C_GOTO(fetch_obj_is_copy);
+                                                               if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR))) {
+                                                                       ZEND_VM_C_GOTO(fetch_obj_is_copy);
+                                                               } else {
+                                                                       ZEND_VM_C_GOTO(fetch_obj_is_fast_copy);
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
index 40fbfad9760942b8d87b823c62681bf9fe9ce1e4,b7f38d732b593734d45c058719d84ef7a8e01f9f..7a339495f8f245e1b0118fd71b2498a8adf78f84
@@@ -5169,12 -5178,16 +5175,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -5276,12 -5286,16 +5296,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -7250,12 -7265,16 +7284,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -7357,12 -7373,16 +7405,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -9921,12 -9945,16 +9983,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -10028,12 -10053,16 +10104,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CONST & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -13631,12 -13659,16 +13721,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -13738,12 -13767,16 +13842,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -15256,12 -15273,16 +15374,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -15363,12 -15381,16 +15495,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -16757,12 -16763,16 +16903,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -16864,12 -16871,16 +17024,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -31542,12 -31104,16 +31716,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -31697,12 -31260,16 +31885,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -33564,12 -32991,16 +33766,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -33719,12 -33147,16 +33935,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -36251,12 -35548,16 +36481,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -36406,12 -35704,16 +36650,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_UNUSED & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -40979,12 -40132,16 +41237,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -41134,12 -40288,16 +41406,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -44987,12 -44000,16 +45273,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -45142,12 -44156,16 +45442,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -50626,12 -49497,16 +50940,16 @@@ fetch_obj_r_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_r_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_r_copy;
+                                                               } else {
+                                                                       goto fetch_obj_r_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@@ -50781,12 -49653,16 +51109,16 @@@ fetch_obj_is_fast_copy
                                                        Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  
                                                        if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
 -                                                      (EXPECTED(p->key == Z_STR_P(offset)) ||
 -                                                       (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
 +                                                      (EXPECTED(p->key == name) ||
 +                                                       (EXPECTED(p->h == ZSTR_H(name)) &&
                                                          EXPECTED(p->key != NULL) &&
 -                                                        EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
 +                                                        EXPECTED(zend_string_equal_content(p->key, name))))) {
                                                                retval = &p->val;
-                                                               goto fetch_obj_is_copy;
+                                                               if (!ZEND_VM_SPEC || (IS_CV & (IS_TMP_VAR|IS_VAR))) {
+                                                                       goto fetch_obj_is_copy;
+                                                               } else {
+                                                                       goto fetch_obj_is_fast_copy;
+                                                               }
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);