@@ -2215,10 +2215,10 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, const char *time_str, size
22152215 /* update last errors and warnings */
22162216 update_errors_warnings (err );
22172217
2218-
2218+ /* If called from a constructor throw an exception */
22192219 if ((flags & PHP_DATE_INIT_CTOR ) && err && err -> error_count ) {
22202220 /* spit out the first library error message, at least */
2221- php_error_docref (NULL , E_WARNING , "Failed to parse time string (%s) at position %d (%c): %s" , time_str ,
2221+ zend_throw_exception_ex (NULL , 0 , "Failed to parse time string (%s) at position %d (%c): %s" , time_str ,
22222222 err -> error_messages [0 ].position , err -> error_messages [0 ].character , err -> error_messages [0 ].message );
22232223 }
22242224 if (err && err -> error_count ) {
@@ -2386,17 +2386,14 @@ PHP_METHOD(DateTime, __construct)
23862386 zval * timezone_object = NULL ;
23872387 char * time_str = NULL ;
23882388 size_t time_str_len = 0 ;
2389- zend_error_handling error_handling ;
23902389
23912390 ZEND_PARSE_PARAMETERS_START (0 , 2 )
23922391 Z_PARAM_OPTIONAL
23932392 Z_PARAM_STRING (time_str , time_str_len )
23942393 Z_PARAM_OBJECT_OF_CLASS_OR_NULL (timezone_object , date_ce_timezone )
23952394 ZEND_PARSE_PARAMETERS_END ();
23962395
2397- zend_replace_error_handling (EH_THROW , NULL , & error_handling );
23982396 php_date_initialize (Z_PHPDATE_P (ZEND_THIS ), time_str , time_str_len , NULL , timezone_object , PHP_DATE_INIT_CTOR );
2399- zend_restore_error_handling (& error_handling );
24002397}
24012398/* }}} */
24022399
@@ -2406,17 +2403,14 @@ PHP_METHOD(DateTimeImmutable, __construct)
24062403 zval * timezone_object = NULL ;
24072404 char * time_str = NULL ;
24082405 size_t time_str_len = 0 ;
2409- zend_error_handling error_handling ;
24102406
24112407 ZEND_PARSE_PARAMETERS_START (0 , 2 )
24122408 Z_PARAM_OPTIONAL
24132409 Z_PARAM_STRING (time_str , time_str_len )
24142410 Z_PARAM_OBJECT_OF_CLASS_OR_NULL (timezone_object , date_ce_timezone )
24152411 ZEND_PARSE_PARAMETERS_END ();
24162412
2417- zend_replace_error_handling (EH_THROW , NULL , & error_handling );
24182413 php_date_initialize (Z_PHPDATE_P (ZEND_THIS ), time_str , time_str_len , NULL , timezone_object , PHP_DATE_INIT_CTOR );
2419- zend_restore_error_handling (& error_handling );
24202414}
24212415/* }}} */
24222416
@@ -3686,35 +3680,35 @@ PHP_FUNCTION(timezone_location_get)
36863680}
36873681/* }}} */
36883682
3689- static int date_interval_initialize (timelib_rel_time * * rt , /*const*/ char * format , size_t format_length ) /* {{{ */
3683+ static bool date_interval_initialize (timelib_rel_time * * rt , /*const*/ char * format , size_t format_length ) /* {{{ */
36903684{
36913685 timelib_time * b = NULL , * e = NULL ;
36923686 timelib_rel_time * p = NULL ;
36933687 int r = 0 ;
3694- int retval = 0 ;
3688+ bool retval = false ;
36953689 timelib_error_container * errors ;
36963690
36973691 timelib_strtointerval (format , format_length , & b , & e , & p , & r , & errors );
36983692
36993693 if (errors -> error_count > 0 ) {
3700- php_error_docref (NULL , E_WARNING , "Unknown or bad format (%s)" , format );
3701- retval = FAILURE ;
3694+ zend_throw_exception_ex (NULL , 0 , "Unknown or bad format (%s)" , format );
3695+ retval = false ;
37023696 if (p ) {
37033697 timelib_rel_time_dtor (p );
37043698 }
37053699 } else {
37063700 if (p ) {
37073701 * rt = p ;
3708- retval = SUCCESS ;
3702+ retval = true ;
37093703 } else {
37103704 if (b && e ) {
37113705 timelib_update_ts (b , NULL );
37123706 timelib_update_ts (e , NULL );
37133707 * rt = timelib_diff (b , e );
3714- retval = SUCCESS ;
3708+ retval = true ;
37153709 } else {
3716- php_error_docref (NULL , E_WARNING , "Failed to parse interval (%s)" , format );
3717- retval = FAILURE ;
3710+ zend_throw_exception_ex (NULL , 0 , "Failed to parse interval (%s)" , format );
3711+ retval = false ;
37183712 }
37193713 }
37203714 }
@@ -3853,20 +3847,19 @@ PHP_METHOD(DateInterval, __construct)
38533847{
38543848 zend_string * interval_string = NULL ;
38553849 timelib_rel_time * reltime ;
3856- zend_error_handling error_handling ;
38573850
38583851 ZEND_PARSE_PARAMETERS_START (1 , 1 )
38593852 Z_PARAM_STR (interval_string )
38603853 ZEND_PARSE_PARAMETERS_END ();
38613854
3862- zend_replace_error_handling (EH_THROW , NULL , & error_handling );
3863- if (date_interval_initialize (& reltime , ZSTR_VAL (interval_string ), ZSTR_LEN (interval_string )) == SUCCESS ) {
3864- php_interval_obj * diobj = Z_PHPINTERVAL_P (ZEND_THIS );
3865- diobj -> diff = reltime ;
3866- diobj -> initialized = 1 ;
3867- diobj -> civil_or_wall = PHP_DATE_WALL ;
3855+ if (!date_interval_initialize (& reltime , ZSTR_VAL (interval_string ), ZSTR_LEN (interval_string ))) {
3856+ RETURN_THROWS ();
38683857 }
3869- zend_restore_error_handling (& error_handling );
3858+
3859+ php_interval_obj * diobj = Z_PHPINTERVAL_P (ZEND_THIS );
3860+ diobj -> diff = reltime ;
3861+ diobj -> initialized = 1 ;
3862+ diobj -> civil_or_wall = PHP_DATE_WALL ;
38703863}
38713864/* }}} */
38723865
@@ -4117,19 +4110,19 @@ PHP_FUNCTION(date_interval_format)
41174110}
41184111/* }}} */
41194112
4120- static int date_period_initialize (timelib_time * * st , timelib_time * * et , timelib_rel_time * * d , zend_long * recurrences , /*const*/ char * format , size_t format_length ) /* {{{ */
4113+ static bool date_period_initialize (timelib_time * * st , timelib_time * * et , timelib_rel_time * * d , zend_long * recurrences , /*const*/ char * format , size_t format_length ) /* {{{ */
41214114{
41224115 timelib_time * b = NULL , * e = NULL ;
41234116 timelib_rel_time * p = NULL ;
41244117 int r = 0 ;
4125- int retval = 0 ;
41264118 timelib_error_container * errors ;
4119+ bool retval = false;
41274120
41284121 timelib_strtointerval (format , format_length , & b , & e , & p , & r , & errors );
41294122
41304123 if (errors -> error_count > 0 ) {
4131- php_error_docref ( NULL , E_WARNING , "Unknown or bad format (%s)" , format ) ;
4132- retval = FAILURE ;
4124+ retval = false ;
4125+ zend_throw_exception_ex ( NULL , 0 , "Unknown or bad format (%s)" , format ) ;
41334126 if (b ) {
41344127 timelib_time_dtor (b );
41354128 }
@@ -4144,7 +4137,7 @@ static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_
41444137 * et = e ;
41454138 * d = p ;
41464139 * recurrences = r ;
4147- retval = SUCCESS ;
4140+ retval = true ;
41484141 }
41494142 timelib_error_container_dtor (errors );
41504143 return retval ;
@@ -4160,7 +4153,6 @@ PHP_METHOD(DatePeriod, __construct)
41604153 char * isostr = NULL ;
41614154 size_t isostr_len = 0 ;
41624155 timelib_time * clone ;
4163- zend_error_handling error_handling ;
41644156
41654157 if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "OOl|l" , & start , date_ce_interface , & interval , date_ce_interval , & recurrences , & options ) == FAILURE ) {
41664158 if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "OOO|l" , & start , date_ce_interface , & interval , date_ce_interval , & end , date_ce_interface , & options ) == FAILURE ) {
@@ -4175,28 +4167,25 @@ PHP_METHOD(DatePeriod, __construct)
41754167 dpobj -> current = NULL ;
41764168
41774169 if (isostr ) {
4178- zend_replace_error_handling (EH_THROW , NULL , & error_handling );
4179- date_period_initialize (& (dpobj -> start ), & (dpobj -> end ), & (dpobj -> interval ), & recurrences , isostr , isostr_len );
4180- zend_restore_error_handling (& error_handling );
4181- if (EG (exception )) {
4170+ if (!date_period_initialize (& (dpobj -> start ), & (dpobj -> end ), & (dpobj -> interval ), & recurrences , isostr , isostr_len )) {
41824171 RETURN_THROWS ();
41834172 }
41844173
41854174 if (dpobj -> start == NULL ) {
41864175 zend_string * func = get_active_function_or_method_name ();
4187- zend_throw_error ( zend_ce_exception , "%s(): ISO interval must contain a start date, \"%s\" given" , ZSTR_VAL (func ), isostr );
4176+ zend_throw_exception_ex ( NULL , 0 , "%s(): ISO interval must contain a start date, \"%s\" given" , ZSTR_VAL (func ), isostr );
41884177 zend_string_release (func );
41894178 RETURN_THROWS ();
41904179 }
41914180 if (dpobj -> interval == NULL ) {
41924181 zend_string * func = get_active_function_or_method_name ();
4193- zend_throw_error ( zend_ce_exception , "%s(): ISO interval must contain an interval, \"%s\" given" , ZSTR_VAL (func ), isostr );
4182+ zend_throw_exception_ex ( NULL , 0 , "%s(): ISO interval must contain an interval, \"%s\" given" , ZSTR_VAL (func ), isostr );
41944183 zend_string_release (func );
41954184 RETURN_THROWS ();
41964185 }
41974186 if (dpobj -> end == NULL && recurrences == 0 ) {
41984187 zend_string * func = get_active_function_or_method_name ();
4199- zend_throw_error ( zend_ce_exception , "%s(): ISO interval must contain an end date or a recurrence count, \"%s\" given" , ZSTR_VAL (func ), isostr );
4188+ zend_throw_exception_ex ( NULL , 0 , "%s(): ISO interval must contain an end date or a recurrence count, \"%s\" given" , ZSTR_VAL (func ), isostr );
42004189 zend_string_release (func );
42014190 RETURN_THROWS ();
42024191 }
@@ -4238,7 +4227,7 @@ PHP_METHOD(DatePeriod, __construct)
42384227
42394228 if (dpobj -> end == NULL && recurrences < 1 ) {
42404229 zend_string * func = get_active_function_or_method_name ();
4241- zend_throw_error ( zend_ce_exception , "%s(): Recurrence count must be greater than 0" , ZSTR_VAL (func ));
4230+ zend_throw_exception_ex ( NULL , 0 , "%s(): Recurrence count must be greater than 0" , ZSTR_VAL (func ));
42424231 zend_string_release (func );
42434232 RETURN_THROWS ();
42444233 }
0 commit comments