]> granicus.if.org Git - php/commitdiff
Fix yield from with iterator (first element missing)
authorBob Weinand <bobwei9@hotmail.com>
Tue, 21 Apr 2015 17:41:51 +0000 (19:41 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Tue, 21 Apr 2015 17:42:23 +0000 (19:42 +0200)
Zend/tests/generators/yield_from_iterator.phpt [new file with mode: 0644]
Zend/zend_generators.c

diff --git a/Zend/tests/generators/yield_from_iterator.phpt b/Zend/tests/generators/yield_from_iterator.phpt
new file mode 100644 (file)
index 0000000..959d6a2
--- /dev/null
@@ -0,0 +1,21 @@
+--TEST--
+yield from with an (Array)Iterator
+--FILE--
+<?php
+function g() {
+       yield 1;
+       yield from new ArrayIterator([2, 3, 4]);
+       yield 5;
+}
+
+$g = g();
+foreach ($g as $yielded) {
+       var_dump($yielded);
+}
+?>
+--EXPECT--
+int(1)
+int(2)
+int(3)
+int(4)
+int(5)
index ea84950691d27e2bd0aa02cc2fe3ded6fc14e624..0ac00afd4b5ded1381594f5824994ac28c02f99f 100644 (file)
@@ -603,7 +603,7 @@ static int zend_generator_get_next_delegated_value(zend_generator *generator) /*
        } else {
                zend_object_iterator *iter = (zend_object_iterator *) Z_OBJ(generator->values);
 
-               if (++iter->index > 0) {
+               if (iter->index++ > 0) {
                        iter->funcs->move_forward(iter);
                        if (UNEXPECTED(EG(exception) != NULL)) {
                                goto failure;