From: Dmitry Stogov Date: Mon, 1 Jul 2019 22:13:23 +0000 (+0300) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=686f6b383a8cb5664fb750b523bfc91f2db56a72;p=php Merge branch 'PHP-7.4' * PHP-7.4: Eliminate exception checks --- 686f6b383a8cb5664fb750b523bfc91f2db56a72 diff --cc Zend/zend_vm_def.h index f073ff9ac9,13f36ef507..f5f5901fbb --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@@ -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); diff --cc Zend/zend_vm_execute.h index 40fbfad976,b7f38d732b..7a339495f8 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@@ -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);