Refactor code to avoid duplication

This commit is contained in:
Derick Rethans 2022-04-14 10:32:10 +01:00
parent 24085d0192
commit e38d300a70
3 changed files with 17 additions and 14 deletions

4
NEWS
View file

@ -6,6 +6,10 @@ PHP NEWS
. Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are
not rethrown into the generator). (Bob)
- Date:
. Fixed bug GH-7979 (DatePeriod iterator advances when checking if valid).
(Derick, Cody Mann)
- FPM:
. Fixed bug #76003 (FPM /status reports wrong number of active processe).
(Jakub Zelenka)

View file

@ -1492,6 +1492,15 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key)
}
/* }}} */
static void date_period_advance(timelib_time *it_time, timelib_rel_time *interval)
{
it_time->have_relative = 1;
it_time->relative = *interval;
it_time->sse_uptodate = 0;
timelib_update_ts(it_time, NULL);
timelib_update_from_sse(it_time);
}
/* {{{ date_period_it_move_forward */
static void date_period_it_move_forward(zend_object_iterator *iter)
{
@ -1499,11 +1508,7 @@ static void date_period_it_move_forward(zend_object_iterator *iter)
php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data);
timelib_time *it_time = object->current;
it_time->have_relative = 1;
it_time->relative = *object->interval;
it_time->sse_uptodate = 0;
timelib_update_ts(it_time, NULL);
timelib_update_from_sse(it_time);
date_period_advance(it_time, object->interval);
iterator->current_index++;
date_period_it_invalidate_current(iter);
@ -1527,14 +1532,7 @@ static void date_period_it_rewind(zend_object_iterator *iter)
iterator->object->current = timelib_time_clone(iterator->object->start);
if (!iterator->object->include_start_date) {
timelib_time *it_time = iterator->object->current;
it_time->have_relative = 1;
it_time->relative = *iterator->object->interval;
it_time->sse_uptodate = 0;
timelib_update_ts(it_time, NULL);
timelib_update_from_sse(it_time);
date_period_advance(iterator->object->current, iterator->object->interval);
}
date_period_it_invalidate_current(iter);

View file

@ -1,5 +1,5 @@
--TEST--
Date Period iterators do not advance on `valid()`
Date Period iterators do not advance on valid()
--FILE--
<?php
@ -35,6 +35,7 @@ foreach ($iterator as $item) {
$iterator->valid();
echo $item->format('Y-m-d') . "\n";
}
?>
--EXPECT--
2022-01-01
2022-01-02