diff options
Diffstat (limited to 'Zend/zend_hash.h')
-rw-r--r-- | Zend/zend_hash.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index bc88e0efab..b26e0dbd6a 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -304,7 +304,7 @@ END_EXTERN_C() #define ZEND_INIT_SYMTABLE_EX(ht, n, persistent) \ zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent) -#define ZEND_HANDLE_NUMERIC(key, length, func) do { \ +#define ZEND_HANDLE_NUMERIC_EX(key, length, idx, func) do { \ register const char *tmp = key; \ \ if (*tmp == '-') { \ @@ -312,7 +312,6 @@ END_EXTERN_C() } \ if (*tmp >= '0' && *tmp <= '9') { /* possibly a numeric index */ \ const char *end = key + length - 1; \ - long idx; \ \ if ((*end != '\0') /* not a null terminated string */ \ || (*tmp == '0' && length > 2) /* numbers with leading zeros */ \ @@ -335,11 +334,17 @@ END_EXTERN_C() } else if (idx < 0) { /* overflow */ \ break; \ } \ - return func; \ + func; \ } \ } \ } while (0) +#define ZEND_HANDLE_NUMERIC(key, length, func) do { \ + long idx; \ + \ + ZEND_HANDLE_NUMERIC_EX(key, length, idx, return func); \ +} while (0) + static inline int zend_symtable_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest) \ { ZEND_HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_update(ht, idx, pData, nDataSize, pDest)); |