Commit:    cc07038fa9b2a59893c52fb0c515a1fb03e56d5c
Author:    Nikita Popov <ni...@php.net>         Wed, 29 Aug 2012 20:31:34 +0200
Parents:   d60e3c6ef53986e82178bb657ad907edc16d2c34
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=cc07038fa9b2a59893c52fb0c515a1fb03e56d5c

Log:
Make sure that exception is thrown on rewind() after closing too

Changed paths:
  M  Zend/tests/generators/generator_rewind.phpt
  M  Zend/zend_generators.c


Diff:
diff --git a/Zend/tests/generators/generator_rewind.phpt 
b/Zend/tests/generators/generator_rewind.phpt
index 3224f6a..af885ef 100644
--- a/Zend/tests/generators/generator_rewind.phpt
+++ b/Zend/tests/generators/generator_rewind.phpt
@@ -21,6 +21,14 @@ try {
     echo "\n", $e, "\n\n";
 }
 
+$gen = gen();
+foreach ($gen as $v) { }
+try {
+    foreach ($gen as $v) { }
+} catch (Exception $e) {
+    echo "\n", $e, "\n\n";
+}
+
 function gen2() {
     echo "in generator\n";
 
@@ -40,4 +48,12 @@ Stack trace:
 #0 %s(%d): Generator->rewind()
 #1 {main}
 
+before yield
+after yield
+
+exception 'Exception' with message 'Cannot rewind a generator that was already 
run' in %s:%d
+Stack trace:
+#0 %s(%d): unknown()
+#1 {main}
+
 in generator
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 03294f7..0eb17d0 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -500,7 +500,7 @@ void zend_generator_resume(zend_generator *generator 
TSRMLS_DC) /* {{{ */
 
 static void zend_generator_ensure_initialized(zend_generator *generator 
TSRMLS_DC) /* {{{ */
 {
-       if (!generator->value) {
+       if (generator->execute_data && !generator->value) {
                zend_generator_resume(generator TSRMLS_CC);
                generator->flags |= ZEND_GENERATOR_AT_FIRST_YIELD;
        }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to