Z_SET_REFCOUNT_PP(ppzv_dest, refcount); \
}
-#define SEPARATE_ARG_IF_REF(varptr) \
- if (Z_ISREF_P(varptr)) { \
- ZVAL_DUP(varptr, Z_REFVAL_P(varptr)); \
- } else { \
- Z_ADDREF_P(varptr); \
+#define SEPARATE_ARG_IF_REF(varptr) \
+ if (Z_ISREF_P(varptr)) { \
+ ZVAL_DUP(varptr, Z_REFVAL_P(varptr)); \
+ } else if (IS_REFCOUNTED(Z_TYPE_P(varptr))) { \
+ Z_ADDREF_P(varptr); \
}
#define READY_TO_DESTROY(zv) \
while (param_count-->0) {
zval *param = p-(arg_count--);
- Z_ADDREF_P(param);
+ if (Z_REFCOUNTED_P(param)) {
+ Z_ADDREF_P(param);
+ }
add_next_index_zval(argument_array, param);
}