diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-02-27 19:19:02 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-02-27 19:19:02 +0800 |
| commit | 382b0dfdb7d2ae654f6aeba049ee80c3cd70ff9a (patch) | |
| tree | 497b3da5c7b62dd68d3f850ba551fd5a996d6c6c /ext/date/php_date.c | |
| parent | 122cc5f495b46e8d85a98ee7c25500c4cef4ced1 (diff) | |
| download | php-git-382b0dfdb7d2ae654f6aeba049ee80c3cd70ff9a.tar.gz | |
Refactoring zend_iterator (incompleted)
Diffstat (limited to 'ext/date/php_date.c')
| -rw-r--r-- | ext/date/php_date.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1489ac8184..82ee650b36 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1836,7 +1836,6 @@ PHP_FUNCTION(getdate) /* define an overloaded iterator structure */ typedef struct { zend_object_iterator intern; - zval *date_period_zval; zval current; php_period_obj *object; int current_index; @@ -1862,7 +1861,7 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) date_period_it_invalidate_current(iter TSRMLS_CC); - zval_ptr_dtor(iterator->date_period_zval); + zval_ptr_dtor(&iterator->intern.data); efree(iterator); } @@ -1873,7 +1872,7 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = iterator->object; + php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); timelib_time *it_time = object->current; /* apply modification if it's not the first iteration */ @@ -1898,7 +1897,7 @@ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = iterator->object; + php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); timelib_time *it_time = object->current; php_date_obj *newdateobj; @@ -1970,7 +1969,6 @@ zend_object_iterator_funcs date_period_it_funcs = { zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { date_period_it *iterator = emalloc(sizeof(date_period_it)); - php_period_obj *dpobj = (php_period_obj *)Z_OBJ_P(object); if (by_ref) { zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); @@ -1978,11 +1976,8 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC); - Z_ADDREF_P(object); - iterator->intern.data = (void*) dpobj; + ZVAL_COPY(&iterator->intern.data, object); iterator->intern.funcs = &date_period_it_funcs; - iterator->date_period_zval = object; - iterator->object = dpobj; ZVAL_UNDEF(&iterator->current); return (zend_object_iterator*)iterator; |
