From 52930904dd4448859cda1a564547ed1f24b0ebbf Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Tue, 18 Nov 2025 16:10:52 -0800 Subject: [PATCH] QuickJS: fixed compatibility issue with QuickJS-NG 0.11.0. --- .github/workflows/check-pr.yml | 2 +- auto/quickjs | 18 ++++++++++++++++++ external/njs_shell.c | 2 +- external/qjs_fs_module.c | 6 +++--- src/qjs.h | 6 ++++++ 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check-pr.yml b/.github/workflows/check-pr.yml index d5e0edd2..b64adbac 100644 --- a/.github/workflows/check-pr.yml +++ b/.github/workflows/check-pr.yml @@ -55,7 +55,7 @@ jobs: run: | git clone https://github.com/quickjs-ng/quickjs quickjs-ng cd quickjs-ng - git checkout v0.9.0 + git checkout v0.11.0 CFLAGS="$CC_OPT -fPIC" LDFLAGS=$LD_OPT cmake -B build cmake --build build --target qjs -j $(nproc) diff --git a/auto/quickjs b/auto/quickjs index 8d6b544f..00fcbc0b 100644 --- a/auto/quickjs +++ b/auto/quickjs @@ -136,6 +136,24 @@ if [ $NJS_TRY_QUICKJS = YES ]; then . auto/feature + njs_feature="QuickJS JS_IsError()" + njs_feature_name=NJS_HAVE_QUICKJS_IS_ERROR_SINGLE_ARG + njs_feature_test="#include + + int main() { + JSRuntime *rt; + JSContext *ctx; + + rt = JS_NewRuntime(); + ctx = JS_NewContext(rt); + (void) JS_IsError(JS_UNDEFINED); + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + return 0; + }" + + . auto/feature + njs_feature="QuickJS JS_AddIntrinsicBigInt()" njs_feature_name=NJS_HAVE_QUICKJS_ADD_INTRINSIC_BIG_INT njs_feature_test="#include diff --git a/external/njs_shell.c b/external/njs_shell.c index d4132d28..d72a3d98 100644 --- a/external/njs_shell.c +++ b/external/njs_shell.c @@ -1960,7 +1960,7 @@ njs_qjs_dump_error2(JSContext *ctx, JSValueConst exception) _Bool is_error; JSValue val; - is_error = JS_IsError(ctx, exception); + is_error = qjs_is_error(ctx, exception); njs_qjs_dump_obj(ctx, stderr, exception, "Thrown:\n", ""); diff --git a/external/qjs_fs_module.c b/external/qjs_fs_module.c index 48ae9833..4fcce40f 100644 --- a/external/qjs_fs_module.c +++ b/external/qjs_fs_module.c @@ -2696,7 +2696,7 @@ qjs_fs_result(JSContext *cx, JSValue result, int calltype, JSValue callback) switch (calltype) { case QJS_FS_DIRECT: - if (JS_IsError(cx, result)) { + if (qjs_is_error(cx, result)) { JS_Throw(cx, result); return JS_EXCEPTION; } @@ -2704,7 +2704,7 @@ qjs_fs_result(JSContext *cx, JSValue result, int calltype, JSValue callback) return result; case QJS_FS_PROMISE: - if (JS_IsError(cx, result)) { + if (qjs_is_error(cx, result)) { JS_Throw(cx, result); return qjs_promise_result(cx, JS_EXCEPTION); } @@ -2712,7 +2712,7 @@ qjs_fs_result(JSContext *cx, JSValue result, int calltype, JSValue callback) return qjs_promise_result(cx, result); case QJS_FS_CALLBACK: - if (JS_IsError(cx, result)) { + if (qjs_is_error(cx, result)) { arguments[0] = result; arguments[1] = JS_UNDEFINED; diff --git a/src/qjs.h b/src/qjs.h index df5bfd11..240e150b 100644 --- a/src/qjs.h +++ b/src/qjs.h @@ -150,6 +150,12 @@ static inline JS_BOOL JS_IsNullOrUndefined(JSValueConst v) #define qjs_is_array(cx, a) JS_IsArray(cx, a) #endif +#ifdef NJS_HAVE_QUICKJS_IS_ERROR_SINGLE_ARG +#define qjs_is_error(cx, a) JS_IsError(a) +#else +#define qjs_is_error(cx, a) JS_IsError(cx, a) +#endif + extern qjs_module_t *qjs_modules[]; #endif /* _QJS_H_INCLUDED_ */ -- 2.47.3