quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

commit a33ccb85c9be0995a6f21ce0205d4d70e25855f5
parent 16ce087e34fc0ed2e25f05a3c454c87c3deb7a08
Author: Charlie Gordon <github@chqrlie.org>
Date:   Mon, 12 Feb 2024 18:37:37 +0100

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:
Mquickjs/quickjs.c | 10++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/quickjs/quickjs.c b/quickjs/quickjs.c @@ -49649,7 +49649,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]; @@ -49666,9 +49667,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);