Commit 5f9e5e08865 for php.net
commit 5f9e5e0886586d05f150add6b2f8b17734d67d9e
Author: Weilin Du <weilindu@php.net>
Date: Sun Aug 16 02:31:43 2026 +0800
Zend: Use pointer hash lookups for property metadata
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 45b6be2cc9e..95046d1589d 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -294,13 +294,9 @@ static zend_never_inline int is_protected_compatible_scope(const zend_class_entr
static zend_never_inline zend_property_info *zend_get_parent_private_property(const zend_class_entry *scope, const zend_class_entry *ce, zend_string *member) /* {{{ */
{
- zval *zv;
- zend_property_info *prop_info;
-
if (scope != ce && scope && is_derived_class(ce, scope)) {
- zv = zend_hash_find(&scope->properties_info, member);
- if (zv != NULL) {
- prop_info = (zend_property_info*)Z_PTR_P(zv);
+ zend_property_info *prop_info = zend_hash_find_ptr(&scope->properties_info, member);
+ if (prop_info != NULL) {
if ((prop_info->flags & ZEND_ACC_PRIVATE)
&& prop_info->ce == scope) {
return prop_info;
@@ -364,7 +360,6 @@ static zend_always_inline const zend_class_entry *get_fake_or_executed_scope(voi
static zend_always_inline uintptr_t zend_get_property_offset(zend_class_entry *ce, zend_string *member, int silent, void **cache_slot, const zend_property_info **info_ptr) /* {{{ */
{
- zval *zv;
zend_property_info *property_info;
uint32_t flags;
uintptr_t offset;
@@ -375,7 +370,7 @@ static zend_always_inline uintptr_t zend_get_property_offset(zend_class_entry *c
}
if (UNEXPECTED(zend_hash_num_elements(&ce->properties_info) == 0)
- || UNEXPECTED((zv = zend_hash_find(&ce->properties_info, member)) == NULL)) {
+ || UNEXPECTED((property_info = zend_hash_find_ptr(&ce->properties_info, member)) == NULL)) {
if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0') && ZSTR_LEN(member) != 0) {
if (!silent) {
zend_bad_property_name();
@@ -390,7 +385,6 @@ static zend_always_inline uintptr_t zend_get_property_offset(zend_class_entry *c
return ZEND_DYNAMIC_PROPERTY_OFFSET;
}
- property_info = (zend_property_info*)Z_PTR_P(zv);
flags = property_info->flags;
if (flags & (ZEND_ACC_CHANGED|ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) {
@@ -474,12 +468,11 @@ static ZEND_COLD void zend_wrong_offset(zend_class_entry *ce, zend_string *membe
ZEND_API zend_property_info *zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent) /* {{{ */
{
- zval *zv;
zend_property_info *property_info;
uint32_t flags;
if (UNEXPECTED(zend_hash_num_elements(&ce->properties_info) == 0)
- || EXPECTED((zv = zend_hash_find(&ce->properties_info, member)) == NULL)) {
+ || EXPECTED((property_info = zend_hash_find_ptr(&ce->properties_info, member)) == NULL)) {
if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0') && ZSTR_LEN(member) != 0) {
if (!silent) {
zend_bad_property_name();
@@ -490,7 +483,6 @@ ZEND_API zend_property_info *zend_get_property_info(const zend_class_entry *ce,
return NULL;
}
- property_info = (zend_property_info*)Z_PTR_P(zv);
flags = property_info->flags;
if (flags & (ZEND_ACC_CHANGED|ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) {