- Pass TSRMLS to callbacks.

This commit is contained in:
Andi Gutmans 2002-03-15 16:26:17 +00:00
parent db84afb206
commit c84a4ead95
5 changed files with 29 additions and 25 deletions

View file

@ -2538,7 +2538,7 @@ send_by_ref:
EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr; 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); 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->type = IS_OBJECT;
EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount=1; EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount=1;
EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1; EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1;
@ -2819,7 +2819,7 @@ send_by_ref:
if (Z_TYPE_PP(object) != IS_OBJECT) { if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type"); 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); zend_hash_del(EG(active_symbol_table), variable->value.str.val, variable->value.str.len+1);
@ -2871,7 +2871,7 @@ send_by_ref:
if (Z_TYPE_PP(object) != IS_OBJECT) { if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type"); 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); zend_hash_index_del(ht, index);
@ -2885,7 +2885,7 @@ send_by_ref:
if (Z_TYPE_PP(object) != IS_OBJECT) { if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type"); 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); zend_hash_del(ht, offset->value.str.val, offset->value.str.len+1);
@ -2898,7 +2898,7 @@ send_by_ref:
if (Z_TYPE_PP(object) != IS_OBJECT) { if (Z_TYPE_PP(object) != IS_OBJECT) {
zend_error(E_ERROR, "Cannot call delete on non-object type"); 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("")); zend_hash_del(ht, "", sizeof(""));

View file

@ -38,10 +38,10 @@ typedef union _zend_function *(*zend_object_get_constructor_t)(zval *object TSRM
/* Get method parameter mask - by value/by reference, etc. */ /* Get method parameter mask - by value/by reference, etc. */
/* Object maintenance/destruction */ /* Object maintenance/destruction */
typedef void (*zend_object_add_ref_t)(zval *object); typedef void (*zend_object_add_ref_t)(zval *object TSRMLS_DC);
typedef void (*zend_object_del_ref_t)(zval *object); typedef void (*zend_object_del_ref_t)(zval *object TSRMLS_DC);
typedef void (*zend_object_delete_obj_t)(zval *object); typedef void (*zend_object_delete_obj_t)(zval *object TSRMLS_DC);
typedef zend_object_value (*zend_object_clone_obj_t)(zval *object); 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_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); typedef int (*zend_object_compare_t)(zval *object1, zval *object2 TSRMLS_DC);

View file

@ -121,10 +121,9 @@ zend_object *zend_objects_get_address(zval *zobject)
return &EG(objects).object_buckets[handle].bucket.obj.object; 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); zend_object_handle handle = Z_OBJ_HANDLE_P(object);
TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) { if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to add reference to invalid object"); zend_error(E_ERROR, "Trying to add reference to invalid object");
@ -136,11 +135,10 @@ void zend_objects_add_ref(zval *object)
#endif #endif
} }
void zend_objects_delete_obj(zval *zobject) void zend_objects_delete_obj(zval *zobject TSRMLS_DC)
{ {
zend_object *object; zend_object *object;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) { if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to delete invalid object"); zend_error(E_ERROR, "Trying to delete invalid object");
@ -166,10 +164,9 @@ void zend_objects_delete_obj(zval *zobject)
EG(objects).free_list_head = handle; \ EG(objects).free_list_head = handle; \
EG(objects).object_buckets[handle].valid = 0; 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); zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
TSRMLS_FETCH();
if (--EG(objects).object_buckets[handle].bucket.obj.refcount == 0) { if (--EG(objects).object_buckets[handle].bucket.obj.refcount == 0) {
zend_object *object; zend_object *object;
@ -199,14 +196,13 @@ void zend_objects_del_ref(zval *zobject)
#endif #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_value retval;
zend_object *old_object; zend_object *old_object;
zend_object *new_object; zend_object *new_object;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) { if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to clone invalid object"); zend_error(E_ERROR, "Trying to clone invalid object");

View file

@ -31,10 +31,10 @@ zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class
zend_object *zend_objects_get_address(zval *object); zend_object *zend_objects_get_address(zval *object);
void zend_objects_add_ref(zval *object); void zend_objects_add_ref(zval *object TSRMLS_DC);
void zend_objects_del_ref(zval *object); void zend_objects_del_ref(zval *object TSRMLS_DC);
void zend_objects_delete_obj(zval *object); void zend_objects_delete_obj(zval *object TSRMLS_DC);
zend_object_value zend_objects_clone_obj(zval *object); zend_object_value zend_objects_clone_obj(zval *object TSRMLS_DC);
#define Z_GET_OBJ(object_zval) zend_objects_get_address(object_zval) #define Z_GET_OBJ(object_zval) zend_objects_get_address(object_zval)

View file

@ -54,9 +54,14 @@ ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
} }
break; break;
case IS_OBJECT: case IS_OBJECT:
Z_OBJ_HT_P(zvalue)->del_ref(zvalue); {
TSRMLS_FETCH();
Z_OBJ_HT_P(zvalue)->del_ref(zvalue TSRMLS_CC);
}
break; break;
case IS_RESOURCE: { case IS_RESOURCE:
{
TSRMLS_FETCH(); TSRMLS_FETCH();
/* destroy resource */ /* destroy resource */
@ -119,11 +124,14 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
} }
break; break;
case IS_OBJECT: case IS_OBJECT:
{
TSRMLS_FETCH();
#if 0 #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 #else
Z_OBJ_HT_P(zvalue)->add_ref(zvalue); Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC);
#endif #endif
}
break; break;
} }
return SUCCESS; return SUCCESS;