changeset 2609:c86522744d77

QuickJS: using enum instead of manual opaque id table.
author Dmitry Volyntsev <xeioex@nginx.com>
date Mon, 25 Aug 2025 22:26:24 -0700
parents 76ccd4e7d5d7
children 54eab0317d4c
files nginx/ngx_js.h src/qjs.h
diffstat 2 files changed, 36 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/nginx/ngx_js.h	Fri Aug 29 09:42:18 2025 -0700
+++ b/nginx/ngx_js.h	Mon Aug 25 22:26:24 2025 -0700
@@ -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;
--- a/src/qjs.h	Fri Aug 29 09:42:18 2025 -0700
+++ b/src/qjs.h	Mon Aug 25 22:26:24 2025 -0700
@@ -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);