From: Wez Furlong Date: Mon, 17 May 2004 11:27:16 +0000 (+0000) Subject: As discussed with Andi, add this helper API for setting the object pointer from X-Git-Tag: RELEASE_0_1~183 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3a4f33e31ff77da46b24b2651fed259ca52104c6;p=php As discussed with Andi, add this helper API for setting the object pointer from within the constructor. Please read the comment for notes about how to use it; in general, you don't need it, so don't use it. --- diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 95a36a1781..69a33b525b 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -190,6 +190,20 @@ ZEND_API void *zend_object_store_get_object(zval *zobject TSRMLS_DC) return EG(objects_store).object_buckets[handle].bucket.obj.object; } +/* zend_object_store_set_object: + * It is ONLY valid to call this function from within the constructor of an + * overloaded object. Its purpose is to set the object pointer for the object + * when you can't possibly know its value until you have parsed the arguments + * from the constructor function. You MUST NOT use this function for any other + * weird games, or call it at any other time after the object is constructed. + * */ +ZEND_API void zend_object_store_set_object(zval *zobject, void *object TSRMLS_DC) +{ + zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); + + EG(objects_store).object_buckets[handle].bucket.obj.object = object; +} + /* Proxy objects workings */ typedef struct _zend_proxy_object { diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index 469fb6a5d1..cfe9d3a662 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -67,6 +67,9 @@ ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC); ZEND_API void zend_objects_store_delete_obj(zval *object TSRMLS_DC); ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC); ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC); +/* See comment in zend_objects_API.c before you use this */ +ZEND_API void zend_object_store_set_object(zval *zobject, void *object TSRMLS_DC); + ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects TSRMLS_DC); #define ZEND_OBJECTS_STORE_HANDLERS zend_objects_store_add_ref, zend_objects_store_del_ref, zend_objects_store_clone_obj