EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr;
ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr);
- EX(Ts)[EX(opline)->result.u.var].var.ptr->value.obj = Z_OBJ_HT_P(obj)->clone_obj(obj);
+ EX(Ts)[EX(opline)->result.u.var].var.ptr->value.obj = Z_OBJ_HT_P(obj)->clone_obj(obj TSRMLS_CC);
EX(Ts)[EX(opline)->result.u.var].var.ptr->type = IS_OBJECT;
EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount=1;
EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1;
if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type");
}
- Z_OBJ_HT_PP(object)->delete_obj((*object));
+ Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
}
zend_hash_del(EG(active_symbol_table), variable->value.str.val, variable->value.str.len+1);
if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type");
}
- Z_OBJ_HT_PP(object)->delete_obj(*object);
+ Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
}
zend_hash_index_del(ht, index);
if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type");
}
- Z_OBJ_HT_PP(object)->delete_obj(*object);
+ Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
}
zend_hash_del(ht, offset->value.str.val, offset->value.str.len+1);
if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type");
}
- Z_OBJ_HT_PP(object)->delete_obj(*object);
+ Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
}
zend_hash_del(ht, "", sizeof(""));
/* Get method parameter mask - by value/by reference, etc. */
/* Object maintenance/destruction */
-typedef void (*zend_object_add_ref_t)(zval *object);
-typedef void (*zend_object_del_ref_t)(zval *object);
-typedef void (*zend_object_delete_obj_t)(zval *object);
-typedef zend_object_value (*zend_object_clone_obj_t)(zval *object);
+typedef void (*zend_object_add_ref_t)(zval *object TSRMLS_DC);
+typedef void (*zend_object_del_ref_t)(zval *object TSRMLS_DC);
+typedef void (*zend_object_delete_obj_t)(zval *object TSRMLS_DC);
+typedef zend_object_value (*zend_object_clone_obj_t)(zval *object TSRMLS_DC);
typedef int (*zend_object_get_class_name_t)(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC);
typedef int (*zend_object_compare_t)(zval *object1, zval *object2 TSRMLS_DC);
return &EG(objects).object_buckets[handle].bucket.obj.object;
}
-void zend_objects_add_ref(zval *object)
+void zend_objects_add_ref(zval *object TSRMLS_DC)
{
zend_object_handle handle = Z_OBJ_HANDLE_P(object);
- TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to add reference to invalid object");
#endif
}
-void zend_objects_delete_obj(zval *zobject)
+void zend_objects_delete_obj(zval *zobject TSRMLS_DC)
{
zend_object *object;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
- TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to delete invalid object");
EG(objects).free_list_head = handle; \
EG(objects).object_buckets[handle].valid = 0;
-void zend_objects_del_ref(zval *zobject)
+void zend_objects_del_ref(zval *zobject TSRMLS_DC)
{
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
- TSRMLS_FETCH();
if (--EG(objects).object_buckets[handle].bucket.obj.refcount == 0) {
zend_object *object;
#endif
}
-zend_object_value zend_objects_clone_obj(zval *zobject)
+zend_object_value zend_objects_clone_obj(zval *zobject TSRMLS_DC)
{
zend_object_value retval;
zend_object *old_object;
zend_object *new_object;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
- TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to clone invalid object");
zend_object *zend_objects_get_address(zval *object);
-void zend_objects_add_ref(zval *object);
-void zend_objects_del_ref(zval *object);
-void zend_objects_delete_obj(zval *object);
-zend_object_value zend_objects_clone_obj(zval *object);
+void zend_objects_add_ref(zval *object TSRMLS_DC);
+void zend_objects_del_ref(zval *object TSRMLS_DC);
+void zend_objects_delete_obj(zval *object TSRMLS_DC);
+zend_object_value zend_objects_clone_obj(zval *object TSRMLS_DC);
#define Z_GET_OBJ(object_zval) zend_objects_get_address(object_zval)
}
break;
case IS_OBJECT:
- Z_OBJ_HT_P(zvalue)->del_ref(zvalue);
+ {
+ TSRMLS_FETCH();
+
+ Z_OBJ_HT_P(zvalue)->del_ref(zvalue TSRMLS_CC);
+ }
break;
- case IS_RESOURCE: {
+ case IS_RESOURCE:
+ {
TSRMLS_FETCH();
/* destroy resource */
}
break;
case IS_OBJECT:
+ {
+ TSRMLS_FETCH();
#if 0
- zvalue->value.obj = zvalue->value.obj.handlers->clone_obj(zvalue->value.obj.handle);
+ zvalue->value.obj = zvalue->value.obj.handlers->clone_obj(zvalue->value.obj.handle);
#else
- Z_OBJ_HT_P(zvalue)->add_ref(zvalue);
+ Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC);
#endif
+ }
break;
}
return SUCCESS;