This is an automated email from the ASF dual-hosted git repository. vatamane pushed a commit to branch update-quickjs in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 9c0584a4d9f7a78031a92266a7ba67bda052f470 Author: Nick Vatamaniuc <[email protected]> AuthorDate: Fri Jun 20 14:04:15 2025 -0400 Update QuickJS * Read byteOffset for detached buffers https://github.com/bellard/quickjs/commit/00b1d8d0b2d06e540444245b54a8fd86ccf7260b * Add `Error.isError()` https://github.com/bellard/quickjs/commit/098f221cf3124a4a423d089bae83b81ccf108d20 Some tests were updated (more tests pass now) and the upstream changelog was updated, but already have most of those changes anyway. Also, update our maintenance scripts -- add a script used to adjust the patches themselves. Normally we just have to run `./update_and_apply_patches.sh` that clones QuickJS and applies our patch. But after some time the line numbers in our patch may start to drift vs the upstream `quickjs.c` file, so it helps to regerate the patch itself periodically. Assuming the local working directory is patched, call the `./update_patches.sh` script and it will clone a fresh QuickJS master and run a diff from that master to our working directory and make that a new patch. --- .../patches/01-spidermonkey-185-mode.patch | 6 +++--- src/couch_quickjs/quickjs/Changelog | 15 +++++++++++++++ src/couch_quickjs/quickjs/quickjs.c | 22 ++++++++++++++++------ src/couch_quickjs/quickjs/test262.conf | 2 +- src/couch_quickjs/quickjs/test262_errors.txt | 1 - src/couch_quickjs/update_and_apply_patches.sh | 8 ++++---- src/couch_quickjs/update_patches.sh | 22 ++++++++++++++++++++++ 7 files changed, 61 insertions(+), 15 deletions(-) diff --git a/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch b/src/couch_quickjs/patches/01-spidermonkey-185-mode.patch index 56711a4ab..d4a85a5a0 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-05-24 09:43:14 -+++ quickjs/quickjs.c 2025-05-28 21:55:36 -@@ -30590,10 +30590,24 @@ +--- quickjs-master/quickjs.c 2025-06-14 05:51:48 ++++ quickjs/quickjs.c 2025-06-20 13:56:52 +@@ -30599,10 +30599,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/quickjs/Changelog b/src/couch_quickjs/quickjs/Changelog index 7cc33993d..b1443f5ad 100644 --- a/src/couch_quickjs/quickjs/Changelog +++ b/src/couch_quickjs/quickjs/Changelog @@ -1,3 +1,18 @@ +- added JSON modules and import attributes +- added JS_PrintValue() API +- qjs: pretty print objects in print() and console.log() +- qjs: better promise rejection tracker heuristics +- added RegExp v flag +- added RegExp modifiers +- added RegExp.escape +- added Float16Array +- added Promise.try +- improved JSON parser spec conformance +- qjs: improved compatibility of std.parseExtJSON() with JSON5 and + accept JSON5 modules +- added JS_FreePropertyEnum() and JS_AtomToCStringLen() API +- added Error.isError() + 2025-04-26: - removed the bignum extensions and qjscalc diff --git a/src/couch_quickjs/quickjs/quickjs.c b/src/couch_quickjs/quickjs/quickjs.c index 1cebe331f..10d28d6f1 100644 --- a/src/couch_quickjs/quickjs/quickjs.c +++ b/src/couch_quickjs/quickjs/quickjs.c @@ -39990,6 +39990,16 @@ static const JSCFunctionListEntry js_error_proto_funcs[] = { JS_PROP_STRING_DEF("message", "", JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE ), }; +static JSValue js_error_isError(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + return JS_NewBool(ctx, JS_IsError(ctx, argv[0])); +} + +static const JSCFunctionListEntry js_error_funcs[] = { + JS_CFUNC_DEF("isError", 1, js_error_isError), +}; + /* AggregateError */ /* used by C code. */ @@ -52291,6 +52301,7 @@ void JS_AddIntrinsicBaseObjects(JSContext *ctx) "Error", 1, JS_CFUNC_constructor_or_func_magic, -1); JS_NewGlobalCConstructor2(ctx, obj1, "Error", ctx->class_proto[JS_CLASS_ERROR]); + JS_SetPropertyFunctionList(ctx, obj1, js_error_funcs, countof(js_error_funcs)); /* Used to squelch a -Wcast-function-type warning. */ JSCFunctionType ft = { .generic_magic = js_error_constructor }; @@ -54031,7 +54042,8 @@ static JSValue js_typed_array_subarray(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { JSValueConst args[4]; - JSValue arr, byteOffset, ta_buffer; + JSValue arr, ta_buffer; + JSTypedArray *ta; JSObject *p; int len, start, final, count, shift, offset; @@ -54048,12 +54060,10 @@ static JSValue js_typed_array_subarray(JSContext *ctx, JSValueConst this_val, goto exception; } count = max_int(final - start, 0); - byteOffset = js_typed_array_get_byteOffset(ctx, this_val, 0); - if (JS_IsException(byteOffset)) - goto exception; shift = typed_array_size_log2(p->class_id); - offset = JS_VALUE_GET_INT(byteOffset) + (start << shift); - JS_FreeValue(ctx, byteOffset); + ta = p->u.typed_array; + /* Read byteOffset (ta->offset) even if detached */ + offset = ta->offset + (start << shift); ta_buffer = js_typed_array_get_buffer(ctx, this_val, 0); if (JS_IsException(ta_buffer)) goto exception; diff --git a/src/couch_quickjs/quickjs/test262.conf b/src/couch_quickjs/quickjs/test262.conf index 0966a594a..327759454 100644 --- a/src/couch_quickjs/quickjs/test262.conf +++ b/src/couch_quickjs/quickjs/test262.conf @@ -103,7 +103,7 @@ destructuring-assignment destructuring-binding dynamic-import error-cause -Error.isError=skip +Error.isError explicit-resource-management=skip exponentiation export-star-as-namespace-from-module diff --git a/src/couch_quickjs/quickjs/test262_errors.txt b/src/couch_quickjs/quickjs/test262_errors.txt index 9df6f749a..7dd3f7624 100644 --- a/src/couch_quickjs/quickjs/test262_errors.txt +++ b/src/couch_quickjs/quickjs/test262_errors.txt @@ -23,7 +23,6 @@ test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: Test262 test262/test/staging/sm/TypedArray/set-detached-bigint.js:27: Error: Assertion failed: expected exception SyntaxError, got RangeError: invalid array length test262/test/staging/sm/TypedArray/set-detached.js:112: RangeError: invalid array length 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/TypedArray/subarray.js:15: Test262Error: 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) => {}) => {} diff --git a/src/couch_quickjs/update_and_apply_patches.sh b/src/couch_quickjs/update_and_apply_patches.sh index 92fbb6355..87454c9c3 100755 --- a/src/couch_quickjs/update_and_apply_patches.sh +++ b/src/couch_quickjs/update_and_apply_patches.sh @@ -7,9 +7,6 @@ set -e # This is the main branch of the github mirror URL=https://github.com/bellard/quickjs/archive/refs/heads/master.zip # -# The other alternatives: -# https://github.com/quickjs-ng/quickjs/commits/master/ - echo echo " * backup quickjs to quickjs.bak" @@ -50,6 +47,9 @@ echo " * removing quickjs.bak" rm -rf quickjs.bak echo -# Example how to generate patches: +# Example how to update patches themselves: # +# Run +# ./update_patches.sh +# OR manually run after cloning and unzipping master.zip from quickjs: # diff -u quickjs-master/quickjs.c quickjs/quickjs.c > patches/01-spidermonkey-185-mode.patch diff --git a/src/couch_quickjs/update_patches.sh b/src/couch_quickjs/update_patches.sh new file mode 100755 index 000000000..f14b5ab6f --- /dev/null +++ b/src/couch_quickjs/update_patches.sh @@ -0,0 +1,22 @@ +# Update patches +# +# Call this script after using update_and_apply_patches.sh to adjust +# the patches themselves. Sometimes line offsets drift and so this takes +# a new diff from the master QuickJS vs current source tree and regenerates +# the patch. + +set -e + +URL=https://github.com/bellard/quickjs/archive/refs/heads/master.zip + +echo " * wget ${URL}" +rm -rf master.zip quickjs-master +wget -q ${URL} +echo " * unzip master.zip to quickjs-master" +unzip -q -o master.zip +echo " * updating 01-spidermonkey-185-mode.patch" +set +e +diff -u quickjs-master/quickjs.c quickjs/quickjs.c > patches/01-spidermonkey-185-mode.patch +set -e +echo " * cleaning up" +rm -rf master.zip quickjs-master
