Skip to content

Commit 211564e

Browse files
committed
Fix code review
1 parent 9202811 commit 211564e

7 files changed

+103
-105
lines changed

ext/date/php_date.c

Lines changed: 57 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -177,17 +177,13 @@ static HashTable *date_object_get_gc_timezone(zend_object *object, zval **table,
177177
static HashTable *date_object_get_debug_info_timezone(zend_object *object, int *is_temp);
178178
static void php_timezone_to_string(php_timezone_obj *tzobj, zval *zv);
179179

180-
static void create_date_period_datetime(timelib_time *datetime, zend_class_entry *ce, zval *zv);
181-
static void create_date_period_interval(timelib_rel_time *interval, zval *zv);
182-
static void initialize_date_period_properties(php_period_obj *period_obj);
183-
184180
static int date_interval_compare_objects(zval *o1, zval *o2);
185181
static zval *date_interval_read_property(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv);
186182
static zval *date_interval_write_property(zend_object *object, zend_string *member, zval *value, void **cache_slot);
187183
static zval *date_interval_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot);
188-
static zval *date_period_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot);
189184
static zval *date_period_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv);
190185
static zval *date_period_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot);
186+
static zval *date_period_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot);
191187

192188
static int date_object_compare_timezone(zval *tz1, zval *tz2);
193189

@@ -1434,6 +1430,62 @@ PHP_FUNCTION(getdate)
14341430

14351431
#define PHP_DATE_PERIOD_EXCLUDE_START_DATE 0x0001
14361432

1433+
static void create_date_period_datetime(timelib_time *datetime, zend_class_entry *ce, zval *zv)
1434+
{
1435+
if (datetime) {
1436+
php_date_obj *date_obj;
1437+
1438+
object_init_ex(zv, ce);
1439+
date_obj = Z_PHPDATE_P(zv);
1440+
date_obj->time = timelib_time_clone(datetime);
1441+
} else {
1442+
ZVAL_NULL(zv);
1443+
}
1444+
}
1445+
1446+
static void create_date_period_interval(timelib_rel_time *interval, zval *zv)
1447+
{
1448+
if (interval) {
1449+
php_interval_obj *interval_obj;
1450+
1451+
object_init_ex(zv, date_ce_interval);
1452+
interval_obj = Z_PHPINTERVAL_P(zv);
1453+
interval_obj->diff = timelib_rel_time_clone(interval);
1454+
interval_obj->initialized = 1;
1455+
} else {
1456+
ZVAL_NULL(zv);
1457+
}
1458+
}
1459+
1460+
static void initialize_date_period_properties(php_period_obj *period_obj)
1461+
{
1462+
zval start_zv, current_zv, end_zv, interval_zv;
1463+
1464+
if (UNEXPECTED(!period_obj->std.properties)) {
1465+
rebuild_object_properties(&period_obj->std);
1466+
}
1467+
1468+
create_date_period_datetime(period_obj->start, period_obj->start_ce, &start_zv);
1469+
zend_update_property(date_ce_period, &period_obj->std, "start", sizeof("start") - 1, &start_zv);
1470+
zval_ptr_dtor(&start_zv);
1471+
1472+
create_date_period_datetime(period_obj->current, period_obj->start_ce, &current_zv);
1473+
zend_string *property_name = zend_string_init("current", sizeof("current") - 1, 0);
1474+
zend_std_write_property(&period_obj->std, property_name, &current_zv, NULL);
1475+
zval_ptr_dtor(&current_zv);
1476+
zend_string_release(property_name);
1477+
1478+
create_date_period_datetime(period_obj->end, period_obj->start_ce, &end_zv);
1479+
zend_update_property(date_ce_period, &period_obj->std, "end", sizeof("end") - 1, &end_zv);
1480+
zval_ptr_dtor(&end_zv);
1481+
1482+
create_date_period_interval(period_obj->interval, &interval_zv);
1483+
zend_update_property(date_ce_period, &period_obj->std, "interval", sizeof("interval") - 1, &interval_zv);
1484+
zval_ptr_dtor(&interval_zv);
1485+
1486+
zend_update_property_long(date_ce_period, &period_obj->std, "recurrences", sizeof("recurrences") - 1, (zend_long) period_obj->recurrences);
1487+
zend_update_property_bool(date_ce_period, &period_obj->std, "include_start_date", sizeof("include_start_date") - 1, period_obj->include_start_date);
1488+
}
14371489

