Skip to content

Commit 40a1fb1

Browse files
committed
Add zend_array_to_list()
1 parent 9f29e2d commit 40a1fb1

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

Zend/zend_hash.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2396,6 +2396,26 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
23962396
return target;
23972397
}
23982398

2399+
ZEND_API HashTable* zend_array_to_list(HashTable *source)
2400+
{
2401+
HashTable *result = _zend_new_array(zend_hash_num_elements(source));
2402+
zend_hash_real_init_packed(result);
2403+
2404+
ZEND_HASH_FILL_PACKED(result) {
2405+
zval *entry;
2406+
2407+
ZEND_HASH_FOREACH_VAL(source, entry) {
2408+
if (UNEXPECTED(Z_ISREF_P(entry) && Z_REFCOUNT_P(entry) == 1)) {
2409+
entry = Z_REFVAL_P(entry);
2410+
}
2411+
Z_TRY_ADDREF_P(entry);
2412+
ZEND_HASH_FILL_ADD(entry);
2413+
} ZEND_HASH_FOREACH_END();
2414+
} ZEND_HASH_FILL_END();
2415+
2416+
return result;
2417+
}
2418+
23992419

24002420
ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, bool overwrite)
24012421
{

Zend/zend_hash.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_new_pair(zval *val1, zval *val2);
320320
ZEND_API uint32_t zend_array_count(HashTable *ht);
321321
ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source);
322322
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht);
323+
ZEND_API HashTable* zend_array_to_list(HashTable *source);
323324
ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht);
324325
ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht);
325326
ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, bool always_duplicate);

0 commit comments

Comments
 (0)