diff options
author | Charlie Gordon <github@chqrlie.org> | 2024-02-12 18:37:37 +0100 |
---|---|---|
committer | Charlie Gordon <github@chqrlie.org> | 2024-02-12 18:37:37 +0100 |
commit | 1fe04149e9cde39ffcbf4fd578d6ddf68fb50c62 (patch) | |
tree | 237f50afb3eb03f33e716a531a23ec336b78d60a /quickjs.c | |
parent | ef4e7b23f4e95ee8d59de9027d3e012fc5efe596 (diff) | |
download | quickjs-1fe04149e9cde39ffcbf4fd578d6ddf68fb50c62.tar.gz quickjs-1fe04149e9cde39ffcbf4fd578d6ddf68fb50c62.zip |
Fix test262 error
- force evaluation order in `set_date_fields`
- fix evaluation error in test262/test/built-ins/Date/UTC/fp-evaluation-order.js:19:
unexpected error: Test262Error: precision in MakeDate Expected SameValue(«34448384», «34447360») to be true
Diffstat (limited to 'quickjs.c')
-rw-r--r-- | quickjs.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -49431,7 +49431,8 @@ static double time_clip(double t) { of the operations */ static double set_date_fields(double fields[], int is_local) { int64_t y; - double days, d, h, m1; + double days, h, m1; + volatile double d; /* enforce evaluation order */ int i, m, md; m1 = fields[1]; @@ -49448,9 +49449,14 @@ static double set_date_fields(double fields[], int is_local) { days += md; } days += fields[2] - 1; + /* made d volatile to ensure order of evaluation as specified in ECMA. + * this fixes a test262 error on + * test262/test/built-ins/Date/UTC/fp-evaluation-order.js + */ h = fields[3] * 3600000 + fields[4] * 60000 + fields[5] * 1000 + fields[6]; - d = days * 86400000 + h; + d = days * 86400000; + d = d + h; if (is_local) d += getTimezoneOffset(d) * 60000; return time_clip(d); |