From 198f5539db9a0e213691248cf50706a56e268662 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Thu, 26 Mar 2026 16:59:43 +0100 Subject: [PATCH] Slightly optimize hash add_new for packed arrays No need to check for UNDEF, assume the index is undefined. This eliminates the offset calculation, lookup and type check. Though of course dwarfed by the conversion to a proper hash table. --- Zend/zend_hash.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 959becb574736..7bcb97c392bca 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1111,7 +1111,10 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, if ((flag & (HASH_ADD_NEW|HASH_ADD_NEXT)) != (HASH_ADD_NEW|HASH_ADD_NEXT) && h < ht->nNumUsed) { zv = ht->arPacked + h; - if (Z_TYPE_P(zv) != IS_UNDEF) { + if (flag & HASH_ADD_NEW) { + ZEND_ASSERT(Z_TYPE_P(zv) == IS_UNDEF); + goto convert_to_hash; + } else if (Z_TYPE_P(zv) != IS_UNDEF) { if (flag & HASH_LOOKUP) { return zv; }