Author: Alexandre Daubois (alexandre-daubois)
Committer: GitHub (web-flow)
Pusher: iluuu1994
Date: 2025-08-13T13:59:01+02:00
Commit: https://github.com/php/php-src/commit/bf64dfcd99f2f14753d8301dd3d4a85cdd53afc7
Raw diff: https://github.com/php/php-src/commit/bf64dfcd99f2f14753d8301dd3d4a85cdd53afc7.diff
Add an enum for HASH_KEY_IS_* constants (GH-19376)
Changed paths:
M UPGRADING.INTERNALS
M Zend/zend_hash.c
M Zend/zend_hash.h
M Zend/zend_weakrefs.c
M ext/com_dotnet/com_variant.c
M ext/com_dotnet/com_wrapper.c
Diff:
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index e8a5a4ca7831b..b7396941e5023 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -79,6 +79,7 @@ PHP 8.5 INTERNALS UPGRADE NOTES
delayed. Before, errors would be recorded but not delayed.
. zend_mm_refresh_key_child() must be called on any zend_mm_heap inherited
from the parent process after a fork().
+ . HASH_KEY_IS_* constants have been moved in the zend_hash_key_type enum.
- standard
. ext/standard/php_smart_string.h and ext/standard/php_smart_string_public.h
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 8d3f4d1b68816..f48c298f167e7 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -2842,7 +2842,7 @@ ZEND_API zend_result ZEND_FASTCALL zend_hash_move_backwards_ex(const HashTable
*
/* This function should be made binary safe */
-ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string
**str_index, zend_ulong *num_index, const HashPosition *pos)
+ZEND_API zend_hash_key_type ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht,
zend_string **str_index, zend_ulong *num_index, const HashPosition *pos)
{
uint32_t idx;
Bucket *p;
@@ -2889,7 +2889,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable
*h
}
}
-ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_type_ex(const HashTable *ht, const
HashPosition *pos)
+ZEND_API zend_hash_key_type ZEND_FASTCALL zend_hash_get_current_key_type_ex(const HashTable *ht,
const HashPosition *pos)
{
uint32_t idx;
Bucket *p;
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index b2aaecce0d27c..71206e61550bb 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -26,9 +26,11 @@
#include "zend_string.h"
#include "zend_sort.h"
-#define HASH_KEY_IS_STRING 1
-#define HASH_KEY_IS_LONG 2
-#define HASH_KEY_NON_EXISTENT 3
+typedef enum {
+ HASH_KEY_IS_STRING = 1,
+ HASH_KEY_IS_LONG,
+ HASH_KEY_NON_EXISTENT
+} zend_hash_key_type;
#define HASH_UPDATE (1<<0) /* Create new entry, or update the existing one. */
#define HASH_ADD (1<<1) /* Create new entry, or fail if it exists. */
@@ -251,9 +253,9 @@ ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos(const HashTable *h
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_forward_ex(const HashTable *ht, HashPosition
*pos);
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_backwards_ex(const HashTable *ht, HashPosition
*pos);
-ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string
**str_index, zend_ulong *num_index, const HashPosition *pos);
+ZEND_API zend_hash_key_type ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht,
zend_string **str_index, zend_ulong *num_index, const HashPosition *pos);
ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key,
const HashPosition *pos);
-ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_type_ex(const HashTable *ht, const
HashPosition *pos);
+ZEND_API zend_hash_key_type ZEND_FASTCALL zend_hash_get_current_key_type_ex(const HashTable *ht,
const HashPosition *pos);
ZEND_API zval* ZEND_FASTCALL zend_hash_get_current_data_ex(const HashTable *ht, const HashPosition
*pos);
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(const HashTable *ht, HashPosition
*pos);
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_end_ex(const HashTable *ht, HashPosition
*pos);
@@ -270,13 +272,13 @@ static zend_always_inline zend_result zend_hash_move_forward(HashTable *ht) {
static zend_always_inline zend_result zend_hash_move_backwards(HashTable *ht) {
return zend_hash_move_backwards_ex(ht, &ht->nInternalPointer);
}
-static zend_always_inline int zend_hash_get_current_key(const HashTable *ht, zend_string
**str_index, zend_ulong *num_index) {
+static zend_always_inline zend_hash_key_type zend_hash_get_current_key(const HashTable *ht,
zend_string **str_index, zend_ulong *num_index) {
return zend_hash_get_current_key_ex(ht, str_index, num_index, &ht->nInternalPointer);
}
static zend_always_inline void zend_hash_get_current_key_zval(const HashTable *ht, zval *key) {
zend_hash_get_current_key_zval_ex(ht, key, &ht->nInternalPointer);
}
-static zend_always_inline int zend_hash_get_current_key_type(const HashTable *ht) {
+static zend_always_inline zend_hash_key_type zend_hash_get_current_key_type(const HashTable *ht) {
return zend_hash_get_current_key_type_ex(ht, &ht->nInternalPointer);
}
static zend_always_inline zval* zend_hash_get_current_data(const HashTable *ht) {
diff --git a/Zend/zend_weakrefs.c b/Zend/zend_weakrefs.c
index cf363cd12595c..fb564a99e2528 100644
--- a/Zend/zend_weakrefs.c
+++ b/Zend/zend_weakrefs.c
@@ -648,7 +648,7 @@ static void zend_weakmap_iterator_get_current_key(zend_object_iterator *obj_iter
zend_string *string_key;
zend_ulong num_key;
- int key_type = zend_hash_get_current_key_ex(&wm->ht, &string_key, &num_key, pos);
+ zend_hash_key_type key_type = zend_hash_get_current_key_ex(&wm->ht, &string_key,
&num_key, pos);
if (key_type == HASH_KEY_NON_EXISTENT) {
ZVAL_NULL(key);
return;
diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c
index 23cbd078fb472..7e63d66b3d3a1 100644
--- a/ext/com_dotnet/com_variant.c
+++ b/ext/com_dotnet/com_variant.c
@@ -32,7 +32,7 @@ static void safe_array_from_zval(VARIANT *v, zval *z, int codepage)
SAFEARRAY *sa = NULL;
SAFEARRAYBOUND bound;
HashPosition pos;
- int keytype;
+ zend_hash_key_type keytype;
zend_string *strindex;
zend_ulong intindex = 0;
VARIANT *va;
diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c
index 6e885fa802e9f..3d05e17affae7 100644
--- a/ext/com_dotnet/com_wrapper.c
+++ b/ext/com_dotnet/com_wrapper.c
@@ -423,7 +423,7 @@ static void generate_dispids(php_dispatchex *disp)
HashPosition pos;
zend_string *name = NULL;
zval *tmp, tmp2;
- int keytype;
+ zend_hash_key_type keytype;
zend_long pid;
if (disp->dispid_to_name == NULL) {