mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Hide offset encoding magic in ZEND_MAP_PTR_IS_OFFSET(), ZEND_MAP_PTR_OFFSET2PTR() and ZEND_MAP_PTR_PTR2OFFSET() macros.
This commit is contained in:
parent
9ef07c88bd
commit
8dadca8864
2 changed files with 11 additions and 5 deletions
|
@ -1676,7 +1676,7 @@ ZEND_API void *zend_map_ptr_new(void)
|
||||||
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
|
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
|
||||||
return ptr;
|
return ptr;
|
||||||
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
|
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
|
||||||
return (void*)((CG(map_ptr_last) * sizeof(void*)) - (sizeof(void*) - 1));
|
return ZEND_MAP_PTR_PTR2OFFSET(ptr);
|
||||||
#else
|
#else
|
||||||
# error "Unknown ZEND_MAP_PTR_KIND"
|
# error "Unknown ZEND_MAP_PTR_KIND"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -51,13 +51,19 @@
|
||||||
ptr ## __ptr
|
ptr ## __ptr
|
||||||
# define ZEND_MAP_PTR_DEF(type, name) \
|
# define ZEND_MAP_PTR_DEF(type, name) \
|
||||||
type * ZEND_MAP_PTR(name)
|
type * ZEND_MAP_PTR(name)
|
||||||
|
# define ZEND_MAP_PTR_IS_OFFSET(ptr) \
|
||||||
|
(((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L)
|
||||||
|
# define ZEND_MAP_PTR_OFFSET2PTR(ptr) \
|
||||||
|
((void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1))
|
||||||
|
# define ZEND_MAP_PTR_PTR2OFFSET(ptr) \
|
||||||
|
((void*)((uintptr_t)(((char*)(ptr)) - ((char*)CG(map_ptr_base))) | 1L))
|
||||||
# define ZEND_MAP_PTR_GET(ptr) \
|
# define ZEND_MAP_PTR_GET(ptr) \
|
||||||
((((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L) ? \
|
(ZEND_MAP_PTR_IS_OFFSET(ptr) ? \
|
||||||
*(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1) : \
|
*(ZEND_MAP_PTR_OFFSET2PTR(ptr)) : \
|
||||||
(void*)(*(ZEND_MAP_PTR(ptr))))
|
(void*)(*(ZEND_MAP_PTR(ptr))))
|
||||||
# define ZEND_MAP_PTR_SET(ptr, val) do { \
|
# define ZEND_MAP_PTR_SET(ptr, val) do { \
|
||||||
if (((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L) { \
|
if (ZEND_MAP_PTR_IS_OFFSET(ptr)) { \
|
||||||
*(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1) = (val); \
|
*(ZEND_MAP_PTR_OFFSET2PTR(ptr)) = (val); \
|
||||||
} else { \
|
} else { \
|
||||||
*(ZEND_MAP_PTR(ptr)) = (val); \
|
*(ZEND_MAP_PTR(ptr)) = (val); \
|
||||||
} \
|
} \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue