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