From: Dmitry Stogov Date: Tue, 25 Jun 2019 09:41:06 +0000 (+0300) Subject: Prevent useless hash lookups X-Git-Tag: php-7.4.0alpha3~198 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd0cb99d8c57f3f6b49abe4ccfdb2ef72ce3ab78;p=php Prevent useless hash lookups --- diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index e107e85177..d4cd708479 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -2404,14 +2404,17 @@ zend_bool zend_can_early_bind(zend_class_entry *ce, zend_class_entry *parent_ce) zend_function *parent_func; ZEND_HASH_FOREACH_STR_KEY_PTR(&parent_ce->function_table, key, parent_func) { uint32_t parent_flags = parent_func->common.fn_flags; - zend_function *func = zend_hash_find_ptr(&ce->function_table, key); + zval *zv; zend_string *unresolved_class; - if (!func || (parent_flags & ZEND_ACC_PRIVATE) || - ((parent_flags & ZEND_ACC_CTOR) && !(parent_flags & ZEND_ACC_ABSTRACT)) - ) { + + if ((parent_flags & ZEND_ACC_PRIVATE) || + ((parent_flags & ZEND_ACC_CTOR) && !(parent_flags & ZEND_ACC_ABSTRACT))) { continue; } - if (zend_do_perform_implementation_check(&unresolved_class, func, parent_func) == INHERITANCE_UNRESOLVED) { + + zv = zend_hash_find_ex(&ce->function_table, key, 1); + if (zv + && zend_do_perform_implementation_check(&unresolved_class, Z_FUNC_P(zv), parent_func) == INHERITANCE_UNRESOLVED) { return 0; } } ZEND_HASH_FOREACH_END();