From d029662fcb74e69ff5b46711b34ff08a9e822aa8 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Mon, 25 Aug 2025 22:26:24 -0700 Subject: [PATCH] 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 -#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); -- 2.47.3