Commit: 72a91d08e7d70d5524feb6cc7c8e32b3bd68f1df Author: Nikita Popov <ni...@php.net> Tue, 29 May 2012 18:11:18 +0200 Parents: 12e928314fb270db31adc361ac4993b4f0fe000a Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=72a91d08e7d70d5524feb6cc7c8e32b3bd68f1df Log: Add $generator->close() method Calling $generator->close() is equivalent to executing a return statement at the current position in the generator. Changed paths: A Zend/tests/generators/generator_close.phpt M Zend/zend_generators.c Diff: diff --git a/Zend/tests/generators/generator_close.phpt b/Zend/tests/generators/generator_close.phpt new file mode 100644 index 0000000..003eef0 --- /dev/null +++ b/Zend/tests/generators/generator_close.phpt @@ -0,0 +1,32 @@ +--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) diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 0cf600a..b2fe8af 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -324,6 +324,22 @@ ZEND_METHOD(Generator, send) zend_generator_resume(object, generator TSRMLS_CC); } +/* {{{ 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); + + zend_generator_close(generator, 0); +} +/* }}} */ + ZEND_BEGIN_ARG_INFO(arginfo_generator_void, 0) ZEND_END_ARG_INFO() @@ -338,6 +354,7 @@ 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 }; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php