efree_size(ref, sizeof(zend_reference)); \
} while (0)
+#define ZVAL_COPY_UNREF(z, v) do { \
+ zval *_z3 = (v); \
+ if (Z_REFCOUNTED_P(_z3)) { \
+ if (UNEXPECTED(Z_ISREF_P(_z3)) \
+ && UNEXPECTED(Z_REFCOUNT_P(_z3) == 1)) { \
+ ZVAL_UNREF(_z3); \
+ if (Z_REFCOUNTED_P(_z3)) { \
+ Z_ADDREF_P(_z3); \
+ } \
+ } else { \
+ Z_ADDREF_P(_z3); \
+ } \
+ } \
+ ZVAL_COPY_VALUE(z, _z3); \
+ } while (0)
+
+
#define SEPARATE_STRING(zv) do { \
zval *_zv = (zv); \
- if (Z_REFCOUNTED_P(_zv) && \
- Z_REFCOUNT_P(_zv) > 1) { \
- Z_DELREF_P(_zv); \
+ if (Z_REFCOUNT_P(_zv) > 1) { \
+ if (Z_REFCOUNTED_P(_zv)); \
+ Z_DELREF_P(_zv); \
+ } \
zval_copy_ctor_func(_zv); \
} \
} while (0)