[njs] QuickJS: using enum instead of manual opaque id table.

noreply at nginx.com noreply at nginx.com
Mon Sep 8 23:00:02 UTC 2025


details:   https://github.com/nginx/njs/commit/d029662fcb74e69ff5b46711b34ff08a9e822aa8
branches:  master
commit:    d029662fcb74e69ff5b46711b34ff08a9e822aa8
user:      Dmitry Volyntsev <xeioex at nginx.com>
date:      Mon, 25 Aug 2025 22:26:24 -0700
description:
QuickJS: using enum instead of manual opaque id table.


---
 nginx/ngx_js.h | 37 ++++++++++++++++++++-----------------
 src/qjs.h      | 31 ++++++++++++++++---------------
 2 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/nginx/ngx_js.h b/nginx/ngx_js.h
index 5a5a79b3..0e217e90 100644
--- a/nginx/ngx_js.h
+++ b/nginx/ngx_js.h
@@ -39,6 +39,7 @@
 
 #define ngx_js_buffer_type(btype) ((btype) & ~NGX_JS_DEPRECATED)
 
+#if (NJS_HAVE_QUICKJS)
 /*
  * This static table solves the problem of a native QuickJS approach
  * which uses a static variables of type JSClassID and JS_NewClassID() to
@@ -47,23 +48,25 @@
  * are loaded dynamically.
  */
 
-#define NGX_QJS_CLASS_ID_OFFSET (QJS_CORE_CLASS_ID_LAST)
-#define NGX_QJS_CLASS_ID_CONSOLE (NGX_QJS_CLASS_ID_OFFSET + 1)
-#define NGX_QJS_CLASS_ID_HTTP_REQUEST (NGX_QJS_CLASS_ID_OFFSET + 2)
-#define NGX_QJS_CLASS_ID_HTTP_PERIODIC (NGX_QJS_CLASS_ID_OFFSET + 3)
-#define NGX_QJS_CLASS_ID_HTTP_VARS (NGX_QJS_CLASS_ID_OFFSET + 4)
-#define NGX_QJS_CLASS_ID_HTTP_HEADERS_IN (NGX_QJS_CLASS_ID_OFFSET + 5)
-#define NGX_QJS_CLASS_ID_HTTP_HEADERS_OUT (NGX_QJS_CLASS_ID_OFFSET + 6)
-#define NGX_QJS_CLASS_ID_STREAM_SESSION (NGX_QJS_CLASS_ID_OFFSET + 7)
-#define NGX_QJS_CLASS_ID_STREAM_PERIODIC (NGX_QJS_CLASS_ID_OFFSET + 8)
-#define NGX_QJS_CLASS_ID_STREAM_FLAGS (NGX_QJS_CLASS_ID_OFFSET + 9)
-#define NGX_QJS_CLASS_ID_STREAM_VARS (NGX_QJS_CLASS_ID_OFFSET + 10)
-#define NGX_QJS_CLASS_ID_SHARED (NGX_QJS_CLASS_ID_OFFSET + 11)
-#define NGX_QJS_CLASS_ID_SHARED_DICT (NGX_QJS_CLASS_ID_OFFSET + 12)
-#define NGX_QJS_CLASS_ID_SHARED_DICT_ERROR (NGX_QJS_CLASS_ID_OFFSET + 13)
-#define NGX_QJS_CLASS_ID_FETCH_HEADERS (NGX_QJS_CLASS_ID_OFFSET + 14)
-#define NGX_QJS_CLASS_ID_FETCH_REQUEST (NGX_QJS_CLASS_ID_OFFSET + 15)
-#define NGX_QJS_CLASS_ID_FETCH_RESPONSE (NGX_QJS_CLASS_ID_OFFSET + 16)
+enum {
+    NGX_QJS_CLASS_ID_CONSOLE = QJS_CORE_CLASS_ID_LAST,
+    NGX_QJS_CLASS_ID_HTTP_REQUEST,
+    NGX_QJS_CLASS_ID_HTTP_PERIODIC,
+    NGX_QJS_CLASS_ID_HTTP_VARS,
+    NGX_QJS_CLASS_ID_HTTP_HEADERS_IN,
+    NGX_QJS_CLASS_ID_HTTP_HEADERS_OUT,
+    NGX_QJS_CLASS_ID_STREAM_SESSION,
+    NGX_QJS_CLASS_ID_STREAM_PERIODIC,
+    NGX_QJS_CLASS_ID_STREAM_FLAGS,
+    NGX_QJS_CLASS_ID_STREAM_VARS,
+    NGX_QJS_CLASS_ID_SHARED,
+    NGX_QJS_CLASS_ID_SHARED_DICT,
+    NGX_QJS_CLASS_ID_SHARED_DICT_ERROR,
+    NGX_QJS_CLASS_ID_FETCH_HEADERS,
+    NGX_QJS_CLASS_ID_FETCH_REQUEST,
+    NGX_QJS_CLASS_ID_FETCH_RESPONSE,
+};
+#endif
 
 
 typedef struct ngx_js_loc_conf_s ngx_js_loc_conf_t;
