|
30 | 30 | //# define ZEND_MAP_PTR_KIND ZEND_MAP_PTR_KIND_PTR |
31 | 31 | //#endif |
32 | 32 |
|
33 | | -#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR |
34 | | -# define ZEND_MAP_PTR(ptr) \ |
| 33 | +#define ZEND_MAP_PTR(ptr) \ |
35 | 34 | ptr ## __ptr |
36 | | -# define ZEND_MAP_PTR_DEF(type, name) \ |
| 35 | +#define ZEND_MAP_PTR_DEF(type, name) \ |
37 | 36 | type * ZEND_MAP_PTR(name) |
| 37 | +#define ZEND_MAP_PTR_OFFSET2PTR(offset) \ |
| 38 | + ((void**)((char*)CG(map_ptr_base) + offset)) |
| 39 | +#define ZEND_MAP_PTR_PTR2OFFSET(ptr) \ |
| 40 | + ((void*)(((char*)(ptr)) - ((char*)CG(map_ptr_base)))) |
| 41 | +#define ZEND_MAP_PTR_INIT(ptr, val) do { \ |
| 42 | + ZEND_MAP_PTR(ptr) = (val); \ |
| 43 | + } while (0) |
| 44 | +#define ZEND_MAP_PTR_NEW(ptr) do { \ |
| 45 | + ZEND_MAP_PTR(ptr) = zend_map_ptr_new(); \ |
| 46 | + } while (0) |
| 47 | + |
| 48 | +#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR |
| 49 | +# define ZEND_MAP_PTR_NEW_OFFSET() \ |
| 50 | + ((uint32_t)(uintptr_t)ZEND_MAP_PTR_PTR2OFFSET(zend_map_ptr_new())) |
38 | 51 | # define ZEND_MAP_PTR_GET(ptr) \ |
39 | 52 | (*(ZEND_MAP_PTR(ptr))) |
40 | 53 | # define ZEND_MAP_PTR_GET_IMM(ptr) \ |
|
44 | 57 | } while (0) |
45 | 58 | # define ZEND_MAP_PTR_SET_IMM(ptr, val) \ |
46 | 59 | ZEND_MAP_PTR_SET(ptr, val) |
47 | | -# define ZEND_MAP_PTR_INIT(ptr, val) do { \ |
48 | | - ZEND_MAP_PTR(ptr) = (val); \ |
49 | | - } while (0) |
50 | | -# define ZEND_MAP_PTR_NEW(ptr) do { \ |
51 | | - ZEND_MAP_PTR(ptr) = zend_map_ptr_new(); \ |
52 | | - } while (0) |
53 | 60 | # define ZEND_MAP_PTR_REAL_BASE(base) \ |
54 | 61 | (base) |
55 | 62 | # define ZEND_MAP_PTR_SET_REAL_BASE(base, ptr) do { \ |
56 | 63 | base = (ptr); \ |
57 | 64 | } while (0) |
58 | | -# define ZEND_MAP_PTR_OFFSET2PTR(offset) \ |
59 | | - ((void**)((char*)CG(map_ptr_base) + offset)) |
60 | 65 | #elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET |
61 | | -# define ZEND_MAP_PTR(ptr) \ |
62 | | - ptr ## __ptr |
63 | | -# define ZEND_MAP_PTR_DEF(type, name) \ |
64 | | - type * ZEND_MAP_PTR(name) |
| 66 | +# define ZEND_MAP_PTR_NEW_OFFSET() \ |
| 67 | + ((uint32_t)(uintptr_t)zend_map_ptr_new()) |
65 | 68 | # define ZEND_MAP_PTR_IS_OFFSET(ptr) \ |
66 | 69 | (((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L) |
67 | | -# define ZEND_MAP_PTR_OFFSET2PTR(offset) \ |
68 | | - ((void**)((char*)CG(map_ptr_base) + offset)) |
69 | | -# define ZEND_MAP_PTR_PTR2OFFSET(ptr) \ |
70 | | - ((void*)(((char*)(ptr)) - ((char*)CG(map_ptr_base)))) |
71 | 70 | # define ZEND_MAP_PTR_GET(ptr) \ |
72 | 71 | (*(ZEND_MAP_PTR_IS_OFFSET(ptr) ? \ |
73 | 72 | ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)) : \ |
|
85 | 84 | void **__p = ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)); \ |
86 | 85 | *__p = (val); \ |
87 | 86 | } while (0) |
88 | | -# define ZEND_MAP_PTR_INIT(ptr, val) do { \ |
89 | | - ZEND_MAP_PTR(ptr) = (val); \ |
90 | | - } while (0) |
91 | | -# define ZEND_MAP_PTR_NEW(ptr) do { \ |
92 | | - ZEND_MAP_PTR(ptr) = zend_map_ptr_new(); \ |
93 | | - } while (0) |
94 | 87 | # define ZEND_MAP_PTR_REAL_BASE(base) \ |
95 | 88 | ((void*)(((uintptr_t)(base)) + 1)) |
96 | 89 | # define ZEND_MAP_PTR_SET_REAL_BASE(base, ptr) do { \ |
|
0 commit comments