summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-03-26 10:09:49 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-06-11 12:29:55 +0200
commit51fb8dc422a744d502f7d3c293ced916974521d8 (patch)
tree5f283e95de316a4e69ffcda6682bae94f62f836e /Zend
parent67ecc8a3265ff299d85c6b24f445378c2be69b46 (diff)
downloadphp-git-51fb8dc422a744d502f7d3c293ced916974521d8.tar.gz
Add specialized pair construction API
Closes GH-3990.
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_hash.c20
-rw-r--r--Zend/zend_hash.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 56695c4229..3d631526f6 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -258,6 +258,26 @@ ZEND_API HashTable* ZEND_FASTCALL _zend_new_array(uint32_t nSize)
return ht;
}
+ZEND_API HashTable* ZEND_FASTCALL zend_new_pair(zval *val1, zval *val2)
+{
+ Bucket *p;
+ HashTable *ht = emalloc(sizeof(HashTable));
+ _zend_hash_init_int(ht, HT_MIN_SIZE, ZVAL_PTR_DTOR, 0);
+ ht->nNumUsed = ht->nNumOfElements = ht->nNextFreeElement = 2;
+ zend_hash_real_init_packed_ex(ht);
+
+ p = ht->arData;
+ ZVAL_COPY_VALUE(&p->val, val1);
+ p->h = 0;
+ p->key = NULL;
+
+ p++;
+ ZVAL_COPY_VALUE(&p->val, val2);
+ p->h = 1;
+ p->key = NULL;
+ return ht;
+}
+
static void ZEND_FASTCALL zend_hash_packed_grow(HashTable *ht)
{
HT_ASSERT_RC1(ht);
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index 166a9b2d6c..f1e2d34685 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -297,6 +297,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL _zend_new_array_0(void);
ZEND_API HashTable* ZEND_FASTCALL _zend_new_array(uint32_t size);
+ZEND_API HashTable* ZEND_FASTCALL zend_new_pair(zval *val1, zval *val2);
ZEND_API uint32_t zend_array_count(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source);
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht);