]> granicus.if.org Git - php/commitdiff
Drop Generator::close() method
authorNikita Popov <nikic@php.net>
Mon, 20 Aug 2012 10:53:18 +0000 (12:53 +0200)
committerNikita Popov <nikic@php.net>
Mon, 20 Aug 2012 10:53:18 +0000 (12:53 +0200)
Zend/tests/generators/clone_with_foreach.phpt
Zend/tests/generators/clone_with_stack.phpt
Zend/tests/generators/clone_with_symbol_table.phpt
Zend/tests/generators/clone_with_this.phpt
Zend/tests/generators/close_inside_generator.phpt [deleted file]
Zend/tests/generators/generator_close.phpt [deleted file]
Zend/tests/generators/yield_during_method_call.phpt
Zend/zend_generators.c
Zend/zend_generators.h

index b88733803656224c86d50446b20bd3d71acea7de..b05ed073120dc9bfe90cee09e89d7a745cd8ad39 100644 (file)
@@ -20,7 +20,7 @@ $g2->next();
 var_dump($g1->current());
 var_dump($g2->current());
 
-$g1->close();
+unset($g1);
 $g2->next();
 var_dump($g2->current());
 
index 673c0e5d1e7ebb0d28385bf227e60995728ee141..5a8e6d842ca8e4f6a4dd6617314def0409d0b017 100644 (file)
@@ -10,7 +10,7 @@ function gen() {
 $g1 = gen();
 $g1->rewind();
 $g2 = clone $g1;
-$g1->close();
+unset($g1);
 $g2->send(10);
 
 ?>
index 0d1bd4ec3c426a4010310a3f13413a51b28cdf56..e1fefebd8fa42bbec1373f02330a035f96054c97 100644 (file)
@@ -19,7 +19,7 @@ function gen() {
 $g1 = gen();
 $g1->rewind();
 $g2 = clone $g1;
-$g1->close();
+unset($g1);
 $g2->next();
 
 ?>
index 66efd02987d775e958bbe631a0f1713b6156a9fb..b242d851ebec54e209f06a794e7fd7c03c1c04d8 100644 (file)
@@ -16,7 +16,7 @@ class Test {
 $g1 = (new Test)->gen();
 $g1->rewind(); // goto yield
 $g2 = clone $g1;
-$g1->close();
+unset($g1);
 $g2->next();
 
 ?>
diff --git a/Zend/tests/generators/close_inside_generator.phpt b/Zend/tests/generators/close_inside_generator.phpt
deleted file mode 100644 (file)
index 1df64bf..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Calling close() during the exectution of the generator
---FILE--
-<?php
-
-function gen() {
-    /* Pass the generator object itself in */
-    $gen = yield;
-
-    /* Close generator while it is currently running */
-    $gen->close();
-
-       echo "Still running";
-}
-
-$gen = gen();
-$gen->send($gen);
-
-?>
---EXPECTF--
-Warning: A generator cannot be closed while it is running in %s on line %d
-Still running
diff --git a/Zend/tests/generators/generator_close.phpt b/Zend/tests/generators/generator_close.phpt
deleted file mode 100644 (file)
index 3dec285..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Generator can be closed by calling ->close()
---FILE--
-<?php
-
-function allNumbers() {
-    for ($i = 0; true; ++$i) {
-        yield $i;
-    }
-}
-
-$numbers = allNumbers();
-
-foreach ($numbers as $n) {
-    var_dump($n);
-    if ($n == 9) {
-        $numbers->close();
-    }
-}
-
-?>
---EXPECT--
-int(0)
-int(1)
-int(2)
-int(3)
-int(4)
-int(5)
-int(6)
-int(7)
-int(8)
-int(9)
index e8859ac0c27ed88b4607c3d1d53b4593027593e5..5fbe84fff559b6cec573e3a45d464dbc1c954324 100644 (file)
@@ -20,13 +20,13 @@ $gen->send('foo');
 // test resource cleanup
 $gen = gen();
 $gen->rewind();
-$gen->close();
+unset($gen);
 
 // test cloning
 $g1 = gen();
 $g1->rewind();
 $g2 = clone $g1;
-$g1->close();
+unset($g1);
 $g2->send('bar');
 
 ?>
index 716b0a782edd13c6707573b2bcc7e1188e743533..41c6dfcd946be71a534bf2ba57c25a37686f28e3 100644 (file)
@@ -301,8 +301,6 @@ static zend_object_value zend_generator_create(zend_class_entry *class_type TSRM
        /* The key will be incremented on first use, so it'll start at 0 */
        generator->largest_used_integer_key = -1;
 
-       generator->is_currently_running = 0;
-
        zend_object_std_init(&generator->std, class_type TSRMLS_CC);
 
        object.handle = zend_objects_store_put(generator, NULL,
@@ -391,8 +389,6 @@ static void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */
                zend_class_entry *original_scope = EG(scope);
                zend_class_entry *original_called_scope = EG(called_scope);
 
-               zend_bool original_is_currently_running = generator->is_currently_running;
-
                /* Remember the current stack position so we can back up pushed args */
                generator->original_stack_top = zend_vm_stack_top(TSRMLS_C);
 
@@ -417,8 +413,6 @@ static void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */
                EG(scope) = generator->execute_data->current_scope;
                EG(called_scope) = generator->execute_data->current_called_scope;
 
-               generator->is_currently_running = 1;
-
                /* We want the backtrace to look as if the generator function was
                 * called from whatever method we are current running (e.g. next()).
                 * The first prev_execute_data contains an additional stack frame,
@@ -440,8 +434,6 @@ static void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */
                EG(scope) = original_scope;
                EG(called_scope) = original_called_scope;
 
-               generator->is_currently_running = original_is_currently_running;
-
                /* The stack top before and after the execution differ, i.e. there are
                 * arguments pushed to the stack. */
                if (generator->original_stack_top != zend_vm_stack_top(TSRMLS_C)) {
@@ -598,27 +590,6 @@ ZEND_METHOD(Generator, send)
        }
 }
 
-/* {{{ proto void Generator::close()
- * Closes the generator */
-ZEND_METHOD(Generator, close)
-{
-       zend_generator *generator;
-
-       if (zend_parse_parameters_none() == FAILURE) {
-               return;
-       }
-
-       generator = (zend_generator *) zend_object_store_get_object(getThis() TSRMLS_CC);
-
-       if (generator->is_currently_running) {
-               zend_error(E_WARNING, "A generator cannot be closed while it is running");
-               return;
-       }
-
-       zend_generator_close(generator, 0 TSRMLS_CC);
-}
-/* }}} */
-
 /* get_iterator implementation */
 
 typedef struct _zend_generator_iterator {
@@ -747,7 +718,6 @@ static const zend_function_entry generator_functions[] = {
        ZEND_ME(Generator, key,     arginfo_generator_void, ZEND_ACC_PUBLIC)
        ZEND_ME(Generator, next,    arginfo_generator_void, ZEND_ACC_PUBLIC)
        ZEND_ME(Generator, send,    arginfo_generator_send, ZEND_ACC_PUBLIC)
-       ZEND_ME(Generator, close,   arginfo_generator_void, ZEND_ACC_PUBLIC)
        ZEND_FE_END
 };
 
index d67ea4137bf88f48af5f150acb7af9a288d45119..f58dafdb1f0c34b26bcbd74a04d6d8f13c420db4 100644 (file)
@@ -46,10 +46,6 @@ typedef struct _zend_generator {
        temp_variable *send_target;
        /* Largest used integer key for auto-incrementing keys */
        long largest_used_integer_key;
-
-       /* We need to know whether the generator is currently executed to avoid it
-        * being closed while still running */
-       zend_bool is_currently_running;
 } zend_generator;
 
 extern ZEND_API zend_class_entry *zend_ce_generator;