File tree Expand file tree Collapse file tree 2 files changed +11
-5
lines changed
Expand file tree Collapse file tree 2 files changed +11
-5
lines changed Original file line number Diff line number Diff line change @@ -1676,7 +1676,7 @@ ZEND_API void *zend_map_ptr_new(void)
16761676#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
16771677 return ptr ;
16781678#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
1679- return ( void * )(( CG ( map_ptr_last ) * sizeof ( void * )) - ( sizeof ( void * ) - 1 ) );
1679+ return ZEND_MAP_PTR_PTR2OFFSET ( ptr );
16801680#else
16811681# error "Unknown ZEND_MAP_PTR_KIND"
16821682#endif
Original file line number Diff line number Diff line change 5151 ptr ## __ptr
5252# define ZEND_MAP_PTR_DEF (type , name ) \
5353 type * ZEND_MAP_PTR(name)
54+ # define ZEND_MAP_PTR_IS_OFFSET (ptr ) \
55+ (((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L)
56+ # define ZEND_MAP_PTR_OFFSET2PTR (ptr ) \
57+ ((void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1))
58+ # define ZEND_MAP_PTR_PTR2OFFSET (ptr ) \
59+ ((void*)((uintptr_t)(((char*)(ptr)) - ((char*)CG(map_ptr_base))) | 1L))
5460# define ZEND_MAP_PTR_GET (ptr ) \
55- ((((uintptr_t)ZEND_MAP_PTR( ptr)) & 1L ) ? \
56- *(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR( ptr) - 1 ) : \
61+ (ZEND_MAP_PTR_IS_OFFSET( ptr) ? \
62+ *(ZEND_MAP_PTR_OFFSET2PTR( ptr)) : \
5763 (void*)(*(ZEND_MAP_PTR(ptr))))
5864# define ZEND_MAP_PTR_SET (ptr , val ) do { \
59- if (((uintptr_t)ZEND_MAP_PTR( ptr)) & 1L ) { \
60- *(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR( ptr) - 1 ) = (val); \
65+ if (ZEND_MAP_PTR_IS_OFFSET( ptr)) { \
66+ *(ZEND_MAP_PTR_OFFSET2PTR( ptr)) = (val); \
6167 } else { \
6268 *(ZEND_MAP_PTR(ptr)) = (val); \
6369 } \
You can’t perform that action at this time.
0 commit comments