summaryrefslogtreecommitdiff
path: root/Zend/zend_generators.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-27 15:40:51 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-27 15:40:51 +0400
commit4ba590697eaac2242389f78110b60ddd4c29a779 (patch)
tree7319bb36c8310ad2fb5f8198598864847c23cc8a /Zend/zend_generators.c
parent1c3ba95bb547f8d9b0bd0496238a76ef6a706b07 (diff)
parent382b0dfdb7d2ae654f6aeba049ee80c3cd70ff9a (diff)
downloadphp-git-4ba590697eaac2242389f78110b60ddd4c29a779.tar.gz
Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2
Diffstat (limited to 'Zend/zend_generators.c')
-rw-r--r--Zend/zend_generators.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 78cb346eb7..7fb12c3cc2 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -589,15 +589,13 @@ ZEND_METHOD(Generator, __wakeup)
static void zend_generator_iterator_dtor(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zval *object = ((zend_generator_iterator *) iterator)->object;
-
- zval_ptr_dtor(object);
+ zval_ptr_dtor(&iterator->data);
}
/* }}} */
static int zend_generator_iterator_valid(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zend_generator *generator = (zend_generator *) iterator->data;
+ zend_generator *generator = (zend_generator*)Z_OBJ(iterator->data);
zend_generator_ensure_initialized(generator TSRMLS_CC);
@@ -607,7 +605,7 @@ static int zend_generator_iterator_valid(zend_object_iterator *iterator TSRMLS_D
static zval *zend_generator_iterator_get_data(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zend_generator *generator = (zend_generator *) iterator->data;
+ zend_generator *generator = (zend_generator*)Z_OBJ(iterator->data);
zend_generator_ensure_initialized(generator TSRMLS_CC);
@@ -617,7 +615,7 @@ static zval *zend_generator_iterator_get_data(zend_object_iterator *iterator TSR
static void zend_generator_iterator_get_key(zend_object_iterator *iterator, zval *key TSRMLS_DC) /* {{{ */
{
- zend_generator *generator = (zend_generator *) iterator->data;
+ zend_generator *generator = (zend_generator*)Z_OBJ(iterator->data);
zend_generator_ensure_initialized(generator TSRMLS_CC);
@@ -631,7 +629,7 @@ static void zend_generator_iterator_get_key(zend_object_iterator *iterator, zval
static void zend_generator_iterator_move_forward(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zend_generator *generator = (zend_generator *) iterator->data;
+ zend_generator *generator = (zend_generator*)Z_OBJ(iterator->data);
zend_generator_ensure_initialized(generator TSRMLS_CC);
@@ -641,7 +639,7 @@ static void zend_generator_iterator_move_forward(zend_object_iterator *iterator
static void zend_generator_iterator_rewind(zend_object_iterator *iterator TSRMLS_DC) /* {{{ */
{
- zend_generator *generator = (zend_generator *) iterator->data;
+ zend_generator *generator = (zend_generator*)Z_OBJ(iterator->data);
zend_generator_rewind(generator TSRMLS_CC);
}
@@ -658,10 +656,8 @@ static zend_object_iterator_funcs zend_generator_iterator_functions = {
zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) /* {{{ */
{
- zend_generator_iterator *iterator;
- zend_generator *generator;
-
- generator = (zend_generator *) Z_OBJ_P(object);
+ zend_object_iterator *iterator;
+ zend_generator *generator = (zend_generator*)Z_OBJ_P(object);
if (!generator->execute_data) {
zend_throw_exception(NULL, "Cannot traverse an already closed generator", 0 TSRMLS_CC);
@@ -675,17 +671,12 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
iterator = &generator->iterator;
- zend_iterator_init(&iterator->intern TSRMLS_CC);
-
- iterator->intern.funcs = &zend_generator_iterator_functions;
- iterator->intern.data = (void *) generator;
+ zend_iterator_init(&iterator TSRMLS_CC);
- /* We have to keep a reference to the generator object zval around,
- * otherwise the generator may be destroyed during iteration. */
- Z_ADDREF_P(object);
- iterator->object = object;
+ iterator->funcs = &zend_generator_iterator_functions;
+ ZVAL_COPY(&iterator->data, object);
- return (zend_object_iterator *) iterator;
+ return iterator;
}
/* }}} */