summaryrefslogtreecommitdiff
path: root/Zend/zend_objects.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2004-09-28 22:55:22 +0000
committerMarcus Boerger <helly@php.net>2004-09-28 22:55:22 +0000
commite39f3f3f487c07e6bdac2dca33bc16bb1e86ec23 (patch)
treed5295ba1e8af0ccefe0e2b041426570f10c84dab /Zend/zend_objects.c
parent72b2d1c9ee7d3d7608d55b8db9bfe0ec21981c17 (diff)
downloadphp-git-e39f3f3f487c07e6bdac2dca33bc16bb1e86ec23.tar.gz
Simplify/Optmize magic method calls (__get/__set/__call/__clone/__destruct)
Diffstat (limited to 'Zend/zend_objects.c')
-rw-r--r--Zend/zend_objects.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 162905256b..30f6297c3d 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -75,7 +75,7 @@ ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handl
*/
old_exception = EG(exception);
EG(exception) = NULL;
- zend_call_method_with_0_params(&obj, object->ce, NULL, "__destruct", NULL);
+ zend_call_method_with_0_params(&obj, object->ce, &object->ce->destructor, ZEND_DESTRUCTOR_FUNC_NAME, NULL);
if (old_exception) {
if (EG(exception)) {
zend_error(E_ERROR, "Ignoring exception from %s::__destruct() while an exception is already active", object->ce->name);
@@ -116,31 +116,15 @@ ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object_va
zend_hash_copy(new_object->properties, old_object->properties, (copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *));
if (old_object->ce->clone) {
zval *new_obj;
- zval *clone_func_name;
- zval *retval_ptr;
- HashTable symbol_table;
MAKE_STD_ZVAL(new_obj);
new_obj->type = IS_OBJECT;
new_obj->value.obj = new_obj_val;
zval_copy_ctor(new_obj);
- /* FIXME: Optimize this so that we use the old_object->ce->clone function pointer instead of the name */
- MAKE_STD_ZVAL(clone_func_name);
- clone_func_name->type = IS_STRING;
- clone_func_name->value.str.val = estrndup("__clone", sizeof("__clone")-1);
- clone_func_name->value.str.len = sizeof("__clone")-1;
+ zend_call_method_with_0_params(&new_obj, old_object->ce, &old_object->ce->clone, ZEND_CLONE_FUNC_NAME, NULL);
- ZEND_INIT_SYMTABLE(&symbol_table);
-
- call_user_function_ex(NULL, &new_obj, clone_func_name, &retval_ptr, 0, NULL, 0, &symbol_table TSRMLS_CC);
-
- zend_hash_destroy(&symbol_table);
zval_ptr_dtor(&new_obj);
- zval_ptr_dtor(&clone_func_name);
- if(retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
}
}