summaryrefslogtreecommitdiff
path: root/Zend/zend_hash.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-04-04 02:12:26 +0300
committerDmitry Stogov <dmitry@zend.com>2018-04-04 02:12:26 +0300
commit4df89a31b0cc6e4bdd76c8b7c4cf7d5676309d6e (patch)
tree45f555efaf3f8fd70df7c4a0cf95557011b1b23d /Zend/zend_hash.h
parentcb464a53c8216dd76e14d21b74d6adecd5f002f8 (diff)
downloadphp-git-4df89a31b0cc6e4bdd76c8b7c4cf7d5676309d6e.tar.gz
Eliminate useless checks
Diffstat (limited to 'Zend/zend_hash.h')
-rw-r--r--Zend/zend_hash.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index e11d57b1ca..220bccbb76 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -1099,14 +1099,14 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
__fill_ht->nInternalPointer = 0; \
} while (0)
-static zend_always_inline zval *_zend_hash_append(HashTable *ht, zend_string *key, zval *zv)
+static zend_always_inline zval *_zend_hash_append_ex(HashTable *ht, zend_string *key, zval *zv, int interned)
{
uint32_t idx = ht->nNumUsed++;
uint32_t nIndex;
Bucket *p = ht->arData + idx;
ZVAL_COPY_VALUE(&p->val, zv);
- if (!ZSTR_IS_INTERNED(key)) {
+ if (!interned && !ZSTR_IS_INTERNED(key)) {
HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_addref(key);
zend_string_hash_val(key);
@@ -1116,19 +1116,23 @@ static zend_always_inline zval *_zend_hash_append(HashTable *ht, zend_string *ke
nIndex = (uint32_t)p->h | ht->nTableMask;
Z_NEXT(p->val) = HT_HASH(ht, nIndex);
HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
- ht->nNumUsed = idx + 1;
ht->nNumOfElements++;
return &p->val;
}
-static zend_always_inline zval *_zend_hash_append_ptr(HashTable *ht, zend_string *key, void *ptr)
+static zend_always_inline zval *_zend_hash_append(HashTable *ht, zend_string *key, zval *zv)
+{
+ return _zend_hash_append_ex(ht, key, zv, 0);
+}
+
+static zend_always_inline zval *_zend_hash_append_ptr_ex(HashTable *ht, zend_string *key, void *ptr, int interned)
{
uint32_t idx = ht->nNumUsed++;
uint32_t nIndex;
Bucket *p = ht->arData + idx;
ZVAL_PTR(&p->val, ptr);
- if (!ZSTR_IS_INTERNED(key)) {
+ if (!interned && !ZSTR_IS_INTERNED(key)) {
HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_addref(key);
zend_string_hash_val(key);
@@ -1138,11 +1142,15 @@ static zend_always_inline zval *_zend_hash_append_ptr(HashTable *ht, zend_string
nIndex = (uint32_t)p->h | ht->nTableMask;
Z_NEXT(p->val) = HT_HASH(ht, nIndex);
HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
- ht->nNumUsed = idx + 1;
ht->nNumOfElements++;
return &p->val;
}
+static zend_always_inline zval *_zend_hash_append_ptr(HashTable *ht, zend_string *key, void *ptr)
+{
+ return _zend_hash_append_ptr_ex(ht, key, ptr, 0);
+}
+
static zend_always_inline void _zend_hash_append_ind(HashTable *ht, zend_string *key, zval *ptr)
{
uint32_t idx = ht->nNumUsed++;
@@ -1160,7 +1168,6 @@ static zend_always_inline void _zend_hash_append_ind(HashTable *ht, zend_string
nIndex = (uint32_t)p->h | ht->nTableMask;
Z_NEXT(p->val) = HT_HASH(ht, nIndex);
HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx);
- ht->nNumUsed = idx + 1;
ht->nNumOfElements++;
}