summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/generators/yield_from_iterator.phpt21
-rw-r--r--Zend/zend_generators.c2
2 files changed, 22 insertions, 1 deletions
diff --git a/Zend/tests/generators/yield_from_iterator.phpt b/Zend/tests/generators/yield_from_iterator.phpt
new file mode 100644
index 0000000000..959d6a2d33
--- /dev/null
+++ b/Zend/tests/generators/yield_from_iterator.phpt
@@ -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)
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index ea84950691..0ac00afd4b 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -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;