diff options
| author | Marcus Boerger <helly@php.net> | 2004-04-27 15:38:07 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2004-04-27 15:38:07 +0000 |
| commit | e1cd098925007713926506f44681fbff7f9e7d28 (patch) | |
| tree | c2a24f98bf34765689eeaa379c09fc802a0a053a /Zend/zend_interfaces.c | |
| parent | e780c42f2135862d81b68935279f3345f33f7991 (diff) | |
| download | php-git-e1cd098925007713926506f44681fbff7f9e7d28.tar.gz | |
- no unneccessary retval initialization
- new c-level iterator handler invalidate_current that is optionally
used to clear internal caching like in implementation of Iterator
Diffstat (limited to 'Zend/zend_interfaces.c')
| -rwxr-xr-x | Zend/zend_interfaces.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 2d755191fa..276bcb6412 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -108,7 +108,7 @@ static zval *zend_user_it_new_iterator(zend_class_entry *ce, zval *object TSRMLS /* }}} */ /* {{{ zend_user_it_dtor */ -ZEND_API void zend_user_it_free_current(zend_object_iterator *_iter TSRMLS_DC) +static void zend_user_it_invalidate_current(zend_object_iterator *_iter TSRMLS_DC) { zend_user_iterator *iter = (zend_user_iterator*)_iter; @@ -125,10 +125,7 @@ static void zend_user_it_dtor(zend_object_iterator *_iter TSRMLS_DC) zend_user_iterator *iter = (zend_user_iterator*)_iter; zval *object = (zval*)iter->it.data; - if (iter->value) { - zval_ptr_dtor(&iter->value); - iter->value = NULL; - } + zend_user_it_invalidate_current(iter TSRMLS_CC); zval_ptr_dtor(&object); efree(iter); } @@ -187,8 +184,6 @@ static int zend_user_it_get_current_key(zend_object_iterator *_iter, char **str_ zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_key, "key", &retval); if (!retval) { - *str_key = ""; - *str_key_len = 0; *int_key = 0; zend_error(E_WARNING, "Nothing returned from %s::key()", iter->ce->name); return HASH_KEY_IS_LONG; @@ -197,8 +192,6 @@ static int zend_user_it_get_current_key(zend_object_iterator *_iter, char **str_ default: zend_error(E_WARNING, "Illegal type returned from %s::key()", iter->ce->name); case IS_NULL: - *str_key = ""; - *str_key_len = 0; *int_key = 0; zval_ptr_dtor(&retval); return HASH_KEY_IS_LONG; @@ -206,7 +199,6 @@ static int zend_user_it_get_current_key(zend_object_iterator *_iter, char **str_ case IS_STRING: *str_key = estrndup(retval->value.str.val, retval->value.str.len); *str_key_len = retval->value.str.len+1; - *int_key = 0; zval_ptr_dtor(&retval); return HASH_KEY_IS_STRING; @@ -232,10 +224,7 @@ static void zend_user_it_move_forward(zend_object_iterator *_iter TSRMLS_DC) zend_user_iterator *iter = (zend_user_iterator*)_iter; zval *object = (zval*)iter->it.data; - if (iter->value) { - zval_ptr_dtor(&iter->value); - iter->value = NULL; - } + zend_user_it_invalidate_current(iter TSRMLS_CC); zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_next, "next", NULL); } /* }}} */ @@ -246,6 +235,7 @@ static void zend_user_it_rewind(zend_object_iterator *_iter TSRMLS_DC) zend_user_iterator *iter = (zend_user_iterator*)_iter; zval *object = (zval*)iter->it.data; + zend_user_it_invalidate_current(iter TSRMLS_CC); zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_rewind, "rewind", NULL); } /* }}} */ @@ -256,7 +246,8 @@ zend_object_iterator_funcs zend_interface_iterator_funcs_iterator = { zend_user_it_get_current_data, zend_user_it_get_current_key, zend_user_it_move_forward, - zend_user_it_rewind + zend_user_it_rewind, + zend_user_it_invalidate_current }; /* {{{ zend_user_it_get_iterator */ |
