]> git.kaiwu.me - quickjs.git/commitdiff
fixed Date parsing: "1997-03-08 11:19:10-0700" is a valid date and "1997-03-08T11...
authorFabrice Bellard <fabrice@bellard.org>
Mon, 29 Sep 2025 13:13:04 +0000 (15:13 +0200)
committerFabrice Bellard <fabrice@bellard.org>
Mon, 29 Sep 2025 13:13:04 +0000 (15:13 +0200)
TODO
quickjs.c
test262_errors.txt

diff --git a/TODO b/TODO
index 5c002f096032b220d7536fcf880b7de67a177670..e376141dc8d70f8a8e4d88f08ffe3b9bd61e9218 100644 (file)
--- a/TODO
+++ b/TODO
@@ -62,5 +62,5 @@ Optimization ideas:
 Test262o:   0/11262 errors, 463 excluded
 Test262o commit: 7da91bceb9ce7613f87db47ddd1292a2dda58b42 (es5-tests branch)
 
-Result: 48/81934 errors, 1631 excluded, 5476 skipped
+Result: 47/81934 errors, 1631 excluded, 5476 skipped
 Test262 commit: e7e136756cd67c1ffcf7c09d03aeb8ad5a6cec0c
index 8f7d88f6c237df623c58a11e5f514f22adf51516..2da7f522cdecb22b3484743771695d9bdee72181 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -53427,9 +53427,14 @@ static BOOL string_get_tzoffset(const uint8_t *sp, int *pp, int *tzp, BOOL stric
             hh = hh / 100;
         } else {
             mm = 0;
-            if (string_skip_char(sp, &p, ':')  /* optional separator */
-            &&  !string_get_digits(sp, &p, &mm, 2, 2))
-                return FALSE;
+            if (string_skip_char(sp, &p, ':')) {
+                /* optional separator */
+                if (!string_get_digits(sp, &p, &mm, 2, 2))
+                    return FALSE;
+            } else {
+                if (strict)
+                    return FALSE; /* [+-]HH is not accepted in strict mode */
+            }
         }
         if (hh > 23 || mm > 59)
             return FALSE;
@@ -53628,6 +53633,10 @@ static BOOL js_date_parse_otherstring(const uint8_t *sp,
                     string_get_milliseconds(sp, &p, &fields[6]);
                 }
                 has_time = TRUE;
+                if ((sp[p] == '+' || sp[p] == '-') &&
+                    string_get_tzoffset(sp, &p, &fields[8], FALSE)) {
+                    *is_local = FALSE;
+                }
             } else {
                 if (p - p_start > 2) {
                     fields[0] = val;
index 513486485ba46e21c037e4ff5130426f378290e8..ba829f16898d55745945e2b5c25382be23d626f6 100644 (file)
@@ -7,7 +7,6 @@ test262/test/annexB/language/expressions/assignmenttargettype/callexpression.js:
 test262/test/annexB/language/expressions/assignmenttargettype/cover-callexpression-and-asyncarrowhead.js:20: SyntaxError: invalid assignment left-hand side
 test262/test/staging/sm/Date/UTC-convert-all-arguments.js:75: Test262Error: index 1: expected 42, got Error: didn't throw Expected SameValue(«Error: didn't throw», «42») to be true
 test262/test/staging/sm/Date/constructor-convert-all-arguments.js:75: Test262Error: index undefined: expected 42, got Error: didn't throw Expected SameValue(«Error: didn't throw», «42») to be true
-test262/test/staging/sm/Date/non-iso.js:76: Test262Error: Expected SameValue(«NaN», «-40071559730000») to be true
 test262/test/staging/sm/Date/two-digit-years.js:76: Test262Error: Expected SameValue(«915177600000», «NaN») to be true
 test262/test/staging/sm/Function/arguments-parameter-shadowing.js:15: Test262Error: Expected SameValue(«true», «false») to be true
 test262/test/staging/sm/Function/constructor-binding.js:12: Test262Error: Expected SameValue(«"function"», «"undefined"») to be true