Improve date helpers. (#1499)

Rework date to string conversion, and remove nan checks from inline
functions. Furtermore some inline functions are changed to normal
functions.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg 2017-01-11 08:27:29 +01:00 committed by GitHub
parent 00b220bde6
commit 7d83293762
4 changed files with 323 additions and 722 deletions

View File

@ -374,10 +374,16 @@ ecma_builtin_date_prototype_dispatch_set (uint16_t builtin_routine_id, /**< buil
if (builtin_routine_id <= ECMA_DATE_PROTOTYPE_SET_UTC_DATE)
{
if (ECMA_DATE_PROTOTYPE_IS_SET_YEAR_ROUTINE (builtin_routine_id)
&& ecma_number_is_nan (date_num))
if (ecma_number_is_nan (date_num))
{
date_num = ECMA_NUMBER_ZERO;
if (ECMA_DATE_PROTOTYPE_IS_SET_YEAR_ROUTINE (builtin_routine_id))
{
date_num = ECMA_NUMBER_ZERO;
}
else
{
return ecma_make_number_value (date_num);
}
}
time_part = ecma_date_time_within_day (date_num);
@ -449,6 +455,11 @@ ecma_builtin_date_prototype_dispatch_set (uint16_t builtin_routine_id, /**< buil
}
else
{
if (ecma_number_is_nan (date_num))
{
return ecma_make_number_value (date_num);
}
day_part = ecma_date_day (date_num);
ecma_number_t hour = ecma_date_hour_from_time (date_num);
@ -589,7 +600,7 @@ ecma_builtin_date_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
if (!BUILTIN_DATE_FUNCTION_IS_UTC (builtin_routine_id))
{
this_num = ecma_date_local_time (this_num);
this_num += ecma_date_local_time_zone (this_num);
}
if (builtin_routine_id <= ECMA_DATE_PROTOTYPE_GET_UTC_TIMEZONE_OFFSET)

File diff suppressed because it is too large Load Diff

View File

@ -96,18 +96,11 @@ typedef enum
/* ecma-builtin-helpers-date.c */
ecma_number_t ecma_date_day (ecma_number_t time);
ecma_number_t ecma_date_time_within_day (ecma_number_t time);
ecma_number_t ecma_date_days_in_year (ecma_number_t year);
ecma_number_t ecma_date_day_from_year (ecma_number_t year);
ecma_number_t ecma_date_time_from_year (ecma_number_t year);
ecma_number_t ecma_date_year_from_time (ecma_number_t time);
ecma_number_t ecma_date_in_leap_year (ecma_number_t time);
ecma_number_t ecma_date_day_within_year (ecma_number_t time);
ecma_number_t ecma_date_month_from_time (ecma_number_t time);
ecma_number_t ecma_date_date_from_time (ecma_number_t time);
ecma_number_t ecma_date_week_day (ecma_number_t time);
ecma_number_t ecma_date_local_tza ();
ecma_number_t ecma_date_daylight_saving_ta (ecma_number_t time);
ecma_number_t ecma_date_local_time (ecma_number_t time);
ecma_number_t ecma_date_local_time_zone (ecma_number_t time);
ecma_number_t ecma_date_utc (ecma_number_t time);
ecma_number_t ecma_date_hour_from_time (ecma_number_t time);
ecma_number_t ecma_date_min_from_time (ecma_number_t time);

View File

@ -45,27 +45,6 @@ main ()
TEST_ASSERT (ecma_date_time_within_day (42.51) == 42.51);
TEST_ASSERT (ecma_date_time_within_day (MS_PER_DAY + 42) == 42);
/* int ecma_date_days_in_year (year) */
TEST_ASSERT (ecma_date_days_in_year (0) == 366);
TEST_ASSERT (ecma_date_days_in_year (1600) == 366);
TEST_ASSERT (ecma_date_days_in_year (1603) == 365);
TEST_ASSERT (ecma_date_days_in_year (1900) == 365);
TEST_ASSERT (ecma_date_days_in_year (1970) == 365);
TEST_ASSERT (ecma_date_days_in_year (2000) == 366);
TEST_ASSERT (ecma_date_days_in_year (2000.45) == 366);
TEST_ASSERT (ecma_date_days_in_year (2012) == 366);
TEST_ASSERT (ecma_date_days_in_year (2015) == 365);
TEST_ASSERT (ecma_date_days_in_year (285616 + 1970) == 365);
TEST_ASSERT (ecma_date_days_in_year (-1970) == 365);
/* int ecma_date_day_from_year (year) */
TEST_ASSERT (ecma_date_day_from_year (1969) == -365);
TEST_ASSERT (ecma_date_day_from_year (1970) == 0);
TEST_ASSERT (ecma_date_day_from_year (1971) == 365);
TEST_ASSERT (ecma_date_day_from_year (2000) == 10957);
/* int ecma_date_year_from_time (time) */
TEST_ASSERT (ecma_date_year_from_time (0) == 1970);
@ -83,10 +62,6 @@ main ()
TEST_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR - 1) == -1);
TEST_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR - 3 * MS_PER_YEAR) == -3);
/* int ecma_date_day_within_year (time) */
/* FIXME: Implement */
/* int ecma_date_month_from_time (time) */
TEST_ASSERT (ecma_date_month_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
@ -105,18 +80,6 @@ main ()
/* FIXME: Implement */
/* ecma_number_t ecma_date_local_tza () */
/* FIXME: Implement */
/* ecma_number_t ecma_date_daylight_saving_ta (time) */
/* FIXME: Implement */
/* ecma_number_t ecma_date_local_time (time) */
/* FIXME: Implement */
/* ecma_number_t ecma_date_utc (time) */
/* FIXME: Implement */