diff options
author | Marcus Boerger <helly@php.net> | 2004-09-28 22:55:22 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2004-09-28 22:55:22 +0000 |
commit | e39f3f3f487c07e6bdac2dca33bc16bb1e86ec23 (patch) | |
tree | d5295ba1e8af0ccefe0e2b041426570f10c84dab /Zend/zend_objects.c | |
parent | 72b2d1c9ee7d3d7608d55b8db9bfe0ec21981c17 (diff) | |
download | php-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.c | 20 |
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); - } } } |