summaryrefslogtreecommitdiff
path: root/quickjs.c
diff options
context:
space:
mode:
authorCharlie Gordon <github@chqrlie.org>2024-02-12 18:37:37 +0100
committerCharlie Gordon <github@chqrlie.org>2024-02-12 18:37:37 +0100
commit1fe04149e9cde39ffcbf4fd578d6ddf68fb50c62 (patch)
tree237f50afb3eb03f33e716a531a23ec336b78d60a /quickjs.c
parentef4e7b23f4e95ee8d59de9027d3e012fc5efe596 (diff)
downloadquickjs-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.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/quickjs.c b/quickjs.c
index 1e82615..223be7b 100644
--- a/quickjs.c
+++ b/quickjs.c
@@ -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);