helly Mon Feb 6 02:07:09 2006 UTC Modified files: /php-src/ext/spl spl_array.c Log: - Finally enable optimization http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_array.c?r1=1.95&r2=1.96&diff_format=u Index: php-src/ext/spl/spl_array.c diff -u php-src/ext/spl/spl_array.c:1.95 php-src/ext/spl/spl_array.c:1.96 --- php-src/ext/spl/spl_array.c:1.95 Mon Feb 6 01:49:13 2006 +++ php-src/ext/spl/spl_array.c Mon Feb 6 02:07:08 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_array.c,v 1.95 2006/02/06 01:49:13 helly Exp $ */ +/* $Id: spl_array.c,v 1.96 2006/02/06 02:07:08 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -158,9 +158,7 @@ while (parent) { if (parent == U_CLASS_ENTRY(spl_ce_ArrayIterator) || parent == U_CLASS_ENTRY(spl_ce_RecursiveArrayIterator)) { retval.handlers = &spl_handler_ArrayIterator; -#if MBO_0 class_type->get_iterator = spl_array_get_iterator; -#endif break; } else if (parent == U_CLASS_ENTRY(spl_ce_ArrayObject)) { retval.handlers = &spl_handler_ArrayObject; @@ -202,7 +200,7 @@ } if (inherited) { if (class_type->iterator_funcs.zf_rewind->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_REWIND; - if (class_type->iterator_funcs.zf_valid->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_CURRENT; + if (class_type->iterator_funcs.zf_valid->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_VALID; if (class_type->iterator_funcs.zf_key->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_KEY; if (class_type->iterator_funcs.zf_current->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_CURRENT; if (class_type->iterator_funcs.zf_next->common.scope != parent) intern->ar_flags |= SPL_ARRAY_OVERLOADED_NEXT; @@ -668,7 +666,7 @@ /* define an overloaded iterator structure */ typedef struct { - zend_object_iterator intern; + zend_user_iterator intern; spl_array_object *object; } spl_array_it; @@ -676,7 +674,8 @@ { spl_array_it *iterator = (spl_array_it *)iter; - zval_ptr_dtor((zval**)&iterator->intern.data); + zend_user_it_invalidate_current(iter TSRMLS_CC); + zval_ptr_dtor((zval**)&iterator->intern.it.data); efree(iterator); } @@ -755,6 +754,7 @@ if (object->ar_flags & SPL_ARRAY_OVERLOADED_NEXT) { zend_user_it_move_forward(iter TSRMLS_CC); } else { + zend_user_it_invalidate_current(iter TSRMLS_CC); if (!aht) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::current(): Array was modified outside object and is no longer an array"); return; @@ -791,6 +791,7 @@ if (object->ar_flags & SPL_ARRAY_OVERLOADED_REWIND) { zend_user_it_rewind(iter TSRMLS_CC); } else { + zend_user_it_invalidate_current(iter TSRMLS_CC); spl_array_rewind(object TSRMLS_CC); } } @@ -818,8 +819,10 @@ iterator = emalloc(sizeof(spl_array_it)); object->refcount++; - iterator->intern.data = (void*)object; - iterator->intern.funcs = &spl_array_it_funcs; + iterator->intern.it.data = (void*)object; + iterator->intern.it.funcs = &spl_array_it_funcs; + iterator->intern.ce = ce; + iterator->intern.value = NULL; iterator->object = array_object; return (zend_object_iterator*)iterator;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php