Improve date internals (#4593)

- Optimize year from time calculation
- Force arithmetic operations to int32_t/int64_t whenever possible
- Optimize number conversion in date parse
- Cache local TZA of the date object
- Fix a bug in Date.parse timezone parsing

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik robert.fancsik@h-lab.eu
This commit is contained in:
Robert Fancsik
2021-02-17 16:07:54 +01:00
committed by GitHub
parent 67e7e89c8e
commit 488a0bf7e8
10 changed files with 810 additions and 785 deletions
+1
View File
@@ -61,6 +61,7 @@ var wrongFormats = ["",
"+0002015-01-01",
"-0002015-01-01",
"2015-01T00:00:00.000-03X00",
"2015-01T00:00:00.000-02-02",
"2015-01-01T00-03:00",
"Fri Jan 01 1 00:00:00 GMT+0000",
"Fri Jan 01 11 00:00:00 GMT+0000",
+7 -19
View File
@@ -33,18 +33,6 @@
int
main (void)
{
/* int ecma_date_day (time)*/
TEST_ASSERT (ecma_date_day (0) == 0);
TEST_ASSERT (ecma_date_day (MS_PER_DAY) == 1);
/* ecma_number_t ecma_date_time_within_day (time) */
TEST_ASSERT (ecma_date_time_within_day (0) == 0);
TEST_ASSERT (ecma_date_time_within_day (42) == 42);
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_year_from_time (time) */
TEST_ASSERT (ecma_date_year_from_time (0) == 1970);
@@ -119,13 +107,13 @@ main (void)
/* ecma_number_t ecma_date_make_day (year, month, date) */
TEST_ASSERT (ecma_date_make_day (1970, 0, 1) == 0);
TEST_ASSERT (ecma_date_make_day (1970, -1, 1) == -31);
TEST_ASSERT (ecma_date_make_day (1970, 0, 2.5) == 1);
TEST_ASSERT (ecma_date_make_day (1970, 1, 35) == 65);
TEST_ASSERT (ecma_date_make_day (1970, 13, 35) == 430);
TEST_ASSERT (ecma_date_make_day (2016, 2, 1) == 16861);
TEST_ASSERT (ecma_date_make_day (2016, 8, 31) == 17075);
TEST_ASSERT (ecma_date_make_day (2016, 9, 1) == 17075);
TEST_ASSERT (ecma_date_make_day (1970, -1, 1) == -2678400000);
TEST_ASSERT (ecma_date_make_day (1970, 0, 2.5) == 86400000);
TEST_ASSERT (ecma_date_make_day (1970, 1, 35) == 5616000000);
TEST_ASSERT (ecma_date_make_day (1970, 13, 35) == 37152000000);
TEST_ASSERT (ecma_date_make_day (2016, 2, 1) == 1456790400000);
TEST_ASSERT (ecma_date_make_day (2016, 8, 31) == 1475280000000);
TEST_ASSERT (ecma_date_make_day (2016, 9, 1) == 1475280000000);
/* ecma_number_t ecma_date_make_date (day, time) */