diff --git a/src/qjs.h b/src/qjs.h
index cd5c2521..3b50143e 100644
--- a/src/qjs.h
+++ b/src/qjs.h
@@ -22,21 +22,22 @@
 #include <quickjs_compat.h>
 
 
-#define QJS_CORE_CLASS_ID_OFFSET    64
-#define QJS_CORE_CLASS_ID_BUFFER    (QJS_CORE_CLASS_ID_OFFSET)
-#define QJS_CORE_CLASS_ID_UINT8_ARRAY_CTOR (QJS_CORE_CLASS_ID_OFFSET + 1)
-#define QJS_CORE_CLASS_ID_TEXT_DECODER (QJS_CORE_CLASS_ID_OFFSET + 2)
-#define QJS_CORE_CLASS_ID_TEXT_ENCODER (QJS_CORE_CLASS_ID_OFFSET + 3)
-#define QJS_CORE_CLASS_ID_FS_STATS  (QJS_CORE_CLASS_ID_OFFSET + 4)
-#define QJS_CORE_CLASS_ID_FS_DIRENT (QJS_CORE_CLASS_ID_OFFSET + 5)
-#define QJS_CORE_CLASS_ID_FS_FILEHANDLE (QJS_CORE_CLASS_ID_OFFSET + 6)
-#define QJS_CORE_CLASS_ID_WEBCRYPTO_KEY (QJS_CORE_CLASS_ID_OFFSET + 7)
-#define QJS_CORE_CLASS_CRYPTO_HASH (QJS_CORE_CLASS_ID_OFFSET + 8)
-#define QJS_CORE_CLASS_CRYPTO_HMAC (QJS_CORE_CLASS_ID_OFFSET + 9)
-#define QJS_CORE_CLASS_ID_XML_DOC (QJS_CORE_CLASS_ID_OFFSET + 10)
-#define QJS_CORE_CLASS_ID_XML_NODE (QJS_CORE_CLASS_ID_OFFSET + 11)
-#define QJS_CORE_CLASS_ID_XML_ATTR (QJS_CORE_CLASS_ID_OFFSET + 12)
-#define QJS_CORE_CLASS_ID_LAST      (QJS_CORE_CLASS_ID_OFFSET + 13)
+enum {
+    QJS_CORE_CLASS_ID_BUFFER = 64,
+    QJS_CORE_CLASS_ID_UINT8_ARRAY_CTOR,
+    QJS_CORE_CLASS_ID_TEXT_DECODER,
+    QJS_CORE_CLASS_ID_TEXT_ENCODER,
+    QJS_CORE_CLASS_ID_FS_STATS,
+    QJS_CORE_CLASS_ID_FS_DIRENT,
+    QJS_CORE_CLASS_ID_FS_FILEHANDLE,
+    QJS_CORE_CLASS_ID_WEBCRYPTO_KEY,
+    QJS_CORE_CLASS_CRYPTO_HASH,
+    QJS_CORE_CLASS_CRYPTO_HMAC,
+    QJS_CORE_CLASS_ID_XML_DOC,
+    QJS_CORE_CLASS_ID_XML_NODE,
+    QJS_CORE_CLASS_ID_XML_ATTR,
+    QJS_CORE_CLASS_ID_LAST,
+};
 
 
 typedef JSModuleDef *(*qjs_addon_init_pt)(JSContext *ctx, const char *name);


More information about the nginx-devel mailing list