This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/main by this push:
     new d76933015 QuickJS Update
d76933015 is described below

commit d76933015241da322b8f850817e98951ebe83dc8
Author: Nick Vatamaniuc <[email protected]>
AuthorDate: Mon Oct 6 23:35:31 2025 -0400

    QuickJS Update
    
     * Update test262. Expand tests from 81934 to running 83147 tests
     
https://github.com/bellard/quickjs/commit/31663a930d2d17b92d562cd3e8a1d4792be4d145
     * Improve error handling in Promise.withResolvers (we don't use these)
     
https://github.com/bellard/quickjs/commit/f1253f2ab53d3adbe918fe1d68710269f0c2335e
     * Optimize array creation
     
https://github.com/bellard/quickjs/commit/f4951efd94344985cf47bfedf10e8b2c43d3cd21
     * Optimized global variable access
     
https://github.com/bellard/quickjs/commit/2c90110287ac2646d74d39d231c261a6fcd8d4df
     * Inline fast path for get_field, get_field2 and put_field
     
https://github.com/bellard/quickjs/commit/57f8ec0099e2f83dc9bc118d74e69c3f87a4af2b
     * Remove `JS_PROP_NO_ADD` (internal property flag, unused)
     
https://github.com/bellard/quickjs/commit/64c55c6dafb40a2d2cdb1e7f373ed901dd771273
     * Optimize array access by inlining `get_array_el(2/3)` and `put_array_el`
     
https://github.com/bellard/quickjs/commit/8e8eefb922b205bb56de14e0279b4e42b5f3f460
---
 .../patches/01-spidermonkey-185-mode.patch         |   6 +-
 src/couch_quickjs/patches/02-test262-errors.patch  |  14 +-
 src/couch_quickjs/quickjs/Makefile                 |   2 +-
 src/couch_quickjs/quickjs/quickjs-opcode.h         |   2 -
 src/couch_quickjs/quickjs/quickjs.c                | 580 +++++++++++----------
 src/couch_quickjs/quickjs/quickjs.h                |   3 +-
 src/couch_quickjs/quickjs/test262.conf             |   4 +
 src/couch_quickjs/quickjs/test262_errors.txt       |  91 ++--
 src/couch_quickjs/quickjs/tests/test262.patch      |  65 +--
 9 files changed, 387 insertions(+), 380 deletions(-)

diff --git a/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch 
b/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
index a16e9e475..681eedbdc 100644
--- a/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
+++ b/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch
@@ -1,6 +1,6 @@
---- quickjs-master/quickjs.c   2025-09-30 04:35:00
-+++ quickjs/quickjs.c  2025-09-30 11:38:07
-@@ -30784,10 +30784,24 @@
+--- quickjs-master/quickjs.c   2025-10-04 04:46:29
++++ quickjs/quickjs.c  2025-10-06 23:16:06
+@@ -30866,10 +30866,24 @@
      if (s->token.val == TOK_FUNCTION ||
          (token_is_pseudo_keyword(s, JS_ATOM_async) &&
           peek_token(s, TRUE) == TOK_FUNCTION)) {
diff --git a/src/couch_quickjs/patches/02-test262-errors.patch 
b/src/couch_quickjs/patches/02-test262-errors.patch
index 4baf0c894..07644016f 100644
--- a/src/couch_quickjs/patches/02-test262-errors.patch
+++ b/src/couch_quickjs/patches/02-test262-errors.patch
@@ -1,11 +1,11 @@
---- quickjs-master/test262_errors.txt  2025-09-30 04:35:00
-+++ quickjs/test262_errors.txt 2025-09-30 11:47:32
-@@ -5,6 +5,8 @@
- 
test262/test/annexB/language/expressions/assignmenttargettype/callexpression-in-prefix-update.js:27:
 SyntaxError: invalid increment/decrement operand
+--- quickjs-master/test262_errors.txt  2025-10-04 04:46:29
++++ quickjs/test262_errors.txt 2025-10-06 23:19:01
+@@ -6,6 +6,8 @@
  
test262/test/annexB/language/expressions/assignmenttargettype/callexpression.js:33:
 SyntaxError: invalid assignment left-hand side
  
test262/test/annexB/language/expressions/assignmenttargettype/cover-callexpression-and-asyncarrowhead.js:20:
 SyntaxError: invalid assignment left-hand side
+ test262/test/language/identifier-resolution/assign-to-global-undefined.js:20: 
strict mode: expected error
 +test262/test/language/statements/expression/S12.4_A1.js:15: unexpected error 
type: Test262: This statement should not be evaluated.
 +test262/test/language/statements/expression/S12.4_A1.js:15: strict mode: 
unexpected error type: Test262: This statement should not be evaluated.
- 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/two-digit-years.js:76: Test262Error: Expected 
SameValue(«915177600000», «NaN») to be true
+ test262/test/staging/sm/Date/UTC-convert-all-arguments.js:13: 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/UTC-convert-all-arguments.js:13: strict mode: 
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:13: 
Test262Error: index undefined: expected 42, got Error: didn't throw Expected 
SameValue(«Error: didn't throw», «42») to be true
diff --git a/src/couch_quickjs/quickjs/Makefile 
b/src/couch_quickjs/quickjs/Makefile
index 9dab23a1e..0ddb759f3 100644
--- a/src/couch_quickjs/quickjs/Makefile
+++ b/src/couch_quickjs/quickjs/Makefile
@@ -55,7 +55,7 @@ PREFIX?=/usr/local
 #CONFIG_UBSAN=y
 
 # TEST262 bootstrap config: commit id and shallow "since" parameter
-TEST262_COMMIT?=a5e69a1534de88d1eb29b76657d84c8541b72df7
+TEST262_COMMIT?=06dfddc4ebd21c39e1ce44f3e13b56b0dfda28e3
 TEST262_SINCE?=2025-09-01
 
 OBJDIR=.obj
diff --git a/src/couch_quickjs/quickjs/quickjs-opcode.h 
b/src/couch_quickjs/quickjs/quickjs-opcode.h
index 814a7cbaa..86c3ec406 100644
--- a/src/couch_quickjs/quickjs/quickjs-opcode.h
+++ b/src/couch_quickjs/quickjs/quickjs-opcode.h
@@ -123,12 +123,10 @@ DEF(         regexp, 1, 2, 1, none) /* create a RegExp 
object from the pattern a
 DEF(      get_super, 1, 1, 1, none)
 DEF(         import, 1, 2, 1, none) /* dynamic module import */
 
-DEF(      check_var, 5, 0, 1, atom) /* check if a variable exists */
 DEF(  get_var_undef, 5, 0, 1, atom) /* push undefined if the variable does not 
exist */
 DEF(        get_var, 5, 0, 1, atom) /* throw an exception if the variable does 
not exist */
 DEF(        put_var, 5, 1, 0, atom) /* must come after get_var */
 DEF(   put_var_init, 5, 1, 0, atom) /* must come after put_var. Used to 
initialize a global lexical variable */
-DEF( put_var_strict, 5, 2, 0, atom) /* for strict mode variable write */
 
 DEF(  get_ref_value, 1, 2, 3, none)
 DEF(  put_ref_value, 1, 3, 0, none)
diff --git a/src/couch_quickjs/quickjs/quickjs.c 
b/src/couch_quickjs/quickjs/quickjs.c
index 01394203b..9d795238d 100644
--- a/src/couch_quickjs/quickjs/quickjs.c
+++ b/src/couch_quickjs/quickjs/quickjs.c
@@ -8914,6 +8914,57 @@ static JSValue js_allocate_fast_array(JSContext *ctx, 
int64_t len)
     return arr;
 }
 
+static JSValue js_create_array(JSContext *ctx, int len, JSValueConst *tab)
+{
+    JSValue obj;
+    JSObject *p;
+    int i;
+
+    obj = JS_NewArray(ctx);
+    if (JS_IsException(obj))
+        return JS_EXCEPTION;
+    if (len > 0) {
+        p = JS_VALUE_GET_OBJ(obj);
+        if (expand_fast_array(ctx, p, len) < 0) {
+            JS_FreeValue(ctx, obj);
+            return JS_EXCEPTION;
+        }
+        p->u.array.count = len;
+        for(i = 0; i < len; i++) 
+            p->u.array.u.values[i] = JS_DupValue(ctx, tab[i]);
+        /* update the 'length' field */
+        set_value(ctx, &p->prop[0].u.value, JS_NewInt32(ctx, len));
+    }
+    return obj;
+}
+
+static JSValue js_create_array_free(JSContext *ctx, int len, JSValue *tab)
+{
+    JSValue obj;
+    JSObject *p;
+    int i;
+
+    obj = JS_NewArray(ctx);
+    if (JS_IsException(obj))
+        goto fail;
+    if (len > 0) {
+        p = JS_VALUE_GET_OBJ(obj);
+        if (expand_fast_array(ctx, p, len) < 0) {
+            JS_FreeValue(ctx, obj);
+        fail:
+            for(i = 0; i < len; i++)
+                JS_FreeValue(ctx, tab[i]);
+            return JS_EXCEPTION;
+        }
+        p->u.array.count = len;
+        for(i = 0; i < len; i++) 
+            p->u.array.u.values[i] = tab[i];
+        /* update the 'length' field */
+        set_value(ctx, &p->prop[0].u.value, JS_NewInt32(ctx, len));
+    }
+    return obj;
+}
+
 static void js_free_desc(JSContext *ctx, JSPropertyDescriptor *desc)
 {
     JS_FreeValue(ctx, desc->getter);
@@ -8922,11 +8973,9 @@ static void js_free_desc(JSContext *ctx, 
JSPropertyDescriptor *desc)
 }
 
 /* return -1 in case of exception or TRUE or FALSE. Warning: 'val' is
-   freed by the function. 'flags' is a bitmask of JS_PROP_NO_ADD,
-   JS_PROP_THROW or JS_PROP_THROW_STRICT. If JS_PROP_NO_ADD is set,
-   the new property is not added and an error is raised. 'this_obj' is
-   the receiver. If obj != this_obj, then obj must be an object
-   (Reflect.set case). */
+   freed by the function. 'flags' is a bitmask of JS_PROP_THROW and
+   JS_PROP_THROW_STRICT. 'this_obj' is the receiver. If obj !=
+   this_obj, then obj must be an object (Reflect.set case). */
 int JS_SetPropertyInternal(JSContext *ctx, JSValueConst obj,
                            JSAtom prop, JSValue val, JSValueConst this_obj, 
int flags)
 {
@@ -9122,12 +9171,6 @@ int JS_SetPropertyInternal(JSContext *ctx, JSValueConst 
obj,
         }
     }
 
-    if (unlikely(flags & JS_PROP_NO_ADD)) {
-        JS_FreeValue(ctx, val);
-        JS_ThrowReferenceErrorNotDefined(ctx, prop);
-        return -1;
-    }
-
     if (unlikely(!p)) {
         JS_FreeValue(ctx, val);
         return JS_ThrowTypeErrorOrFalse(ctx, flags, "not an object");
@@ -10124,8 +10167,8 @@ static int JS_DefineGlobalFunction(JSContext *ctx, 
JSAtom prop,
     return 0;
 }
 
-static JSValue JS_GetGlobalVar(JSContext *ctx, JSAtom prop,
-                               BOOL throw_ref_error)
+static inline JSValue JS_GetGlobalVar(JSContext *ctx, JSAtom prop,
+                                      BOOL throw_ref_error)
 {
     JSObject *p;
     JSShapeProperty *prs;
@@ -10140,6 +10183,14 @@ static JSValue JS_GetGlobalVar(JSContext *ctx, JSAtom 
prop,
             return JS_ThrowReferenceErrorUninitialized(ctx, prs->atom);
         return JS_DupValue(ctx, pr->u.value);
     }
+
+    /* fast path */
+    p = JS_VALUE_GET_OBJ(ctx->global_obj);
+    prs = find_own_property(&pr, p, prop);
+    if (prs) {
+        if (likely((prs->flags & JS_PROP_TMASK) == 0))
+            return JS_DupValue(ctx, pr->u.value);
+    }
     return JS_GetPropertyInternal(ctx, ctx->global_obj, prop,
                                  ctx->global_obj, throw_ref_error);
 }
@@ -10181,37 +10232,16 @@ static int JS_GetGlobalVarRef(JSContext *ctx, JSAtom 
prop, JSValue *sp)
     return 0;
 }
 
-/* use for strict variable access: test if the variable exists */
-static int JS_CheckGlobalVar(JSContext *ctx, JSAtom prop)
-{
-    JSObject *p;
-    JSShapeProperty *prs;
-    int ret;
-
-    /* no exotic behavior is possible in global_var_obj */
-    p = JS_VALUE_GET_OBJ(ctx->global_var_obj);
-    prs = find_own_property1(p, prop);
-    if (prs) {
-        ret = TRUE;
-    } else {
-        ret = JS_HasProperty(ctx, ctx->global_obj, prop);
-        if (ret < 0)
-            return -1;
-    }
-    return ret;
-}
-
 /* flag = 0: normal variable write
    flag = 1: initialize lexical variable
-   flag = 2: normal variable write, strict check was done before
 */
-static int JS_SetGlobalVar(JSContext *ctx, JSAtom prop, JSValue val,
-                           int flag)
+static inline int JS_SetGlobalVar(JSContext *ctx, JSAtom prop, JSValue val,
+                                  int flag)
 {
     JSObject *p;
     JSShapeProperty *prs;
     JSProperty *pr;
-    int flags;
+    int ret;
 
     /* no exotic behavior is possible in global_var_obj */
     p = JS_VALUE_GET_OBJ(ctx->global_var_obj);
@@ -10232,13 +10262,30 @@ static int JS_SetGlobalVar(JSContext *ctx, JSAtom 
prop, JSValue val,
         set_value(ctx, &pr->u.value, val);
         return 0;
     }
-    /* XXX: add a fast path where the property exists and the object
-       is not exotic. Otherwise do as in OP_put_ref_value and remove
-       JS_PROP_NO_ADD which is no longer necessary */
-    flags = JS_PROP_THROW_STRICT;
-    if (is_strict_mode(ctx))
-        flags |= JS_PROP_NO_ADD;
-    return JS_SetPropertyInternal(ctx, ctx->global_obj, prop, val, 
ctx->global_obj, flags);
+    
+    p = JS_VALUE_GET_OBJ(ctx->global_obj);
+    prs = find_own_property(&pr, p, prop);
+    if (prs) {
+        if (likely((prs->flags & (JS_PROP_TMASK | JS_PROP_WRITABLE |
+                                  JS_PROP_LENGTH)) == JS_PROP_WRITABLE)) {
+            /* fast path */
+            set_value(ctx, &pr->u.value, val);
+            return 0;
+        }
+    }
+    /* slow path */
+    ret = JS_HasProperty(ctx, ctx->global_obj, prop);
+    if (ret < 0) {
+        JS_FreeValue(ctx, val);
+        return -1;
+    }
+    if (ret == 0 && is_strict_mode(ctx)) {
+        JS_FreeValue(ctx, val);
+        JS_ThrowReferenceErrorNotDefined(ctx, prop);
+        return -1;
+    }
+    return JS_SetPropertyInternal(ctx, ctx->global_obj, prop, val, 
ctx->global_obj,
+                                  JS_PROP_THROW_STRICT);
 }
 
 /* return -1, FALSE or TRUE */
@@ -15620,26 +15667,6 @@ static JSValue js_build_mapped_arguments(JSContext 
*ctx, int argc,
     return JS_EXCEPTION;
 }
 
-static JSValue js_build_rest(JSContext *ctx, int first, int argc, JSValueConst 
*argv)
-{
-    JSValue val;
-    int i, ret;
-
-    val = JS_NewArray(ctx);
-    if (JS_IsException(val))
-        return val;
-    for (i = first; i < argc; i++) {
-        ret = JS_DefinePropertyValueUint32(ctx, val, i - first,
-                                           JS_DupValue(ctx, argv[i]),
-                                           JS_PROP_C_W_E);
-        if (ret < 0) {
-            JS_FreeValue(ctx, val);
-            return JS_EXCEPTION;
-        }
-    }
-    return val;
-}
-
 static JSValue build_for_in_iterator(JSContext *ctx, JSValue obj)
 {
     JSObject *p, *p1;
@@ -17122,7 +17149,8 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
             {
                 int first = get_u16(pc);
                 pc += 2;
-                *sp++ = js_build_rest(ctx, first, argc, (JSValueConst *)argv);
+                first = min_int(first, argc);
+                *sp++ = js_create_array(ctx, argc - first, (JSValueConst 
*)(argv + first));
                 if (unlikely(JS_IsException(sp[-1])))
                     goto exception;
             }
@@ -17345,27 +17373,13 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
             }
             BREAK;
         CASE(OP_array_from):
-            {
-                int i, ret;
-
-                call_argc = get_u16(pc);
-                pc += 2;
-                ret_val = JS_NewArray(ctx);
-                if (unlikely(JS_IsException(ret_val)))
-                    goto exception;
-                call_argv = sp - call_argc;
-                for(i = 0; i < call_argc; i++) {
-                    ret = JS_DefinePropertyValue(ctx, ret_val, 
__JS_AtomFromUInt32(i), call_argv[i],
-                                                 JS_PROP_C_W_E | 
JS_PROP_THROW);
-                    call_argv[i] = JS_UNDEFINED;
-                    if (ret < 0) {
-                        JS_FreeValue(ctx, ret_val);
-                        goto exception;
-                    }
-                }
-                sp -= call_argc;
-                *sp++ = ret_val;
-            }
+            call_argc = get_u16(pc);
+            pc += 2;
+            ret_val = js_create_array_free(ctx, call_argc, sp - call_argc);
+            sp -= call_argc;
+            if (unlikely(JS_IsException(ret_val)))
+                goto exception;
+            *sp++ = ret_val;
             BREAK;
 
         CASE(OP_apply):
@@ -17579,21 +17593,6 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
             }
             BREAK;
 
-        CASE(OP_check_var):
-            {
-                int ret;
-                JSAtom atom;
-                atom = get_u32(pc);
-                pc += 4;
-                sf->cur_pc = pc;
-
-                ret = JS_CheckGlobalVar(ctx, atom);
-                if (ret < 0)
-                    goto exception;
-                *sp++ = JS_NewBool(ctx, ret);
-            }
-            BREAK;
-
         CASE(OP_get_var_undef):
         CASE(OP_get_var):
             {
@@ -17626,26 +17625,6 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
             }
             BREAK;
 
-        CASE(OP_put_var_strict):
-            {
-                int ret;
-                JSAtom atom;
-                atom = get_u32(pc);
-                pc += 4;
-                sf->cur_pc = pc;
-
-                /* sp[-2] is JS_TRUE or JS_FALSE */
-                if (unlikely(!JS_VALUE_GET_INT(sp[-2]))) {
-                    JS_ThrowReferenceErrorNotDefined(ctx, atom);
-                    goto exception;
-                }
-                ret = JS_SetGlobalVar(ctx, atom, sp[-1], 2);
-                sp -= 2;
-                if (unlikely(ret < 0))
-                    goto exception;
-            }
-            BREAK;
-
         CASE(OP_check_define_var):
             {
                 JSAtom atom;
@@ -18249,51 +18228,104 @@ static JSValue JS_CallInternal(JSContext 
*caller_ctx, JSValueConst func_obj,
             }
             BREAK;
 
-        CASE(OP_get_field):
-            {
-                JSValue val;
-                JSAtom atom;
-                atom = get_u32(pc);
-                pc += 4;
-
-                sf->cur_pc = pc;
-                val = JS_GetProperty(ctx, sp[-1], atom);
-                if (unlikely(JS_IsException(val)))
-                    goto exception;
-                JS_FreeValue(ctx, sp[-1]);
-                sp[-1] = val;
+#define GET_FIELD_INLINE(name, keep)                                    \
+            {                                                           \
+                JSValue val, obj;                                       \
+                JSAtom atom;                                            \
+                JSObject *p;                                            \
+                JSProperty *pr;                                         \
+                JSShapeProperty *prs;                                   \
+                                                                        \
+                atom = get_u32(pc);                                     \
+                pc += 4;                                                \
+                                                                        \
+                obj = sp[-1];                                           \
+                if (likely(JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT)) {   \
+                    p = JS_VALUE_GET_OBJ(obj);                          \
+                    for(;;) {                                           \
+                        prs = find_own_property(&pr, p, atom);          \
+                        if (prs) {                                      \
+                            /* found */                                 \
+                            if (unlikely(prs->flags & JS_PROP_TMASK))   \
+                                    goto name ## _slow_path;            \
+                            val = JS_DupValue(ctx, pr->u.value);        \
+                            break;                                      \
+                        }                                               \
+                        if (unlikely(p->is_exotic)) {                   \
+                            /* XXX: should avoid the slow path for arrays \
+                               and typed arrays by ensuring that 'prop' is \
+                               not numeric */                           \
+                            obj = JS_MKPTR(JS_TAG_OBJECT, p);           \
+                            goto name ## _slow_path;                    \
+                        }                                               \
+                        p = p->shape->proto;                            \
+                        if (!p) {                                       \
+                            val = JS_UNDEFINED;                         \
+                            break;                                      \
+                        }                                               \
+                    }                                                   \
+                } else {                                                \
+                name ## _slow_path:                                     \
+                    sf->cur_pc = pc;                                    \
+                    val = JS_GetPropertyInternal(ctx, obj, atom, sp[-1], 0); \
+                    if (unlikely(JS_IsException(val)))                  \
+                        goto exception;                                 \
+                }                                                       \
+                if (keep) {                                             \
+                    *sp++ = val;                                        \
+                } else {                                                \
+                    JS_FreeValue(ctx, sp[-1]);                          \
+                    sp[-1] = val;                                       \
+                }                                                       \
             }
+
+            
+        CASE(OP_get_field):
+            GET_FIELD_INLINE(get_field, 0);
             BREAK;
 
         CASE(OP_get_field2):
-            {
-                JSValue val;
-                JSAtom atom;
-                atom = get_u32(pc);
-                pc += 4;
-
-                sf->cur_pc = pc;
-                val = JS_GetProperty(ctx, sp[-1], atom);
-                if (unlikely(JS_IsException(val)))
-                    goto exception;
-                *sp++ = val;
-            }
+            GET_FIELD_INLINE(get_field2, 1);
             BREAK;
 
         CASE(OP_put_field):
             {
                 int ret;
+                JSValue obj;
                 JSAtom atom;
+                JSObject *p;
+                JSProperty *pr;
+                JSShapeProperty *prs;
+
                 atom = get_u32(pc);
                 pc += 4;
-                sf->cur_pc = pc;
 
-                ret = JS_SetPropertyInternal(ctx, sp[-2], atom, sp[-1], sp[-2],
-                                             JS_PROP_THROW_STRICT);
-                JS_FreeValue(ctx, sp[-2]);
-                sp -= 2;
-                if (unlikely(ret < 0))
-                    goto exception;
+                obj = sp[-2];
+                if (likely(JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT)) {
+                    p = JS_VALUE_GET_OBJ(obj);
+                    prs = find_own_property(&pr, p, atom);
+                    if (!prs)
+                        goto put_field_slow_path;
+                    if (likely((prs->flags & (JS_PROP_TMASK | JS_PROP_WRITABLE 
|
+                                              JS_PROP_LENGTH)) == 
JS_PROP_WRITABLE)) {
+                        /* fast path */
+                        set_value(ctx, &pr->u.value, sp[-1]);
+                    } else {
+                        goto put_field_slow_path;
+                    }
+                    JS_FreeValue(ctx, obj);
+                    sp -= 2;
+                } else {
+                put_field_slow_path:
+                    sf->cur_pc = pc;
+                    ret = JS_SetPropertyInternal(ctx, obj, atom, sp[-1], obj,
+                                                 JS_PROP_THROW_STRICT);
+                    JS_FreeValue(ctx, obj);
+                    sp -= 2;
+                    if (unlikely(ret < 0))
+                        goto exception;
+                }
+                
             }
             BREAK;
 
@@ -18475,61 +18507,95 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
             }
             BREAK;
 
-        CASE(OP_get_array_el):
-            {
-                JSValue val;
-
-                sf->cur_pc = pc;
-                val = JS_GetPropertyValue(ctx, sp[-2], sp[-1]);
-                JS_FreeValue(ctx, sp[-2]);
-                sp[-2] = val;
-                sp--;
-                if (unlikely(JS_IsException(val)))
-                    goto exception;
+#define GET_ARRAY_EL_INLINE(name, keep)                                 \
+            {                                                           \
+                JSValue val, obj, prop;                                 \
+                JSObject *p;                                            \
+                uint32_t idx;                                           \
+                                                                        \
+                obj = sp[-2];                                           \
+                prop = sp[-1];                                          \
+                if (likely(JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT &&    \
+                           JS_VALUE_GET_TAG(prop) == JS_TAG_INT)) {     \
+                    p = JS_VALUE_GET_OBJ(obj);                          \
+                    idx = JS_VALUE_GET_INT(prop);                       \
+                    if (unlikely(p->class_id != JS_CLASS_ARRAY))        \
+                        goto name ## _slow_path;                        \
+                    if (unlikely(idx >= p->u.array.count))              \
+                        goto name ## _slow_path;                        \
+                    val = JS_DupValue(ctx, p->u.array.u.values[idx]);   \
+                } else {                                                \
+                    name ## _slow_path:                                 \
+                    sf->cur_pc = pc;                                    \
+                    val = JS_GetPropertyValue(ctx, obj, prop);          \
+                    if (unlikely(JS_IsException(val))) {                \
+                        if (keep)                                       \
+                            sp[-1] = JS_UNDEFINED;                      \
+                        else                                            \
+                            sp--;                                       \
+                        goto exception;                                 \
+                    }                                                   \
+                }                                                       \
+                if (keep) {                                             \
+                    sp[-1] = val;                                       \
+                } else {                                                \
+                    JS_FreeValue(ctx, obj);                             \
+                    sp[-2] = val;                                       \
+                    sp--;                                               \
+                }                                                       \
             }
+            
+        CASE(OP_get_array_el):
+            GET_ARRAY_EL_INLINE(get_array_el, 0);
             BREAK;
 
         CASE(OP_get_array_el2):
-            {
-                JSValue val;
-
-                sf->cur_pc = pc;
-                val = JS_GetPropertyValue(ctx, sp[-2], sp[-1]);
-                sp[-1] = val;
-                if (unlikely(JS_IsException(val)))
-                    goto exception;
-            }
+            GET_ARRAY_EL_INLINE(get_array_el2, 1);
             BREAK;
 
         CASE(OP_get_array_el3):
             {
                 JSValue val;
+                JSObject *p;
+                uint32_t idx;
 
-                switch (JS_VALUE_GET_TAG(sp[-2])) {
-                case JS_TAG_INT:
-                case JS_TAG_STRING:
-                case JS_TAG_SYMBOL:
-                    /* undefined and null are tested in JS_GetPropertyValue() 
*/
-                    break;
-                default:
-                    /* must be tested nefore JS_ToPropertyKey */
-                    if (unlikely(JS_IsUndefined(sp[-2]) || JS_IsNull(sp[-2]))) 
{
-                        JS_ThrowTypeError(ctx, "value has no property");
-                        goto exception;
+                if (likely(JS_VALUE_GET_TAG(sp[-2]) == JS_TAG_OBJECT &&
+                           JS_VALUE_GET_TAG(sp[-1]) == JS_TAG_INT)) {
+                    p = JS_VALUE_GET_OBJ(sp[-2]);
+                    idx = JS_VALUE_GET_INT(sp[-1]);
+                    if (unlikely(p->class_id != JS_CLASS_ARRAY))
+                        goto get_array_el3_slow_path;
+                    if (unlikely(idx >= p->u.array.count))
+                        goto get_array_el3_slow_path;
+                    val = JS_DupValue(ctx, p->u.array.u.values[idx]);
+                } else {
+                get_array_el3_slow_path:
+                    switch (JS_VALUE_GET_TAG(sp[-1])) {
+                    case JS_TAG_INT:
+                    case JS_TAG_STRING:
+                    case JS_TAG_SYMBOL:
+                        /* undefined and null are tested in 
JS_GetPropertyValue() */
+                        break;
+                    default:
+                        /* must be tested before JS_ToPropertyKey */
+                        if (unlikely(JS_IsUndefined(sp[-2]) || 
JS_IsNull(sp[-2]))) {
+                            JS_ThrowTypeError(ctx, "value has no property");
+                            goto exception;
+                        }
+                        sf->cur_pc = pc;
+                        ret_val = JS_ToPropertyKey(ctx, sp[-1]);
+                        if (JS_IsException(ret_val))
+                            goto exception;
+                        JS_FreeValue(ctx, sp[-1]);
+                        sp[-1] = ret_val;
+                        break;
                     }
                     sf->cur_pc = pc;
-                    ret_val = JS_ToPropertyKey(ctx, sp[-1]);
-                    if (JS_IsException(ret_val))
+                    val = JS_GetPropertyValue(ctx, sp[-2], JS_DupValue(ctx, 
sp[-1]));
+                    if (unlikely(JS_IsException(val)))
                         goto exception;
-                    JS_FreeValue(ctx, sp[-1]);
-                    sp[-1] = ret_val;
-                    break;
                 }
-                sf->cur_pc = pc;
-                val = JS_GetPropertyValue(ctx, sp[-2], JS_DupValue(ctx, 
sp[-1]));
                 *sp++ = val;
-                if (unlikely(JS_IsException(val)))
-                    goto exception;
             }
             BREAK;
             
@@ -18594,13 +18660,29 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, 
JSValueConst func_obj,
         CASE(OP_put_array_el):
             {
                 int ret;
+                JSObject *p;
+                uint32_t idx;
 
-                sf->cur_pc = pc;
-                ret = JS_SetPropertyValue(ctx, sp[-3], sp[-2], sp[-1], 
JS_PROP_THROW_STRICT);
-                JS_FreeValue(ctx, sp[-3]);
-                sp -= 3;
-                if (unlikely(ret < 0))
-                    goto exception;
+                if (likely(JS_VALUE_GET_TAG(sp[-3]) == JS_TAG_OBJECT &&
+                           JS_VALUE_GET_TAG(sp[-2]) == JS_TAG_INT)) {
+                    p = JS_VALUE_GET_OBJ(sp[-3]);
+                    idx = JS_VALUE_GET_INT(sp[-2]);
+                    if (unlikely(p->class_id != JS_CLASS_ARRAY))
+                        goto put_array_el_slow_path;
+                    if (unlikely(idx >= (uint32_t)p->u.array.count))
+                        goto put_array_el_slow_path;
+                    set_value(ctx, &p->u.array.u.values[idx], sp[-1]);
+                    JS_FreeValue(ctx, sp[-3]);
+                    sp -= 3;
+                } else {
+                put_array_el_slow_path:
+                    sf->cur_pc = pc;
+                    ret = JS_SetPropertyValue(ctx, sp[-3], sp[-2], sp[-1], 
JS_PROP_THROW_STRICT);
+                    JS_FreeValue(ctx, sp[-3]);
+                    sp -= 3;
+                    if (unlikely(ret < 0))
+                        goto exception;
+                }
             }
             BREAK;
 
@@ -31574,20 +31656,10 @@ static int optimize_scope_make_global_ref(JSContext 
*ctx, JSFunctionDef *s,
                                           JSAtom var_name)
 {
     int label_pos, end_pos, pos, op;
-    BOOL is_strict;
-    is_strict = ((s->js_mode & JS_MODE_STRICT) != 0);
 
     /* replace the reference get/put with normal variable
        accesses */
-    if (is_strict) {
-        /* need to check if the variable exists before evaluating the right
-           expression */
-        /* XXX: need an extra OP_true if destructuring an array */
-        dbuf_putc(bc, OP_check_var);
-        dbuf_put_u32(bc, JS_DupAtom(ctx, var_name));
-    } else {
-        /* XXX: need 2 extra OP_true if destructuring an array */
-    }
+    /* XXX: need 2 extra OP_true if destructuring an array */
     if (bc_buf[pos_next] == OP_get_ref_value) {
         dbuf_putc(bc, OP_get_var);
         dbuf_put_u32(bc, JS_DupAtom(ctx, var_name));
@@ -31601,34 +31673,10 @@ static int optimize_scope_make_global_ref(JSContext 
*ctx, JSFunctionDef *s,
     assert(bc_buf[pos] == OP_label);
     end_pos = label_pos + 2;
     op = bc_buf[label_pos];
-    if (is_strict) {
-        if (op != OP_nop) {
-            switch(op) {
-            case OP_insert3:
-                op = OP_insert2;
-                break;
-            case OP_perm4:
-                op = OP_perm3;
-                break;
-            case OP_rot3l:
-                op = OP_swap;
-                break;
-            default:
-                abort();
-            }
-            bc_buf[pos++] = op;
-        }
-    } else {
-        if (op == OP_insert3)
-            bc_buf[pos++] = OP_dup;
-    }
-    if (is_strict) {
-        bc_buf[pos] = OP_put_var_strict;
-        /* XXX: need 1 extra OP_drop if destructuring an array */
-    } else {
-        bc_buf[pos] = OP_put_var;
-        /* XXX: need 2 extra OP_drop if destructuring an array */
-    }
+    if (op == OP_insert3)
+        bc_buf[pos++] = OP_dup;
+    bc_buf[pos] = OP_put_var;
+    /* XXX: need 2 extra OP_drop if destructuring an array */
     put_u32(bc_buf + pos + 1, JS_DupAtom(ctx, var_name));
     pos += 5;
     /* pad with OP_nop */
@@ -34099,12 +34147,11 @@ static __exception int resolve_labels(JSContext *ctx, 
JSFunctionDef *s)
             if (OPTIMIZE) {
                 /* Transformation:
                    insert2 put_field(a) drop -> put_field(a)
-                   insert2 put_var_strict(a) drop -> put_var_strict(a)
                 */
-                if (code_match(&cc, pos_next, M2(OP_put_field, 
OP_put_var_strict), OP_drop, -1)) {
+                if (code_match(&cc, pos_next, OP_put_field, OP_drop, -1)) {
                     if (cc.line_num >= 0) line_num = cc.line_num;
                     add_pc2line_info(s, bc_out.size, line_num);
-                    dbuf_putc(&bc_out, cc.op);
+                    dbuf_putc(&bc_out, OP_put_field);
                     dbuf_put_u32(&bc_out, cc.atom);
                     pos_next = cc.pos;
                     break;
@@ -34250,7 +34297,6 @@ static __exception int resolve_labels(JSContext *ctx, 
JSFunctionDef *s)
                 /* transformation:
                    post_inc put_x drop -> inc put_x
                    post_inc perm3 put_field drop -> inc put_field
-                   post_inc perm3 put_var_strict drop -> inc put_var_strict
                    post_inc perm4 put_array_el drop -> inc put_array_el
                  */
                 int op1, idx;
@@ -34269,11 +34315,11 @@ static __exception int resolve_labels(JSContext *ctx, 
JSFunctionDef *s)
                     put_short_code(&bc_out, op1, idx);
                     break;
                 }
-                if (code_match(&cc, pos_next, OP_perm3, M2(OP_put_field, 
OP_put_var_strict), OP_drop, -1)) {
+                if (code_match(&cc, pos_next, OP_perm3, OP_put_field, OP_drop, 
-1)) {
                     if (cc.line_num >= 0) line_num = cc.line_num;
                     add_pc2line_info(s, bc_out.size, line_num);
                     dbuf_putc(&bc_out, OP_dec + (op - OP_post_dec));
-                    dbuf_putc(&bc_out, cc.op);
+                    dbuf_putc(&bc_out, OP_put_field);
                     dbuf_put_u32(&bc_out, cc.atom);
                     pos_next = cc.pos;
                     break;
@@ -42118,23 +42164,6 @@ static void js_array_iterator_mark(JSRuntime *rt, 
JSValueConst val,
     }
 }
 
-static JSValue js_create_array(JSContext *ctx, int len, JSValueConst *tab)
-{
-    JSValue obj;
-    int i;
-
-    obj = JS_NewArray(ctx);
-    if (JS_IsException(obj))
-        return JS_EXCEPTION;
-    for(i = 0; i < len; i++) {
-        if (JS_CreateDataPropertyUint32(ctx, obj, i, JS_DupValue(ctx, tab[i]), 
0) < 0) {
-            JS_FreeValue(ctx, obj);
-            return JS_EXCEPTION;
-        }
-    }
-    return obj;
-}
-
 static JSValue js_create_array_iterator(JSContext *ctx, JSValueConst this_val,
                                         int argc, JSValueConst *argv, int 
magic)
 {
@@ -51681,16 +51710,29 @@ static JSValue js_promise_withResolvers(JSContext 
*ctx,
     if (JS_IsException(result_promise))
         return result_promise;
     obj = JS_NewObject(ctx);
-    if (JS_IsException(obj)) {
-        JS_FreeValue(ctx, resolving_funcs[0]);
-        JS_FreeValue(ctx, resolving_funcs[1]);
-        JS_FreeValue(ctx, result_promise);
-        return JS_EXCEPTION;
+    if (JS_IsException(obj))
+        goto exception;
+    if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise,
+                               JS_PROP_C_W_E) < 0) {
+        goto exception;
+    }
+    result_promise = JS_UNDEFINED;
+    if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0],
+                               JS_PROP_C_W_E) < 0) {
+        goto exception;
+    }
+    resolving_funcs[0] = JS_UNDEFINED;
+    if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1],
+                               JS_PROP_C_W_E) < 0) {
+        goto exception;
     }
-    JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise, 
JS_PROP_C_W_E);
-    JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0], 
JS_PROP_C_W_E);
-    JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], 
JS_PROP_C_W_E);
     return obj;
+exception:
+    JS_FreeValue(ctx, resolving_funcs[0]);
+    JS_FreeValue(ctx, resolving_funcs[1]);
+    JS_FreeValue(ctx, result_promise);
+    JS_FreeValue(ctx, obj);
+    return JS_EXCEPTION;
 }
 
 static JSValue js_promise_try(JSContext *ctx, JSValueConst this_val,
diff --git a/src/couch_quickjs/quickjs/quickjs.h 
b/src/couch_quickjs/quickjs/quickjs.h
index c8cd14944..cad3652fb 100644
--- a/src/couch_quickjs/quickjs/quickjs.h
+++ b/src/couch_quickjs/quickjs/quickjs.h
@@ -319,8 +319,7 @@ static inline JSValue __JS_NewShortBigInt(JSContext *ctx, 
int64_t d)
    (JS_SetProperty) */
 #define JS_PROP_THROW_STRICT     (1 << 15)
 
-#define JS_PROP_NO_ADD           (1 << 16) /* internal use */
-#define JS_PROP_NO_EXOTIC        (1 << 17) /* internal use */
+#define JS_PROP_NO_EXOTIC        (1 << 16) /* internal use */
 
 #ifndef JS_DEFAULT_STACK_SIZE
 #define JS_DEFAULT_STACK_SIZE (1024 * 1024)
diff --git a/src/couch_quickjs/quickjs/test262.conf 
b/src/couch_quickjs/quickjs/test262.conf
index 73cfa9cd0..430843a25 100644
--- a/src/couch_quickjs/quickjs/test262.conf
+++ b/src/couch_quickjs/quickjs/test262.conf
@@ -116,6 +116,7 @@ for-of
 generators
 globalThis
 hashbang
+host-gc-required
 immutable-arraybuffer=skip
 import-attributes
 import-defer=skip
@@ -152,6 +153,7 @@ logical-assignment-operators
 Map
 Math.sumPrecise
 new.target
+nonextensible-applies-to-private=skip
 numeric-separator-literal
 object-rest
 object-spread
@@ -189,6 +191,8 @@ ShadowRealm=skip
 SharedArrayBuffer
 source-phase-imports-module-source=skip
 source-phase-imports=skip
+stable-array-sort
+stable-typedarray-sort
 string-trimming
 String.fromCodePoint
 String.prototype.at
diff --git a/src/couch_quickjs/quickjs/test262_errors.txt 
b/src/couch_quickjs/quickjs/test262_errors.txt
index e46b03d27..56ac50680 100644
--- a/src/couch_quickjs/quickjs/test262_errors.txt
+++ b/src/couch_quickjs/quickjs/test262_errors.txt
@@ -5,45 +5,72 @@ 
test262/test/annexB/language/expressions/assignmenttargettype/callexpression-in-
 
test262/test/annexB/language/expressions/assignmenttargettype/callexpression-in-prefix-update.js:27:
 SyntaxError: invalid increment/decrement operand
 
test262/test/annexB/language/expressions/assignmenttargettype/callexpression.js:33:
 SyntaxError: invalid assignment left-hand side
 
test262/test/annexB/language/expressions/assignmenttargettype/cover-callexpression-and-asyncarrowhead.js:20:
 SyntaxError: invalid assignment left-hand side
+test262/test/language/identifier-resolution/assign-to-global-undefined.js:20: 
strict mode: expected error
 test262/test/language/statements/expression/S12.4_A1.js:15: unexpected error 
type: Test262: This statement should not be evaluated.
 test262/test/language/statements/expression/S12.4_A1.js:15: strict mode: 
unexpected error type: Test262: This statement should not be evaluated.
-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/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
-test262/test/staging/sm/Function/function-bind.js:14: Test262Error: Conforms 
to NativeFunction Syntax: "function bound unbound() {\n    [native code]\n}"
-test262/test/staging/sm/Function/function-name-for.js:12: Test262Error: 
Expected SameValue(«""», «"forInHead"») to be true
-test262/test/staging/sm/Function/implicit-this-in-parameter-expression.js:13: 
Test262Error: Expected SameValue(«[object Object]», «undefined») to be true
-test262/test/staging/sm/Function/invalid-parameter-list.js:35: Error: 
Assertion failed: expected exception SyntaxError, no exception thrown
-test262/test/staging/sm/RegExp/constructor-ordering-2.js:15: Test262Error: 
Expected SameValue(«false», «true») to be true
+test262/test/staging/sm/Date/UTC-convert-all-arguments.js:13: 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/UTC-convert-all-arguments.js:13: strict mode: 
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:13: 
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/constructor-convert-all-arguments.js:13: strict 
mode: 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/two-digit-years.js:26: Test262Error: Expected 
SameValue(«915177600000», «NaN») to be true
+test262/test/staging/sm/Date/two-digit-years.js:26: strict mode: Test262Error: 
Expected SameValue(«915177600000», «NaN») to be true
+test262/test/staging/sm/Function/arguments-parameter-shadowing.js:14: 
Test262Error: Expected SameValue(«true», «false») to be true
+test262/test/staging/sm/Function/constructor-binding.js:11: Test262Error: 
Expected SameValue(«"function"», «"undefined"») to be true
+test262/test/staging/sm/Function/constructor-binding.js:11: strict mode: 
Test262Error: Expected SameValue(«"function"», «"undefined"») to be true
+test262/test/staging/sm/Function/function-bind.js:24: Test262Error: Conforms 
to NativeFunction Syntax: "function bound unbound() {\n    [native code]\n}"
+test262/test/staging/sm/Function/function-name-for.js:13: Test262Error: 
Expected SameValue(«""», «"forInHead"») to be true
+test262/test/staging/sm/Function/implicit-this-in-parameter-expression.js:12: 
Test262Error: Expected SameValue(«[object Object]», «undefined») to be true
+test262/test/staging/sm/Function/invalid-parameter-list.js:13: Test262Error: 
Expected a SyntaxError to be thrown but no exception was thrown at all
+test262/test/staging/sm/Function/invalid-parameter-list.js:13: strict mode: 
Test262Error: Expected a SyntaxError to be thrown but no exception was thrown 
at all
+test262/test/staging/sm/Math/acosh-exact.js:15: ReferenceError: 
'ONE_MINUS_EPSILON' is not defined
+test262/test/staging/sm/Math/acosh-exact.js:15: strict mode: ReferenceError: 
'ONE_MINUS_EPSILON' is not defined
+test262/test/staging/sm/Math/atanh-exact.js:15: ReferenceError: 
'ONE_PLUS_EPSILON' is not defined
+test262/test/staging/sm/Math/atanh-exact.js:15: strict mode: ReferenceError: 
'ONE_PLUS_EPSILON' is not defined
+test262/test/staging/sm/Math/log1p-exact.js:18: ReferenceError: 
'ONE_PLUS_EPSILON' is not defined
+test262/test/staging/sm/Math/log1p-exact.js:18: strict mode: ReferenceError: 
'ONE_PLUS_EPSILON' is not defined
+test262/test/staging/sm/Math/trunc.js:29: ReferenceError: 'ONE_MINUS_EPSILON' 
is not defined
+test262/test/staging/sm/Math/trunc.js:29: strict mode: ReferenceError: 
'ONE_MINUS_EPSILON' is not defined
+test262/test/staging/sm/RegExp/constructor-ordering-2.js:12: Test262Error: 
Expected SameValue(«false», «true») to be true
+test262/test/staging/sm/RegExp/constructor-ordering-2.js:12: strict mode: 
Test262Error: Expected SameValue(«false», «true») to be true
 test262/test/staging/sm/RegExp/regress-613820-1.js:12: Test262Error: Actual 
[aaa, aa, a] and expected [aa, a, a] should have the same contents. 
 test262/test/staging/sm/RegExp/regress-613820-1.js:12: strict mode: 
Test262Error: Actual [aaa, aa, a] and expected [aa, a, a] should have the same 
contents. 
 test262/test/staging/sm/RegExp/regress-613820-2.js:12: Test262Error: Actual 
[foobar, f, o, o, b, a, r] and expected [foobar, undefined, undefined, 
undefined, b, a, r] should have the same contents. 
 test262/test/staging/sm/RegExp/regress-613820-2.js:12: strict mode: 
Test262Error: Actual [foobar, f, o, o, b, a, r] and expected [foobar, 
undefined, undefined, undefined, b, a, r] should have the same contents. 
 test262/test/staging/sm/RegExp/regress-613820-3.js:12: Test262Error: Actual 
[aab, a, undefined, ab] and expected [aa, undefined, a, undefined] should have 
the same contents. 
 test262/test/staging/sm/RegExp/regress-613820-3.js:12: strict mode: 
Test262Error: Actual [aab, a, undefined, ab] and expected [aa, undefined, a, 
undefined] should have the same contents. 
-test262/test/staging/sm/TypedArray/constructor-buffer-sequence.js:73: Error: 
Assertion failed: expected exception ExpectedError, got Error: Poisoned Value
+test262/test/staging/sm/TypedArray/constructor-buffer-sequence.js:29: 
Test262Error: Expected a ExpectedError but got a Error
+test262/test/staging/sm/TypedArray/constructor-buffer-sequence.js:29: strict 
mode: Test262Error: Expected a ExpectedError but got a Error
 test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: 
Test262Error: Expected SameValue(«2», «6») to be true
-test262/test/staging/sm/TypedArray/sort_modifications.js:12: Test262Error: 
Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to be true
-test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:45: 
Error: Assertion failed: expected exception SyntaxError, no exception thrown
-test262/test/staging/sm/async-functions/await-error.js:12: Test262Error: 
Expected SameValue(«false», «true») to be true
-test262/test/staging/sm/async-functions/await-in-arrow-parameters.js:33: 
Error: Assertion failed: expected exception SyntaxError, no exception thrown - 
AsyncFunction:(a = (b = await/r/g) => {}) => {}
-test262/test/staging/sm/class/boundFunctionSubclassing.js:12: Test262Error: 
Expected SameValue(«false», «true») to be true
-test262/test/staging/sm/class/strictExecution.js:32: Error: Assertion failed: 
expected exception TypeError, no exception thrown
-test262/test/staging/sm/class/superPropOrdering.js:83: Error: Assertion 
failed: expected exception TypeError, no exception thrown
-test262/test/staging/sm/expressions/short-circuit-compound-assignment-const.js:97:
 TypeError: 'a' is read-only
-test262/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js:23:
 Error: Assertion failed: expected exception ReferenceError, got TypeError: 'a' 
is read-only
-test262/test/staging/sm/generators/syntax.js:30: Error: Assertion failed: 
expected SyntaxError, but no exception thrown - function* g() { (function* 
yield() {}); }
-test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-arguments.js:14:
 Test262Error: Expected SameValue(«"object"», «"function"») to be true
-test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-eval.js:12:
 Test262Error: Expected SameValue(«"outer-gouter-geval-gtruefalseq"», 
«"outer-geval-gwith-gtruefalseq"») to be true
-test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-if.js:20:
 TypeError: not a function
-test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-notapplicable.js:15:
 Test262Error: Expected SameValue(«function x() {2}», «function x() {1}») to be 
true
+test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: 
strict mode: Test262Error: Expected SameValue(«2», «6») to be true
+test262/test/staging/sm/TypedArray/sort_modifications.js:9: Test262Error: 
Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to be true
+test262/test/staging/sm/TypedArray/sort_modifications.js:9: strict mode: 
Test262Error: Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to 
be true
+test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:11: 
Test262Error: Expected a SyntaxError to be thrown but no exception was thrown 
at all
+test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:11: 
strict mode: Test262Error: Expected a SyntaxError to be thrown but no exception 
was thrown at all
+test262/test/staging/sm/async-functions/await-in-arrow-parameters.js:10: 
Test262Error: AsyncFunction:(a = (b = await/r/g) => {}) => {} Expected a 
SyntaxError to be thrown but no exception was thrown at all
+test262/test/staging/sm/async-functions/await-in-arrow-parameters.js:10: 
strict mode: Test262Error: AsyncFunction:(a = (b = await/r/g) => {}) => {} 
Expected a SyntaxError to be thrown but no exception was thrown at all
+test262/test/staging/sm/class/boundFunctionSubclassing.js:9: Test262Error: 
Expected SameValue(«false», «true») to be true
+test262/test/staging/sm/class/boundFunctionSubclassing.js:9: strict mode: 
Test262Error: Expected SameValue(«false», «true») to be true
+test262/test/staging/sm/class/strictExecution.js:13: Test262Error: Expected a 
TypeError to be thrown but no exception was thrown at all
+test262/test/staging/sm/class/superPropOrdering.js:17: Test262Error: Expected 
a TypeError to be thrown but no exception was thrown at all
+test262/test/staging/sm/class/superPropOrdering.js:17: strict mode: 
Test262Error: Expected a TypeError to be thrown but no exception was thrown at 
all
+test262/test/staging/sm/expressions/short-circuit-compound-assignment-const.js:96:
 TypeError: 'a' is read-only
+test262/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js:18:
 Test262Error: Expected a ReferenceError but got a TypeError
+test262/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js:18:
 strict mode: Test262Error: Expected a ReferenceError but got a TypeError
+test262/test/staging/sm/generators/syntax.js:50: Test262Error: Expected a 
SyntaxError to be thrown but no exception was thrown at all
+test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-arguments.js:13:
 Test262Error: Expected SameValue(«"object"», «"function"») to be true
+test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-eval.js:11:
 Test262Error: Expected SameValue(«"outer-gouter-geval-gtruefalseq"», 
«"outer-geval-gwith-gtruefalseq"») to be true
+test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-if.js:19:
 TypeError: not a function
+test262/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-notapplicable.js:14:
 Test262Error: Expected SameValue(«function x() {2}», «function x() {1}») to be 
true
 
test262/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js:23:
 Test262Error: Expected SameValue(«3», «4») to be true
-test262/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js:17:
 Test262Error: Expected SameValue(«"g"», «"global-x"») to be true
-test262/test/staging/sm/object/defineProperties-order.js:14: Test262Error: 
Expected 
SameValue(«"ownKeys,getOwnPropertyDescriptor,getOwnPropertyDescriptor,get,get"»,
 «"ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get"») to be 
true
-test262/test/staging/sm/regress/regress-602621.js:14: Test262Error: function 
sub-statement must override arguments Expected SameValue(«"function"», 
«"object"») to be true
-test262/test/staging/sm/regress/regress-1383630.js:30: Error: Assertion 
failed: expected exception TypeError, no exception thrown
-test262/test/staging/sm/statements/arrow-function-in-for-statement-head.js:15: 
Test262Error: expected syntax error, got Error: didn't throw Expected 
SameValue(«false», «true») to be true
-test262/test/staging/sm/statements/regress-642975.js:14: Test262Error: 
Expected SameValue(«undefined», «"y"») to be true
-test262/test/staging/sm/statements/try-completion.js:17: Test262Error: 
Expected SameValue(«"try"», «undefined») to be true
+test262/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js:16:
 Test262Error: Expected SameValue(«"g"», «"global-x"») to be true
+test262/test/staging/sm/object/defineProperties-order.js:11: Test262Error: 
Expected 
SameValue(«"ownKeys,getOwnPropertyDescriptor,getOwnPropertyDescriptor,get,get"»,
 «"ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get"») to be 
true
+test262/test/staging/sm/object/defineProperties-order.js:11: strict mode: 
Test262Error: Expected 
SameValue(«"ownKeys,getOwnPropertyDescriptor,getOwnPropertyDescriptor,get,get"»,
 «"ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get"») to be 
true
+test262/test/staging/sm/regress/regress-602621.js:13: Test262Error: function 
sub-statement must override arguments Expected SameValue(«"function"», 
«"object"») to be true
+test262/test/staging/sm/regress/regress-1383630.js:28: Test262Error: proxy 
must report the same value for the non-writable, non-configurable property 
Expected a TypeError to be thrown but no exception was thrown at all
+test262/test/staging/sm/regress/regress-1383630.js:28: strict mode: 
Test262Error: proxy must report the same value for the non-writable, 
non-configurable property Expected a TypeError to be thrown but no exception 
was thrown at all
+test262/test/staging/sm/statements/arrow-function-in-for-statement-head.js:13: 
Test262Error: Expected a SyntaxError to be thrown but no exception was thrown 
at all
+test262/test/staging/sm/statements/arrow-function-in-for-statement-head.js:13: 
strict mode: Test262Error: Expected a SyntaxError to be thrown but no exception 
was thrown at all
+test262/test/staging/sm/statements/regress-642975.js:11: Test262Error: 
Expected SameValue(«undefined», «"y"») to be true
+test262/test/staging/sm/statements/regress-642975.js:11: strict mode: 
Test262Error: Expected SameValue(«undefined», «"y"») to be true
+test262/test/staging/sm/statements/try-completion.js:11: Test262Error: 
Expected SameValue(«"try"», «undefined») to be true
+test262/test/staging/sm/statements/try-completion.js:11: strict mode: 
Test262Error: Expected SameValue(«"try"», «undefined») to be true
diff --git a/src/couch_quickjs/quickjs/tests/test262.patch 
b/src/couch_quickjs/quickjs/tests/test262.patch
index e488df829..d7cba88cc 100644
--- a/src/couch_quickjs/quickjs/tests/test262.patch
+++ b/src/couch_quickjs/quickjs/tests/test262.patch
@@ -1,5 +1,5 @@
 diff --git a/harness/atomicsHelper.js b/harness/atomicsHelper.js
-index 9828b15..4a5919d 100644
+index 9828b15..9e24d64 100644
 --- a/harness/atomicsHelper.js
 +++ b/harness/atomicsHelper.js
 @@ -272,10 +272,14 @@ $262.agent.waitUntil = function(typedArray, index, 
expected) {
@@ -70,66 +70,3 @@ index b397be0..c197ddc 100644
    }
    return result;
  }
