[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt

2013-01-14 Thread Derick Rethans
Commit:c20911a8501ed2a69c6ce9359e8e50d599f99bba
Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 
13:22:18 +
Parents:   a0618139c9f7aa7859f338a485af161f672be9cd
Branches:  PHP-5.5 master

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=c20911a8501ed2a69c6ce9359e8e50d599f99bba

Log:
Make DatePeriod support DateTimeImmutable as well.

If the start element is a DateTimeImmutable object, then all returned objects
are also DateTimeImmutable objects. If the start element is a DateTime object,
then all returned objects are DateTime objects.

Changed paths:
  M  ext/date/php_date.c
  M  ext/date/php_date.h
  A  ext/date/tests/date_period-immutable.phpt


Diff:
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index fc281ce..cc83130 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1847,7 +1847,7 @@ static void 
date_period_it_current_data(zend_object_iterator *iter, zval ***data
 
/* Create new object */
MAKE_STD_ZVAL(iterator-current);
-   php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC);
+   php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC);
newdateobj = (php_date_obj *) 
zend_object_store_get_object(iterator-current TSRMLS_CC);
newdateobj-time = timelib_time_ctor();
*newdateobj-time = *it_time;
@@ -4182,6 +4182,7 @@ PHP_METHOD(DatePeriod, __construct)
if (dpobj-end) {
timelib_update_ts(dpobj-end, NULL);
}
+   dpobj-start_ce = date_ce_date;
} else {
/* init */
intobj  = (php_interval_obj *) 
zend_object_store_get_object(interval TSRMLS_CC);
@@ -4197,6 +4198,7 @@ PHP_METHOD(DatePeriod, __construct)
clone-tz_info = dateobj-time-tz_info;
}
dpobj-start = clone;
+   dpobj-start_ce = Z_OBJCE_P(start);
 
