mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
- Pass TSRMLS to callbacks.
This commit is contained in:
parent
db84afb206
commit
c84a4ead95
5 changed files with 29 additions and 25 deletions
|
@ -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(""));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue