summaryrefslogtreecommitdiff
path: root/ext/spl
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-26 15:01:08 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-26 15:01:08 +0400
commit495551aa8c3d66ee16ab91c1fb97329f10c0632c (patch)
tree19f39597305afd611b7a6788964f7f14ff120208 /ext/spl
parenta4a86df3c0c47362a6932585a447f87dc9823451 (diff)
downloadphp-git-495551aa8c3d66ee16ab91c1fb97329f10c0632c.tar.gz
Fixed iterators API. zend_iterator_init() has to be used in each get_iterator() callback.
Diffstat (limited to 'ext/spl')
-rw-r--r--ext/spl/spl_array.c2
-rw-r--r--ext/spl/spl_dllist.c3
-rw-r--r--ext/spl/spl_fixedarray.c3
-rw-r--r--ext/spl/spl_heap.c6
-rw-r--r--ext/spl/spl_iterators.c2
5 files changed, 16 insertions, 0 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index e272a145e5..e552ca8fb4 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -1148,6 +1148,8 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
iterator = emalloc(sizeof(spl_array_it));
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
Z_ADDREF_P(object);
iterator->intern.it.data = (void*)object;
iterator->intern.it.funcs = &spl_array_it_funcs;
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index fbe249456e..99863626bc 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1291,6 +1291,9 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
Z_ADDREF_P(object);
iterator = emalloc(sizeof(spl_dllist_it));
+
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
iterator->intern.it.data = (void*)object;
iterator->intern.it.funcs = &spl_dllist_it_funcs;
iterator->intern.ce = ce;
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 075df9b2b7..9e5e8b590c 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -1052,6 +1052,9 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob
Z_ADDREF_P(object);
iterator = emalloc(sizeof(spl_fixedarray_it));
+
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
iterator->intern.it.data = object;
iterator->intern.it.funcs = &spl_fixedarray_it_funcs;
iterator->intern.ce = ce;
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index 9159000799..2afee6cd49 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -1091,6 +1091,9 @@ zend_object_iterator *spl_heap_get_iterator(zend_class_entry *ce, zval *object,
Z_ADDREF_P(object);
iterator = emalloc(sizeof(spl_heap_it));
+
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
iterator->intern.it.data = (void*)object;
iterator->intern.it.funcs = &spl_heap_it_funcs;
iterator->intern.ce = ce;
@@ -1115,6 +1118,9 @@ zend_object_iterator *spl_pqueue_get_iterator(zend_class_entry *ce, zval *object
Z_ADDREF_P(object);
iterator = emalloc(sizeof(spl_heap_it));
+
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
iterator->intern.it.data = (void*)object;
iterator->intern.it.funcs = &spl_pqueue_it_funcs;
iterator->intern.ce = ce;
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 81d1ecc4bc..2891f3ce9b 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -423,6 +423,8 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
"the parent constructor has not been called");
}
+ zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC);
+
Z_ADDREF_P(zobject);
iterator->intern.data = (void*)object;
iterator->intern.funcs = ce->iterator_funcs.funcs;