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
+24
View File
@@ -945,6 +945,8 @@ typedef struct
union
{
ecma_value_t value; /**< value of the object (e.g. boolean, number, string, etc.) */
ecma_value_t date; /**< Date object [[DateValue]] internal property */
int32_t tza; /**< TimeZone adjustment for date objects */
uint32_t length; /**< length related property (e.g. length of ArrayBuffer) */
ecma_value_t target; /**< [[ProxyTarget]] internal property */
ecma_value_t head; /**< points to the async generator task queue head item */
@@ -2313,6 +2315,28 @@ typedef struct
} u;
} ecma_mapped_arguments_t;
#if JERRY_ESNEXT
/**
* Date object descriptor flags
*/
typedef enum
{
ECMA_DATE_TZA_NONE = 0,
ECMA_DATE_TZA_SET = 1 << 0,
} ecma_date_object_flags_t;
/**
* Definition of date object
*/
typedef struct
{
ecma_extended_object_t header; /**< object header */
ecma_number_t date_value; /**< [[DateValue]] internal property */
} ecma_date_object_t;
#endif /* JERRY_ESNEXT */
/**
* @}
* @}