File tree 2 files changed +11
-5
lines changed
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)
1676
1676
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
1677
1677
return ptr ;
1678
1678
#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 );
1680
1680
#else
1681
1681
# error "Unknown ZEND_MAP_PTR_KIND"
1682
1682
#endif
Original file line number Diff line number Diff line change 51
51
ptr ## __ptr
52
52
# define ZEND_MAP_PTR_DEF (type , name ) \
53
53
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))
54
60
# 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)) : \
57
63
(void*)(*(ZEND_MAP_PTR(ptr))))
58
64
# 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); \
61
67
} else { \
62
68
*(ZEND_MAP_PTR(ptr)) = (val); \
63
69
} \
You can’t perform that action at this time.
0 commit comments