]> granicus.if.org Git - php/commitdiff
- Don't call beginChildren/endChildren if they don't do anything
authorMarcus Boerger <helly@php.net>
Mon, 1 Nov 2004 23:16:43 +0000 (23:16 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 1 Nov 2004 23:16:43 +0000 (23:16 +0000)
ext/spl/spl_iterators.c

index df306f0c5573df588f9a405c542e56040e21ad54..86ae919c2cfd9935ecefc2a69d52469d70775a29 100755 (executable)
@@ -231,7 +231,9 @@ next_step:
                                if (sub_iter->funcs->rewind) {
                                        sub_iter->funcs->rewind(sub_iter TSRMLS_CC);
                                }
-                               zend_call_method_with_0_params(&zthis, object->ce, &object->beginChildren, "beginchildren", NULL);
+                               if (!object->beginChildren || object->beginChildren->common.scope != spl_ce_RecursiveIteratorIterator) {
+                                       zend_call_method_with_0_params(&zthis, object->ce, &object->beginChildren, "beginchildren", NULL);
+                               }
                                goto next_step;
                }
                /* no more elements */
@@ -239,7 +241,9 @@ next_step:
                        iterator->funcs->dtor(iterator TSRMLS_CC);
                        zval_ptr_dtor(&object->iterators[object->level].zobject);
                        object->level--;
-                       zend_call_method_with_0_params(&zthis, object->ce, &object->endChildren, "endchildren", NULL);
+                       if (!object->endChildren || object->endChildren->common.scope != spl_ce_RecursiveIteratorIterator) {
+                               zend_call_method_with_0_params(&zthis, object->ce, &object->endChildren, "endchildren", NULL);
+                       }
                } else {
                        return; /* done completeley */
                }
@@ -254,7 +258,9 @@ static void spl_recursive_it_rewind_ex(spl_recursive_it_object *object, zval *zt
                sub_iter = object->iterators[object->level].iterator;
                sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
                zval_ptr_dtor(&object->iterators[object->level--].zobject);
-               zend_call_method_with_0_params(&zthis, object->ce, &object->endChildren, "endchildren", NULL);
+               if (!object->endChildren || object->endChildren->common.scope != spl_ce_RecursiveIteratorIterator) {
+                       zend_call_method_with_0_params(&zthis, object->ce, &object->endChildren, "endchildren", NULL);
+               }
        }
        erealloc(object->iterators, sizeof(spl_sub_iterator));
        object->iterators[0].state = RS_START;