14381490
/* define an overloaded iterator structure */
14391491
typedef struct {
@@ -5283,58 +5335,3 @@ static zval *date_period_get_property_ptr_ptr(zend_object *object, zend_string *
52835335

52845336
return zend_std_get_property_ptr_ptr(object, name, type, cache_slot);
52855337
}
5286-
5287-
static void create_date_period_datetime(timelib_time *datetime, zend_class_entry *ce, zval *zv)
5288-
{
5289-
if (datetime) {
5290-
php_date_obj *date_obj;
5291-
object_init_ex(zv, ce);
5292-
date_obj = Z_PHPDATE_P(zv);
5293-
date_obj->time = timelib_time_clone(datetime);
5294-
} else {
5295-
ZVAL_NULL(zv);
5296-
}
5297-
}
5298-
5299-
static void create_date_period_interval(timelib_rel_time *interval, zval *zv)
5300-
{
5301-
if (interval) {
5302-
php_interval_obj *interval_obj;
5303-
object_init_ex(zv, date_ce_interval);
5304-
interval_obj = Z_PHPINTERVAL_P(zv);
5305-
interval_obj->diff = timelib_rel_time_clone(interval);
5306-
interval_obj->initialized = 1;
5307-
} else {
5308-
ZVAL_NULL(zv);
5309-
}
5310-
}
5311-
5312-
static void initialize_date_period_properties(php_period_obj *period_obj)
5313-
{
5314-
zval start_zv, current_zv, end_zv, interval_zv;
5315-
5316-
if (UNEXPECTED(!period_obj->std.properties)) {
5317-
rebuild_object_properties(&period_obj->std);
5318-
}
5319-
5320-
create_date_period_datetime(period_obj->start, period_obj->start_ce, &start_zv);
5321-
zend_update_property(date_ce_period, &period_obj->std, "start", sizeof("start") - 1, &start_zv);
5322-
zval_ptr_dtor(&start_zv);
5323-
5324-
create_date_period_datetime(period_obj->current, period_obj->start_ce, &current_zv);
5325-
zend_string *property_name = zend_string_init("current", sizeof("current") - 1, 0);
5326-
zend_std_write_property(&period_obj->std, property_name, &current_zv, NULL);
5327-
zval_ptr_dtor(&current_zv);
5328-
zend_string_release(property_name);
5329-
5330-
create_date_period_datetime(period_obj->end, period_obj->start_ce, &end_zv);
5331-
zend_update_property(date_ce_period, &period_obj->std, "end", sizeof("end") - 1, &end_zv);
5332-
zval_ptr_dtor(&end_zv);
5333-
5334-
create_date_period_interval(period_obj->interval, &interval_zv);
5335-
zend_update_property(date_ce_period, &period_obj->std, "interval", sizeof("interval") - 1, &interval_zv);
5336-
zval_ptr_dtor(&interval_zv);
5337-
5338-
zend_update_property_long(date_ce_period, &period_obj->std, "recurrences", sizeof("recurrences") - 1, (zend_long) period_obj->recurrences);
5339-
zend_update_property_bool(date_ce_period, &period_obj->std, "include_start_date", sizeof("include_start_date") - 1, period_obj->include_start_date);
5340-
}

ext/date/php_date.stub.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,7 @@ public static function __set_state(array $array): DateInterval {}
502502
class DatePeriod implements IteratorAggregate
503503
{
504504
public readonly ?DateTimeInterface $start;
505+
/** @readonly */
505506
public ?DateTimeInterface $current;
506507
public readonly ?DateTimeInterface $end;
507508
public readonly ?DateInterval $interval;

ext/date/php_date_arginfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: ac1e02e6bc72225fec9af7d278eeae1ada7e7062 */
2+
* Stub hash: 6def7b165dfb6f52e2524dac882a8c34858d0b98 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strtotime, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
55
ZEND_ARG_TYPE_INFO(0, datetime, IS_STRING, 0)

ext/date/tests/DatePeriod_serialize-001.phpt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ echo "\n\nCalling __serialize manually:\n";
2020
var_dump($d->__serialize());
2121

2222
?>
23-
--EXPECT--
23+
--EXPECTF--
2424
Original object:
25-
object(DatePeriod)#1 (6) {
25+
object(DatePeriod)#%d (6) {
2626
["start"]=>
27-
object(DateTime)#2 (3) {
27+
object(DateTime)#%d (3) {
2828
["date"]=>
2929
string(26) "2012-07-01 00:00:00.000000"
3030
["timezone_type"]=>
@@ -37,7 +37,7 @@ object(DatePeriod)#1 (6) {
3737
["end"]=>
3838
NULL
3939
["interval"]=>
40-
object(DateInterval)#3 (10) {
40+
object(DateInterval)#%d (10) {
4141
["y"]=>
4242
int(0)
4343
["m"]=>
@@ -71,9 +71,9 @@ string(411) "O:10:"DatePeriod":6:{s:5:"start";O:8:"DateTime":3:{s:4:"date";s:26:
7171

7272

7373
Unserialised object:
74-
object(DatePeriod)#5 (6) {
74+
object(DatePeriod)#%d (6) {
7575
["start"]=>
76-
object(DateTime)#7 (3) {
76+
object(DateTime)#%d (3) {
7777
["date"]=>
7878
string(26) "2012-07-01 00:00:00.000000"
7979
["timezone_type"]=>
@@ -86,7 +86,7 @@ object(DatePeriod)#5 (6) {
8686
["end"]=>
8787
NULL
8888
["interval"]=>
89-
object(DateInterval)#8 (10) {
89+
object(DateInterval)#%d (10) {
9090
["y"]=>
9191
int(0)
9292
["m"]=>
@@ -118,7 +118,7 @@ object(DatePeriod)#5 (6) {
118118
Calling __serialize manually:
119119
array(6) {
120120
["start"]=>
121-
object(DateTime)#6 (3) {
121+
object(DateTime)#%d (3) {
122122
["date"]=>
123123
string(26) "2012-07-01 00:00:00.000000"
124124
["timezone_type"]=>
@@ -131,7 +131,7 @@ array(6) {
131131
["end"]=>
132132
NULL
133133
["interval"]=>
134-
object(DateInterval)#4 (10) {
134+
object(DateInterval)#%d (10) {
135135
["y"]=>
136136
int(0)
137137
["m"]=>

ext/date/tests/DatePeriod_serialize-002.phpt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ foreach ( $e as $d )
2828
echo $d->format(DateTime::ISO8601), "\n";
2929
}
3030
?>
31-
--EXPECT--
31+
--EXPECTF--
3232
Original object:
33-
object(DatePeriod)#4 (6) {
33+
object(DatePeriod)#%d (6) {
3434
["start"]=>
35-
object(DateTimeImmutable)#5 (3) {
35+
object(DateTimeImmutable)#%d (3) {
3636
["date"]=>
3737
string(26) "1978-12-22 09:15:00.000000"
3838
["timezone_type"]=>
@@ -43,7 +43,7 @@ object(DatePeriod)#4 (6) {
4343
["current"]=>
4444
NULL
4545
["end"]=>
46-
object(DateTimeImmutable)#6 (3) {
46+
object(DateTimeImmutable)#%d (3) {
4747
["date"]=>
4848
string(26) "2022-04-29 15:51:56.000000"
4949
["timezone_type"]=>
@@ -52,7 +52,7 @@ object(DatePeriod)#4 (6) {
5252
string(13) "Europe/London"
5353
}
5454
["interval"]=>
55-
object(DateInterval)#7 (10) {
55+
object(DateInterval)#%d (10) {
5656
["y"]=>
5757
int(2)
5858
["m"]=>
@@ -86,9 +86,9 @@ string(565) "O:10:"DatePeriod":6:{s:5:"start";O:17:"DateTimeImmutable":3:{s:4:"d
8686

8787

8888
Unserialised object:
89-
object(DatePeriod)#1 (6) {
89+
object(DatePeriod)#%d (6) {
9090
["start"]=>
91-
object(DateTimeImmutable)#11 (3) {
91+
object(DateTimeImmutable)#%d (3) {
9292
["date"]=>
9393
string(26) "1978-12-22 09:15:00.000000"
9494
["timezone_type"]=>
@@ -99,7 +99,7 @@ object(DatePeriod)#1 (6) {
9999
["current"]=>
100100
NULL
101101
["end"]=>
102-
object(DateTimeImmutable)#12 (3) {
102+
object(DateTimeImmutable)#%d (3) {
103103
["date"]=>
104104
string(26) "2022-04-29 15:51:56.000000"
105105
["timezone_type"]=>
@@ -108,7 +108,7 @@ object(DatePeriod)#1 (6) {
108108
string(13) "Europe/London"
109109
}
110110
["interval"]=>
111-
object(DateInterval)#13 (10) {
111+
object(DateInterval)#%d (10) {
112112
["y"]=>
113113
int(2)
114114
["m"]=>
@@ -140,7 +140,7 @@ object(DatePeriod)#1 (6) {
140140
Calling __serialize manually:
141141
array(6) {
142142
["start"]=>
143-
object(DateTimeImmutable)#2 (3) {
143+
object(DateTimeImmutable)#%d (3) {
144144
["date"]=>
145145
string(26) "1978-12-22 09:15:00.000000"
146146
["timezone_type"]=>
@@ -151,7 +151,7 @@ array(6) {
151151
["current"]=>
152152
NULL
153153
["end"]=>
154-
object(DateTimeImmutable)#8 (3) {
154+
object(DateTimeImmutable)#%d (3) {
155155
["date"]=>
156156
string(26) "2022-04-29 15:51:56.000000"
157157
["timezone_type"]=>
@@ -160,7 +160,7 @@ array(6) {
160160
string(13) "Europe/London"
161161
}
162162
["interval"]=>
163-
object(DateInterval)#9 (10) {
163+
object(DateInterval)#%d (10) {
164164
["y"]=>
165165
int(2)
166166
["m"]=>

ext/date/tests/DatePeriod_serialize-003.phpt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ foreach ( $e as $d )
2828
echo $d->format(DateTime::ISO8601), "\n";
2929
}
3030
?>
31-
--EXPECT--
31+
--EXPECTF--
3232
Original object:
33-
object(DatePeriod)#4 (6) {
33+
object(DatePeriod)#%d (6) {
3434
["start"]=>
35-
object(DateTimeImmutable)#5 (3) {
35+
object(DateTimeImmutable)#%d (3) {
3636
["date"]=>
3737
string(26) "1978-12-22 09:15:00.000000"
3838
["timezone_type"]=>
@@ -43,7 +43,7 @@ object(DatePeriod)#4 (6) {
4343
["current"]=>
4444
NULL
4545
["end"]=>
46-
object(DateTimeImmutable)#6 (3) {
46+
object(DateTimeImmutable)#%d (3) {
4747
["date"]=>
4848
string(26) "2022-04-29 15:51:56.000000"
4949
["timezone_type"]=>
@@ -52,7 +52,7 @@ object(DatePeriod)#4 (6) {
5252
string(13) "Europe/London"
5353
}
5454
["interval"]=>
55-
object(DateInterval)#7 (10) {
55+
object(DateInterval)#%d (10) {
5656
["y"]=>
5757
int(2)
5858
["m"]=>
@@ -86,9 +86,9 @@ string(565) "O:10:"DatePeriod":6:{s:5:"start";O:17:"DateTimeImmutable":3:{s:4:"d
8686

8787

8888
Unserialised object:
89-
object(DatePeriod)#1 (6) {
89+
object(DatePeriod)#%d (6) {
9090
["start"]=>
91-
object(DateTimeImmutable)#11 (3) {
91+
object(DateTimeImmutable)#%d (3) {
9292
["date"]=>
9393
string(26) "1978-12-22 09:15:00.000000"
9494
["timezone_type"]=>
@@ -99,7 +99,7 @@ object(DatePeriod)#1 (6) {
9999
["current"]=>
100100
NULL
101101
["end"]=>
102-
object(DateTimeImmutable)#12 (3) {
102+
object(DateTimeImmutable)#%d (3) {
103103
["date"]=>
104104
string(26) "2022-04-29 15:51:56.000000"
105105
["timezone_type"]=>
@@ -108,7 +108,7 @@ object(DatePeriod)#1 (6) {
108108
string(13) "Europe/London"
109109
}
110110
["interval"]=>
111-
object(DateInterval)#13 (10) {
111+
object(DateInterval)#%d (10) {
112112
["y"]=>
113113
int(2)
114114
["m"]=>
@@ -140,7 +140,7 @@ object(DatePeriod)#1 (6) {
140140
Calling __serialize manually:
141141
array(6) {
142142
["start"]=>
143-
object(DateTimeImmutable)#2 (3) {
143+
object(DateTimeImmutable)#%d (3) {
144144
["date"]=>
145145
string(26) "1978-12-22 09:15:00.000000"
146146
["timezone_type"]=>
@@ -151,7 +151,7 @@ array(6) {
151151
["current"]=>
152152
NULL
153153
["end"]=>
154-
object(DateTimeImmutable)#8 (3) {
154+
object(DateTimeImmutable)#%d (3) {
155155
["date"]=>
156156
string(26) "2022-04-29 15:51:56.000000"
157157
["timezone_type"]=>
@@ -160,7 +160,7 @@ array(6) {
160160
string(13) "Europe/London"
161161
}
162162
["interval"]=>
163-
object(DateInterval)#9 (10) {
163+
object(DateInterval)#%d (10) {
164164
["y"]=>
165165
int(2)
166166
["m"]=>

0 commit comments

Comments
 (0)