From 9b660af42bd2bfac7a9a22098b09a2b6b5c3670f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 5 May 2026 20:16:23 +0200 Subject: [PATCH] zend_types: Convert `Z_*REF*_P()` macros into inline functions --- Zend/zend_types.h | 49 +++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/Zend/zend_types.h b/Zend/zend_types.h index f3039d202519..815047a9d87f 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -1345,54 +1345,49 @@ static zend_always_inline uint32_t zend_gc_delref_ex(zend_refcounted_h *p, uint3 Z_TYPE_INFO_P(z) = _IS_ERROR; \ } while (0) -#define Z_REFCOUNT_P(pz) zval_refcount_p(pz) -#define Z_SET_REFCOUNT_P(pz, rc) zval_set_refcount_p(pz, rc) -#define Z_ADDREF_P(pz) zval_addref_p(pz) -#define Z_DELREF_P(pz) zval_delref_p(pz) - -#define Z_REFCOUNT(z) Z_REFCOUNT_P(&(z)) -#define Z_SET_REFCOUNT(z, rc) Z_SET_REFCOUNT_P(&(z), rc) -#define Z_ADDREF(z) Z_ADDREF_P(&(z)) -#define Z_DELREF(z) Z_DELREF_P(&(z)) - -#define Z_TRY_ADDREF_P(pz) do { \ - zval *_pz = (pz); \ - if (Z_REFCOUNTED_P(_pz)) { \ - Z_ADDREF_P(_pz); \ - } \ -} while (0) - -#define Z_TRY_DELREF_P(pz) do { \ - zval *_pz = (pz); \ - if (Z_REFCOUNTED_P(_pz)) { \ - Z_DELREF_P(_pz); \ - } \ -} while (0) - -#define Z_TRY_ADDREF(z) Z_TRY_ADDREF_P(&(z)) -#define Z_TRY_DELREF(z) Z_TRY_DELREF_P(&(z)) - static zend_always_inline uint32_t zval_refcount_p(const zval* pz) { #if ZEND_DEBUG ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_TYPE_P(pz) == IS_ARRAY); #endif return GC_REFCOUNT(Z_COUNTED_P(pz)); } +static zend_always_inline uint32_t Z_REFCOUNT_P(const zval *z) { return zval_refcount_p(z); } +#define Z_REFCOUNT(z) Z_REFCOUNT_P(&(z)) static zend_always_inline uint32_t zval_set_refcount_p(zval* pz, uint32_t rc) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_SET_REFCOUNT(Z_COUNTED_P(pz), rc); } +static zend_always_inline uint32_t Z_SET_REFCOUNT_P(zval *z, uint32_t rc) { return zval_set_refcount_p(z, rc); } +#define Z_SET_REFCOUNT(z, rc) Z_SET_REFCOUNT_P(&(z), rc) static zend_always_inline uint32_t zval_addref_p(zval* pz) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_ADDREF(Z_COUNTED_P(pz)); } +static zend_always_inline uint32_t Z_ADDREF_P(zval *z) { return zval_addref_p(z); } +#define Z_ADDREF(z) Z_ADDREF_P(&(z)) static zend_always_inline uint32_t zval_delref_p(zval* pz) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_DELREF(Z_COUNTED_P(pz)); } +static zend_always_inline uint32_t Z_DELREF_P(zval *z) { return zval_delref_p(z); } +#define Z_DELREF(z) Z_DELREF_P(&(z)) + +static zend_always_inline void Z_TRY_ADDREF_P(zval *z) { + if (Z_REFCOUNTED_P(z)) { + Z_ADDREF_P(z); + } +} +#define Z_TRY_ADDREF(z) Z_TRY_ADDREF_P(&(z)) + +static zend_always_inline void Z_TRY_DELREF_P(zval *z) { + if (Z_REFCOUNTED_P(z)) { + Z_DELREF_P(z); + } +} +#define Z_TRY_DELREF(z) Z_TRY_DELREF_P(&(z)) #if SIZEOF_SIZE_T == 4 # define ZVAL_COPY_VALUE_EX(z, v, gc, t) \