From: Tjerk Meesters Date: Wed, 13 Aug 2014 12:20:10 +0000 (+0800) Subject: Merge branch 'PHP-5.5' into PHP-5.6 X-Git-Tag: php-5.6.0RC4~1^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4647016abe27d4a6e7b9c6c990f7ae0e63061dc4;p=php Merge branch 'PHP-5.5' into PHP-5.6 * PHP-5.5: Updated NEWS for #66091 Fixed #66091 Conflicts: ext/date/php_date.c --- 4647016abe27d4a6e7b9c6c990f7ae0e63061dc4 diff --cc ext/date/php_date.c index 278988036d,39b25d9cb5..64a40a21e4 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@@ -2656,10 -2648,14 +2653,12 @@@ PHP_FUNCTION(date_create RETURN_FALSE; } - php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; - } else { - zval *datetime_object_ptr = &datetime_object; - RETVAL_ZVAL(datetime_object_ptr, 0, 0); } ++ RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ @@@ -2676,10 -2673,14 +2676,12 @@@ PHP_FUNCTION(date_create_immutable RETURN_FALSE; } - php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_immutable, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; - } else { - zval *datetime_object_ptr = &datetime_object; - RETVAL_ZVAL(datetime_object_ptr, 0, 0); } ++ RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ @@@ -2696,10 -2698,14 +2699,12 @@@ PHP_FUNCTION(date_create_from_format RETURN_FALSE; } - php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; - } else { - zval *datetime_object_ptr = &datetime_object; - RETVAL_ZVAL(datetime_object_ptr, 0, 0); } ++ RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ @@@ -2716,10 -2723,14 +2722,12 @@@ PHP_FUNCTION(date_create_immutable_from RETURN_FALSE; } - php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_immutable, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; - } else { - zval *datetime_object_ptr = &datetime_object; - RETVAL_ZVAL(datetime_object_ptr, 0, 0); } ++ RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ @@@ -2758,36 -2769,8 +2766,36 @@@ PHP_METHOD(DateTimeImmutable, __constru zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ + +/* {{{ proto DateTimeImmutable::createFromMutable(DateTimeZone object) + Creates new DateTimeImmutable object from an existing mutable DateTime object. +*/ +PHP_METHOD(DateTimeImmutable, createFromMutable) +{ + zval *datetime_object = NULL; + php_date_obj *new_obj = NULL; + php_date_obj *old_obj = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!", &datetime_object, date_ce_date) == FAILURE) { + return; + } + + php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); + old_obj = (php_date_obj *) zend_object_store_get_object(datetime_object TSRMLS_CC); + new_obj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + + new_obj->time = timelib_time_ctor(); + *new_obj->time = *old_obj->time; + if (old_obj->time->tz_abbr) { + new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); + } + if (old_obj->time->tz_info) { + new_obj->time->tz_info = old_obj->time->tz_info; + } +} +/* }}} */ - static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) + static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht TSRMLS_DC) { zval **z_date = NULL; zval **z_timezone = NULL;