]> git.kaiwu.me - njs.git/commitdiff
QuickJS: fixed compatibility issue with QuickJS-NG 0.11.0.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 19 Nov 2025 00:10:52 +0000 (16:10 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Thu, 20 Nov 2025 17:03:04 +0000 (09:03 -0800)
.github/workflows/check-pr.yml
auto/quickjs
external/njs_shell.c
external/qjs_fs_module.c
src/qjs.h

index d5e0edd2707597bd089b75116d3e004e7c5e02b9..b64adbacb4e484b4f34703f9f2998b44c73a4bd0 100644 (file)
@@ -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)
 
index 8d6b544f9ca752d1e623d36220d0e26dbb2ddfac..00fcbc0b837b0a6e2c1990cc09146a9ecb0d9cf8 100644 (file)
@@ -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 <quickjs_compat.h>
+
+                          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 <quickjs_compat.h>
index d4132d28f7c8d05a0d7444801439d75e649029a6..d72a3d98769ec8244c14c4dfa6ccc04fcbf35ee2 100644 (file)
@@ -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", "");
 
index 48ae9833cbd4f19daddc8ed8057395b233508509..4fcce40f85f8ca700c163ec8cf02863051062dc5 100644 (file)
@@ -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;
 
index df5bfd11c5b69629270b7e72c284850b616a206f..240e150ba79d471005ed8b0a42382af03a8af343 100644 (file)
--- 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_ */