- don't make these zvals references
[m6w6/ext-http] / php_http_std_defs.h
index 6bde00ce11952f647dd2fe2bae6440c45a39b422..bf0871e989d8dce8709115f4d40a77dbb9b04690 100644 (file)
@@ -71,7 +71,7 @@ typedef int STATUS;
        RETVAL_OBJVAL(ov); \
        return
 #define ZVAL_OBJVAL(zv, ov) \
-       (zv)->is_ref = 1; \
+       INIT_PZVAL(zv); \
        (zv)->type = IS_OBJECT; \
        (zv)->value.obj = (ov); \
        if (Z_OBJ_HT_P(zv)->add_ref) { \
@@ -192,7 +192,7 @@ typedef int STATUS;
        { \
                zend_class_entry ce; \
                INIT_CLASS_ENTRY(ce, #classname, name## _fe); \
-               ce.create_object = name## _new; \
+               ce.create_object = _ ##name## _new; \
                name## _ce = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
                name## _ce->ce_flags |= flags;  \
                memcpy(& name## _handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
@@ -219,7 +219,7 @@ typedef int STATUS;
 
 #      define getObject(t, o) getObjectEx(t, o, getThis())
 #      define getObjectEx(t, o, v) t * o = ((t *) zend_object_store_get_object(v TSRMLS_CC))
-#      define putObject(t, o) zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) t## _free, NULL TSRMLS_CC);
+#      define putObject(t, o) zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) _ ##t## _free, NULL TSRMLS_CC);
 #      define OBJ_PROP(o) (o)->zo.properties
 
 #      define DCL_STATIC_PROP(a, t, n, v)              zend_declare_property_ ##t(ce, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a | ZEND_ACC_STATIC) TSRMLS_CC)
@@ -264,6 +264,18 @@ typedef int STATUS;
                } \
        }
 
+/*
+ * the property *MUST* be updated after SEP_PROP()
+ */ 
+#      define SEP_PROP(zpp) \
+       { \
+               zval **op = zpp; \
+               SEPARATE_ZVAL_IF_NOT_REF(zpp); \
+               if (op != zpp) { \
+                       zval_ptr_dtor(op); \
+               } \
+       }
+
 #      define SET_EH_THROW() SET_EH_THROW_EX(zend_exception_get_default())
 #      define SET_EH_THROW_HTTP() SET_EH_THROW_EX(http_exception_get_default())
 #      define SET_EH_THROW_EX(ex) php_set_error_handling(EH_THROW, ex TSRMLS_CC)