/* interval */
dpobj-interval = timelib_rel_time_clone(intobj-diff);
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index 19c692b..3af3fa4 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -154,6 +154,7 @@ struct _php_interval_obj {
 struct _php_period_obj {
zend_object   std;
timelib_time *start;
+   zend_class_entry *start_ce;
timelib_time *current;
timelib_time *end;
timelib_rel_time *interval;
diff --git a/ext/date/tests/date_period-immutable.phpt 
b/ext/date/tests/date_period-immutable.phpt
new file mode 100644
index 000..0ec4b4a
--- /dev/null
+++ b/ext/date/tests/date_period-immutable.phpt
@@ -0,0 +1,56 @@
+--TEST--
+DatePeriod
+--FILE--
+?php
+date_default_timezone_set('UTC');
+$db1 = new DateTimeImmutable( '2008-01-01' );
+$db2 = new DateTime( '2008-01-01' );
+$de = new DateTime( '2008-03-31' );
+$di = DateInterval::createFromDateString( 'first day of next month' );
+
+foreach ( new DatePeriod( $db1, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+
+foreach ( new DatePeriod( $db2, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+?
+--EXPECT--
+DateTimeImmutable
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-01
+
+DateTimeImmutable
+Friday 2008-02-01
+Tuesday 2008-02-19
+Friday 2008-02-01
+
+DateTimeImmutable
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Saturday 2008-03-01
+
+DateTime
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-15
+
+DateTime
+Friday 2008-02-01
+Tuesday 2008-02-19
+Tuesday 2008-02-19
+
+DateTime
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Tuesday 2008-03-18


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt

2013-01-12 Thread Derick Rethans
Commit:62129f31a758e86f62410262bb6096f1b2584363
Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 
13:22:18 +
Parents:   793b52b576e7af8823ae24622c6a331fd473e149
Branches:  immutable-date

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=62129f31a758e86f62410262bb6096f1b2584363

Log:
Make DatePeriod support DateTimeImmutable as well.

If the start element is a DateTimeImmutable object, then all returned objects
are also DateTimeImmutable objects. If the start element is a DateTime object,
then all returned objects are DateTime objects.

Changed paths:
  M  ext/date/php_date.c
  M  ext/date/php_date.h
  A  ext/date/tests/date_period-immutable.phpt


Diff:
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index fc281ce..cc83130 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1847,7 +1847,7 @@ static void 
date_period_it_current_data(zend_object_iterator *iter, zval ***data
 
/* Create new object */
MAKE_STD_ZVAL(iterator-current);
-   php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC);
+   php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC);
newdateobj = (php_date_obj *) 
zend_object_store_get_object(iterator-current TSRMLS_CC);
newdateobj-time = timelib_time_ctor();
*newdateobj-time = *it_time;
@@ -4182,6 +4182,7 @@ PHP_METHOD(DatePeriod, __construct)
if (dpobj-end) {
timelib_update_ts(dpobj-end, NULL);
}
+   dpobj-start_ce = date_ce_date;
} else {
/* init */
intobj  = (php_interval_obj *) 
zend_object_store_get_object(interval TSRMLS_CC);
@@ -4197,6 +4198,7 @@ PHP_METHOD(DatePeriod, __construct)
clone-tz_info = dateobj-time-tz_info;
}
dpobj-start = clone;
+   dpobj-start_ce = Z_OBJCE_P(start);
 
/* interval */
dpobj-interval = timelib_rel_time_clone(intobj-diff);
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index 19c692b..3af3fa4 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -154,6 +154,7 @@ struct _php_interval_obj {
 struct _php_period_obj {
zend_object   std;
timelib_time *start;
+   zend_class_entry *start_ce;
timelib_time *current;
timelib_time *end;
timelib_rel_time *interval;
diff --git a/ext/date/tests/date_period-immutable.phpt 
b/ext/date/tests/date_period-immutable.phpt
new file mode 100644
index 000..0ec4b4a
--- /dev/null
+++ b/ext/date/tests/date_period-immutable.phpt
@@ -0,0 +1,56 @@
+--TEST--
+DatePeriod
+--FILE--
+?php
+date_default_timezone_set('UTC');
+$db1 = new DateTimeImmutable( '2008-01-01' );
+$db2 = new DateTime( '2008-01-01' );
+$de = new DateTime( '2008-03-31' );
+$di = DateInterval::createFromDateString( 'first day of next month' );
+
+foreach ( new DatePeriod( $db1, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+
+foreach ( new DatePeriod( $db2, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+?
+--EXPECT--
+DateTimeImmutable
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-01
+
+DateTimeImmutable
+Friday 2008-02-01
+Tuesday 2008-02-19
+Friday 2008-02-01
+
+DateTimeImmutable
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Saturday 2008-03-01
+
+DateTime
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-15
+
+DateTime
+Friday 2008-02-01
+Tuesday 2008-02-19
+Tuesday 2008-02-19
+
+DateTime
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Tuesday 2008-03-18


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt

2012-12-20 Thread Derick Rethans
Commit:042ddf371e84fbb7ba1326e7bd45888e63fb30ef
Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 
13:22:18 +
Parents:   b1c68330161f7ccf4fdb4786ac1b0b28778d3f55
Branches:  immutable-date

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=042ddf371e84fbb7ba1326e7bd45888e63fb30ef

Log:
Make DatePeriod support DateTimeImmutable as well.

If the start element is a DateTimeImmutable object, then all returned objects
are also DateTimeImmutable objects. If the start element is a DateTime object,
then all returned objects are DateTime objects.

Changed paths:
  M  ext/date/php_date.c
  M  ext/date/php_date.h
  A  ext/date/tests/date_period-immutable.phpt


Diff:
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 08a473d..d60cc42 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1820,7 +1820,7 @@ static void 
date_period_it_current_data(zend_object_iterator *iter, zval ***data
 
/* Create new object */
MAKE_STD_ZVAL(iterator-current);
-   php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC);
+   php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC);
newdateobj = (php_date_obj *) 
zend_object_store_get_object(iterator-current TSRMLS_CC);
newdateobj-time = timelib_time_ctor();
*newdateobj-time = *it_time;
@@ -4151,6 +4151,7 @@ PHP_METHOD(DatePeriod, __construct)
if (dpobj-end) {
timelib_update_ts(dpobj-end, NULL);
}
+   dpobj-start_ce = date_ce_date;
} else {
/* init */
intobj  = (php_interval_obj *) 
zend_object_store_get_object(interval TSRMLS_CC);
@@ -4166,6 +4167,7 @@ PHP_METHOD(DatePeriod, __construct)
clone-tz_info = dateobj-time-tz_info;
}
dpobj-start = clone;
+   dpobj-start_ce = Z_OBJCE_P(start);
 
/* interval */
dpobj-interval = timelib_rel_time_clone(intobj-diff);
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index fb12dbc..8c4ca00 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -154,6 +154,7 @@ struct _php_interval_obj {
 struct _php_period_obj {
zend_object   std;
timelib_time *start;
+   zend_class_entry *start_ce;
timelib_time *current;
timelib_time *end;
timelib_rel_time *interval;
diff --git a/ext/date/tests/date_period-immutable.phpt 
b/ext/date/tests/date_period-immutable.phpt
new file mode 100644
index 000..0ec4b4a
--- /dev/null
+++ b/ext/date/tests/date_period-immutable.phpt
@@ -0,0 +1,56 @@
+--TEST--
+DatePeriod
+--FILE--
+?php
+date_default_timezone_set('UTC');
+$db1 = new DateTimeImmutable( '2008-01-01' );
+$db2 = new DateTime( '2008-01-01' );
+$de = new DateTime( '2008-03-31' );
+$di = DateInterval::createFromDateString( 'first day of next month' );
+
+foreach ( new DatePeriod( $db1, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+
+foreach ( new DatePeriod( $db2, $di, $de ) as $dt )
+{
+   echo get_class( $dt ), \n;
+   echo $dt-format( l Y-m-d\n );
+echo $dt-modify( 3 tuesday )-format( l Y-m-d\n );
+   echo $dt-format( l Y-m-d\n\n );
+}
+?
+--EXPECT--
+DateTimeImmutable
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-01
+
+DateTimeImmutable
+Friday 2008-02-01
+Tuesday 2008-02-19
+Friday 2008-02-01
+
+DateTimeImmutable
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Saturday 2008-03-01
+
+DateTime
+Tuesday 2008-01-01
+Tuesday 2008-01-15
+Tuesday 2008-01-15
+
+DateTime
+Friday 2008-02-01
+Tuesday 2008-02-19
+Tuesday 2008-02-19
+
+DateTime
+Saturday 2008-03-01
+Tuesday 2008-03-18
+Tuesday 2008-03-18


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php