-diff --git a/harness/sm/non262.js b/harness/sm/non262.js
-index 89df923..79ded15 100644
---- a/harness/sm/non262.js
-+++ b/harness/sm/non262.js
-@@ -34,8 +34,6 @@ globalThis.createNewGlobal = function() {
-   return $262.createRealm().global
- }
- 
--function print(...args) {
--}
- function assertEq(...args) {
-   assert.sameValue(...args)
- }
-diff --git a/test/staging/sm/extensions/regress-469625-01.js 
b/test/staging/sm/extensions/regress-469625-01.js
-index 81f84fc..4652002 100644
---- a/test/staging/sm/extensions/regress-469625-01.js
-+++ b/test/staging/sm/extensions/regress-469625-01.js
-@@ -14,8 +14,7 @@ esid: pending
- 
//-----------------------------------------------------------------------------
- var BUGNUMBER = 469625;
- var summary = 'TM: Array prototype and expression closures';
--var actual = '';
--var expect = '';
-+var actual = null;
- 
- 
- 
//-----------------------------------------------------------------------------
-@@ -24,9 +23,6 @@ test();
- 
- function test()
- {
--  expect = 'TypeError: [].__proto__ is not a function';
--
--
-   Array.prototype.__proto__ = function () { return 3; };
- 
-   try
-@@ -35,8 +31,10 @@ function test()
-   }
-   catch(ex)
-   {
--    print(actual = ex + '');
-+    print(ex + '');
-+    actual = ex;
-   }
- 
--  assert.sameValue(expect, actual, summary);
-+  assert.sameValue(actual instanceof TypeError, true);
-+  assert.sameValue(actual.message.includes("not a function"), true);
- }
-diff --git a/test/staging/sm/misc/new-with-non-constructor.js 
b/test/staging/sm/misc/new-with-non-constructor.js
-index 18c2f0c..f9aa209 100644
---- a/test/staging/sm/misc/new-with-non-constructor.js
-+++ b/test/staging/sm/misc/new-with-non-constructor.js
-@@ -16,7 +16,7 @@ function checkConstruct(thing) {
-         new thing();
-         assert.sameValue(0, 1, "not reached " + thing);
-     } catch (e) {
--        assert.sameValue(e.message.includes(" is not a constructor") ||
-+        assert.sameValue(e.message.includes("not a constructor") ||
-                  e.message === "Function.prototype.toString called on 
incompatible object", true);
-     }
- }

Reply via email to