summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_hash.c39
-rw-r--r--Zend/zend_ts_hash.c30
-rw-r--r--Zend/zend_ts_hash.h10
3 files changed, 64 insertions, 15 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 6ffd25f1d3..b97cfb2ba4 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -777,7 +777,16 @@ add_to_hash:
ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *pData, uint32_t flag ZEND_FILE_LINE_DC)
{
- return _zend_hash_add_or_update_i(ht, key, pData, flag ZEND_FILE_LINE_RELAY_CC);
+ if (flag == HASH_ADD) {
+ return _zend_hash_add(ht, key, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == HASH_ADD_NEW) {
+ return _zend_hash_add_new(ht, key, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == HASH_UPDATE) {
+ return _zend_hash_update(ht, key, pData ZEND_FILE_LINE_RELAY_CC);
+ } else {
+ ZEND_ASSERT(flag == (HASH_UPDATE|HASH_UPDATE_INDIRECT));
+ return _zend_hash_update_ind(ht, key, pData ZEND_FILE_LINE_RELAY_CC);
+ }
}
ZEND_API zval* ZEND_FASTCALL _zend_hash_add(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC)
@@ -802,9 +811,16 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key,
ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *str, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC)
{
- zend_ulong h = zend_hash_func(str, len);
-
- return _zend_hash_str_add_or_update_i(ht, str, len, h, pData, flag ZEND_FILE_LINE_RELAY_CC);
+ if (flag == HASH_ADD) {
+ return _zend_hash_str_add(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == HASH_ADD_NEW) {
+ return _zend_hash_str_add_new(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == HASH_UPDATE) {
+ return _zend_hash_str_update(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC);
+ } else {
+ ZEND_ASSERT(flag == (HASH_UPDATE|HASH_UPDATE_INDIRECT));
+ return _zend_hash_str_update_ind(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC);
+ }
}
ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC)
@@ -945,7 +961,20 @@ add:
ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag ZEND_FILE_LINE_DC)
{
- return _zend_hash_index_add_or_update_i(ht, h, pData, flag ZEND_FILE_LINE_RELAY_CC);
+ if (flag == HASH_ADD) {
+ return _zend_hash_index_add(ht, h, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == (HASH_ADD|HASH_ADD_NEW)) {
+ return _zend_hash_index_add_new(ht, h, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == (HASH_ADD|HASH_ADD_NEXT)) {
+ ZEND_ASSERT(h == ht->nNextFreeElement);
+ return _zend_hash_next_index_insert(ht, pData ZEND_FILE_LINE_RELAY_CC);
+ } else if (flag == (HASH_ADD|HASH_ADD_NEW|HASH_ADD_NEXT)) {
+ ZEND_ASSERT(h == ht->nNextFreeElement);
+ return _zend_hash_next_index_insert_new(ht, pData ZEND_FILE_LINE_RELAY_CC);
+ } else {
+ ZEND_ASSERT(flag == HASH_UPDATE);
+ return _zend_hash_index_update(ht, h, pData ZEND_FILE_LINE_RELAY_CC);
+ }
}
ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC)
diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c
index af02af55e8..f5d210b724 100644
--- a/Zend/zend_ts_hash.c
+++ b/Zend/zend_ts_hash.c
@@ -89,23 +89,45 @@ ZEND_API void zend_ts_hash_clean(TsHashTable *ht)
end_write(ht);
}
-ZEND_API zval *_zend_ts_hash_add_or_update(TsHashTable *ht, zend_string *key, zval *pData, int flag ZEND_FILE_LINE_DC)
+ZEND_API zval *_zend_ts_hash_add(TsHashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC)
{
zval *retval;
begin_write(ht);
- retval = _zend_hash_add_or_update(TS_HASH(ht), key, pData, flag ZEND_FILE_LINE_RELAY_CC);
+ retval = _zend_hash_add(TS_HASH(ht), key, pData ZEND_FILE_LINE_RELAY_CC);
end_write(ht);
return retval;
}
-ZEND_API zval *_zend_ts_hash_index_add_or_update(TsHashTable *ht, zend_ulong h, zval *pData, int flag ZEND_FILE_LINE_DC)
+ZEND_API zval *_zend_ts_hash_update(TsHashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC)
{
zval *retval;
begin_write(ht);
- retval = _zend_hash_index_add_or_update(TS_HASH(ht), h, pData, flag ZEND_FILE_LINE_RELAY_CC);
+ retval = _zend_hash_update(TS_HASH(ht), key, pData ZEND_FILE_LINE_RELAY_CC);
+ end_write(ht);
+
+ return retval;
+}
+
+ZEND_API zval *_zend_ts_hash_next_index_insert(TsHashTable *ht, zval *pData ZEND_FILE_LINE_DC)
+{
+ zval *retval;
+
+ begin_write(ht);
+ retval = _zend_hash_next_index_insert(TS_HASH(ht), pData ZEND_FILE_LINE_RELAY_CC);
+ end_write(ht);
+
+ return retval;
+}
+
+ZEND_API zval *_zend_ts_hash_index_update(TsHashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC)
+{
+ zval *retval;
+
+ begin_write(ht);
+ retval = _zend_hash_index_update(TS_HASH(ht), h, pData ZEND_FILE_LINE_RELAY_CC);
end_write(ht);
return retval;
diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h
index 9806c39ed8..ef882e0820 100644
--- a/Zend/zend_ts_hash.h
+++ b/Zend/zend_ts_hash.h
@@ -48,17 +48,15 @@ ZEND_API void zend_ts_hash_clean(TsHashTable *ht);
/* additions/updates/changes */
-ZEND_API zval *_zend_ts_hash_add_or_update(TsHashTable *ht, zend_string *key, zval *pData, int flag ZEND_FILE_LINE_DC);
#define zend_ts_hash_update(ht, key, pData) \
- _zend_ts_hash_add_or_update(ht, key, pData, HASH_UPDATE ZEND_FILE_LINE_CC)
+ _zend_ts_hash_update(ht, key, pData ZEND_FILE_LINE_CC)
#define zend_ts_hash_add(ht, key, pData) \
- _zend_ts_hash_add_or_update(ht, key, pData, HASH_ADD ZEND_FILE_LINE_CC)
+ _zend_ts_hash_add(ht, key, pData ZEND_FILE_LINE_CC)
-ZEND_API zval *_zend_ts_hash_index_add_or_update(TsHashTable *ht, zend_ulong h, zval *pData, int flag ZEND_FILE_LINE_DC);
#define zend_ts_hash_index_update(ht, h, pData) \
- _zend_ts_hash_index_add_or_update(ht, h, pData, HASH_UPDATE ZEND_FILE_LINE_CC)
+ _zend_ts_hash_index_update(ht, h, pData ZEND_FILE_LINE_CC)
#define zend_ts_hash_next_index_insert(ht, pData) \
- _zend_ts_hash_index_add_or_update(ht, ht->nNextFreeElement, pData, HASH_ADD ZEND_FILE_LINE_CC)
+ _zend_ts_hash_next_index_insert(ht, ht->nNextFreeElement, pData ZEND_FILE_LINE_CC)
ZEND_API zval* zend_ts_hash_add_empty_element(TsHashTable *ht, zend_string *key);