[njs] QuickJS: making ngx_qjs_*() functions consistent with ngx_js_*().

noreply at nginx.com noreply at nginx.com
Tue Mar 18 02:00:02 UTC 2025


details:   https://github.com/nginx/njs/commit/9010aeea7807a6398e5d5ea89794f94ca0e4cb1e
branches:  master
commit:    9010aeea7807a6398e5d5ea89794f94ca0e4cb1e
user:      hongzhidao <hongzhidao at gmail.com>
date:      Mon, 17 Mar 2025 14:40:49 +0800
description:
QuickJS: making ngx_qjs_*() functions consistent with ngx_js_*().


---
 nginx/ngx_http_js_module.c   | 71 ++++++++++++++++---------------------
 nginx/ngx_js.c               | 84 ++++++++++++++++++++++++--------------------
 nginx/ngx_js.h               |  8 ++---
 nginx/ngx_js_shared_dict.c   | 30 ++++------------
 nginx/ngx_stream_js_module.c | 16 ++++-----
 5 files changed, 91 insertions(+), 118 deletions(-)

diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c
index 71fd92ba..ae970eb1 100644
--- a/nginx/ngx_http_js_module.c
+++ b/nginx/ngx_http_js_module.c
@@ -5133,7 +5133,7 @@ ngx_http_qjs_ext_internal_redirect(JSContext *cx, JSValueConst this_val,
                          "internalRedirect cannot be called while filtering");
     }
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &ctx->redirect_uri) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &ctx->redirect_uri) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -5412,7 +5412,7 @@ ngx_http_qjs_ext_return(JSContext *cx, JSValueConst this_val,
     ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
 
     if (status < NGX_HTTP_BAD_REQUEST || !JS_IsNullOrUndefined(argv[1])) {
-        if (ngx_qjs_string(ctx->engine, argv[1], &body) != NGX_OK) {
+        if (ngx_qjs_string(cx, argv[1], &body) != NGX_OK) {
             return JS_ThrowOutOfMemory(cx);
         }
 
@@ -5515,7 +5515,7 @@ ngx_http_qjs_ext_send(JSContext *cx, JSValueConst this_val,
     ll = &out;
 
     for (n = 0; n < (ngx_uint_t) argc; n++) {
-        if (ngx_qjs_string(ctx->engine, argv[n], &s) != NGX_OK) {
+        if (ngx_qjs_string(cx, argv[n], &s) != NGX_OK) {
             return JS_ThrowTypeError(cx, "failed to convert arg");
         }
 
@@ -5578,7 +5578,7 @@ ngx_http_qjs_ext_send_buffer(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "cannot send buffer while not filtering");
     }
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &buffer) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &buffer) != NGX_OK) {
         return JS_ThrowTypeError(cx, "failed get buffer arg");
     }
 
@@ -5735,7 +5735,7 @@ ngx_http_qjs_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
         reply = JS_DupValue(cx, ngx_qjs_arg(sctx->args[0]));
     }
 
-    rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, event->function, &reply, 1);
+    rc = ngx_qjs_call(cx, event->function, &reply, 1);
 
     JS_FreeValue(cx, reply);
     ngx_js_del_event(ctx, event);
@@ -5786,7 +5786,7 @@ ngx_http_qjs_ext_subrequest(JSContext *cx, JSValueConst this_val,
                                      "the primary request");
     }
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &uri) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &uri) != NGX_OK) {
         return JS_ThrowTypeError(cx, "failed to convert uri arg");
     }
 
@@ -5812,7 +5812,7 @@ ngx_http_qjs_ext_subrequest(JSContext *cx, JSValueConst this_val,
     arg = argv[1];
 
     if (JS_IsString(arg)) {
-        if (ngx_qjs_string(ctx->engine, arg, &args) != NGX_OK) {
+        if (ngx_qjs_string(cx, arg, &args) != NGX_OK) {
             return JS_ThrowTypeError(cx, "failed to convert args");
         }
 
@@ -5833,7 +5833,7 @@ ngx_http_qjs_ext_subrequest(JSContext *cx, JSValueConst this_val,
         }
 
         if (!JS_IsUndefined(value)) {
-            rc = ngx_qjs_string(ctx->engine, value, &args);
+            rc = ngx_qjs_string(cx, value, &args);
             JS_FreeValue(cx, value);
 
             if (rc != NGX_OK) {
@@ -5857,7 +5857,7 @@ ngx_http_qjs_ext_subrequest(JSContext *cx, JSValueConst this_val,
         }
 
         if (!JS_IsUndefined(value)) {
-            rc = ngx_qjs_string(ctx->engine, value, &method_name);
+            rc = ngx_qjs_string(cx, value, &method_name);
             JS_FreeValue(cx, value);
 
             if (rc != NGX_OK) {
@@ -5884,7 +5884,7 @@ ngx_http_qjs_ext_subrequest(JSContext *cx, JSValueConst this_val,
         }
 
         if (!JS_IsUndefined(value)) {
-            rc = ngx_qjs_string(ctx->engine, value, &body_arg);
+            rc = ngx_qjs_string(cx, value, &body_arg);
             JS_FreeValue(cx, value);
 
             if (rc != NGX_OK) {
@@ -6233,7 +6233,6 @@ ngx_http_qjs_variables_set_property(JSContext *cx, JSValueConst obj,
     u_char                     *lowcase_key;
     ngx_str_t                   name, s;
     ngx_uint_t                  key;
-    ngx_http_js_ctx_t          *ctx;
     ngx_http_request_t         *r;
     ngx_http_variable_t        *v;
     ngx_http_variable_value_t  *vv;
@@ -6279,9 +6278,7 @@ ngx_http_qjs_variables_set_property(JSContext *cx, JSValueConst obj,
         return -1;
     }
 
-    ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
-    if (ngx_qjs_string(ctx->engine, value, &s) != NGX_OK) {
+    if (ngx_qjs_string(cx, value, &s) != NGX_OK) {
         return -1;
     }
 
@@ -6692,15 +6689,14 @@ ngx_http_qjs_headers_out_handler(JSContext *cx, ngx_http_request_t *r,
     ngx_str_t *name, JSPropertyDescriptor *pdesc, JSValue *value,
     unsigned flags)
 {
-    u_char              *p;
-    int64_t              length;
-    uint32_t             i;
-    ngx_int_t            rc;
-    ngx_str_t            s;
-    JSValue              v;
-    ngx_list_part_t     *part;
-    ngx_table_elt_t     *header, *h, **ph;
-    ngx_http_js_ctx_t   *ctx;
+    u_char           *p;
+    int64_t           length;
+    uint32_t          i;
+    ngx_int_t         rc;
+    ngx_str_t         s;
+    JSValue           v;
+    ngx_list_part_t  *part;
+    ngx_table_elt_t  *header, *h, **ph;
 
     if (flags & NJS_HEADER_GET) {
         return ngx_http_qjs_header_generic(cx, r, &r->headers_out.headers, NULL,
@@ -6758,7 +6754,6 @@ ngx_http_qjs_headers_out_handler(JSContext *cx, ngx_http_request_t *r,
     }
 
     ph = &header;
-    ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
 
     for (i = 0; i < (uint32_t) length; i++) {
         if (JS_IsArray(cx, *value)) {
@@ -6768,7 +6763,7 @@ ngx_http_qjs_headers_out_handler(JSContext *cx, ngx_http_request_t *r,
             }
         }
 
-        rc = ngx_qjs_string(ctx->engine, v, &s);
+        rc = ngx_qjs_string(cx, v, &s);
 
         if (JS_IsArray(cx, *value)) {
             JS_FreeValue(cx, v);
@@ -6828,15 +6823,14 @@ ngx_http_qjs_headers_out_special_handler(JSContext *cx, ngx_http_request_t *r,
     ngx_str_t *name, JSPropertyDescriptor *pdesc, JSValue *value,
     unsigned flags, ngx_table_elt_t **hh)
 {
-    u_char              *p;
-    uint32_t             length;
-    JSValue              len, setval;
-    ngx_str_t            s;
-    ngx_uint_t           i, rc;
-    ngx_list_t          *headers;
-    ngx_list_part_t     *part;
-    ngx_table_elt_t     *header, *h;
-    ngx_http_js_ctx_t   *ctx;
+    u_char           *p;
+    uint32_t          length;
+    JSValue           len, setval;
+    ngx_str_t         s;
+    ngx_uint_t        i, rc;
+    ngx_list_t       *headers;
+    ngx_list_part_t  *part;
+    ngx_table_elt_t  *header, *h;
 
     if (flags & NJS_HEADER_GET) {
         return ngx_http_qjs_headers_out_handler(cx, r, name, pdesc, NULL,
@@ -6870,9 +6864,7 @@ ngx_http_qjs_headers_out_special_handler(JSContext *cx, ngx_http_request_t *r,
         setval = JS_UNDEFINED;
     }
 
-    ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
-    rc = ngx_qjs_string(ctx->engine, setval, &s);
+    rc = ngx_qjs_string(cx, setval, &s);
 
     if (value != NULL && JS_IsArray(cx, *value)) {
         JS_FreeValue(cx, setval);
@@ -7054,7 +7046,6 @@ ngx_http_qjs_headers_out_content_type(JSContext *cx, ngx_http_request_t *r,
     JSValue     len, setval;
     ngx_int_t   rc;
     ngx_str_t  *hdr, s;
-    ngx_http_js_ctx_t  *ctx;
 
     if (flags & NJS_HEADER_GET) {
         hdr = &r->headers_out.content_type;
@@ -7108,9 +7099,7 @@ ngx_http_qjs_headers_out_content_type(JSContext *cx, ngx_http_request_t *r,
         setval = *value;
     }
 
-    ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
-    rc = ngx_qjs_string(ctx->engine, setval, &s);
+    rc = ngx_qjs_string(cx, setval, &s);
 
     if (JS_IsArray(cx, *value)) {
         JS_FreeValue(cx, setval);
diff --git a/nginx/ngx_js.c b/nginx/ngx_js.c
index 383d2304..84cdcc2e 100644
--- a/nginx/ngx_js.c
+++ b/nginx/ngx_js.c
@@ -101,7 +101,7 @@ static void ngx_qjs_rejection_tracker(JSContext *ctx, JSValueConst promise,
     JSValueConst reason, JS_BOOL is_handled, void *opaque);
 
 static JSValue ngx_qjs_value(JSContext *cx, const ngx_str_t *path);
-static ngx_int_t ngx_qjs_dump_obj(ngx_engine_t *e, JSValueConst val,
+static ngx_int_t ngx_qjs_dump_obj(JSContext *cx, JSValueConst val,
     ngx_str_t *dst);
 
 static JSModuleDef *ngx_qjs_core_init(JSContext *cx, const char *name);
@@ -849,7 +849,7 @@ ngx_engine_qjs_compile(ngx_js_loc_conf_t *conf, ngx_log_t *log, u_char *start,
                    JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY);
 
     if (JS_IsException(code)) {
-        ngx_qjs_exception(engine, &text);
+        ngx_qjs_exception(cx, &text);
         ngx_log_error(NGX_LOG_EMERG, log, 0, "js compile %V", &text);
         return NGX_ERROR;
     }
@@ -972,7 +972,7 @@ ngx_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf, void *external)
         rv = JS_ReadObject(cx, pc[i].code, pc[i].code_size,
                            JS_READ_OBJ_BYTECODE);
         if (JS_IsException(rv)) {
-            ngx_qjs_exception(engine, &exception);
+            ngx_qjs_exception(cx, &exception);
 
             ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                           "js load module exception: %V", &exception);
@@ -988,7 +988,7 @@ ngx_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf, void *external)
     rv = JS_EvalFunction(cx, rv);
 
     if (JS_IsException(rv)) {
-        ngx_qjs_exception(engine, &exception);
+        ngx_qjs_exception(cx, &exception);
 
         ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "js eval exception: %V",
                       &exception);
@@ -997,7 +997,7 @@ ngx_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf, void *external)
 
     rv = js_std_await(cx, rv);
     if (JS_IsException(rv)) {
-        ngx_qjs_exception(engine, &exception);
+        ngx_qjs_exception(cx, &exception);
 
         ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "js eval exception: %V",
                       &exception);
@@ -1042,7 +1042,7 @@ ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname,
     val = JS_Call(cx, fn, JS_UNDEFINED, nargs, &ngx_qjs_arg(args[0]));
     JS_FreeValue(cx, fn);
     if (JS_IsException(val)) {
-        ngx_qjs_exception(ctx->engine, &exception);
+        ngx_qjs_exception(cx, &exception);
 
         ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                       "js call exception: %V", &exception);
@@ -1059,7 +1059,7 @@ ngx_engine_qjs_call(ngx_js_ctx_t *ctx, ngx_str_t *fname,
         rc = JS_ExecutePendingJob(rt, &cx1);
         if (rc <= 0) {
             if (rc == -1) {
-                ngx_qjs_exception(ctx->engine, &exception);
+                ngx_qjs_exception(cx, &exception);
 
                 ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                               "js job exception: %V", &exception);
@@ -1093,7 +1093,7 @@ static ngx_int_t
 ngx_engine_qjs_string(ngx_engine_t *e, njs_opaque_value_t *value,
     ngx_str_t *str)
 {
-    return ngx_qjs_dump_obj(e, ngx_qjs_arg(*value), str);
+    return ngx_qjs_dump_obj(e->u.qjs.ctx, ngx_qjs_arg(*value), str);
 }
 
 
@@ -1150,7 +1150,7 @@ ngx_engine_qjs_destroy(ngx_engine_t *e, ngx_js_ctx_t *ctx,
         }
 
         if (ngx_qjs_unhandled_rejection(ctx)) {
-            ngx_qjs_exception(ctx->engine, &exception);
+            ngx_qjs_exception(cx, &exception);
             ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                           "js unhandled rejection: %V", &exception);
         }
@@ -1255,13 +1255,17 @@ ngx_qjs_value(JSContext *cx, const ngx_str_t *path)
 
 
 static ngx_int_t
-ngx_qjs_dump_obj(ngx_engine_t *e, JSValueConst val, ngx_str_t *dst)
+ngx_qjs_dump_obj(JSContext *cx, JSValueConst val, ngx_str_t *dst)
 {
-    size_t       len, byte_offset, byte_length;
-    u_char      *start, *p;
-    JSValue      buffer, stack;
-    ngx_str_t    str, stack_str;
-    JSContext    *cx;
+    size_t         len, byte_offset, byte_length;
+    u_char        *start, *p;
+    JSValue        buffer, stack;
+    ngx_str_t      str, stack_str;
+    ngx_js_ctx_t  *ctx;
+    ngx_engine_t  *e;
+
+    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
+    e = ctx->engine;
 
     if (JS_IsNullOrUndefined(val)) {
         dst->data = NULL;
@@ -1350,19 +1354,20 @@ ngx_qjs_dump_obj(ngx_engine_t *e, JSValueConst val, ngx_str_t *dst)
 
 
 ngx_int_t
-ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue fn, JSValue *argv, int argc)
+ngx_qjs_call(JSContext *cx, JSValue fn, JSValue *argv, int argc)
 {
-    int         rc;
-    JSValue     ret;
-    ngx_str_t   exception;
-    JSRuntime  *rt;
-    JSContext  *cx, *cx1;
+    int            rc;
+    JSValue        ret;
+    ngx_str_t      exception;
+    JSRuntime     *rt;
+    JSContext     *cx1;
+    ngx_js_ctx_t  *ctx;
 
-    cx = ctx->engine->u.qjs.ctx;
+    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
 
     ret = JS_Call(cx, fn, JS_UNDEFINED, argc, argv);
     if (JS_IsException(ret)) {
-        ngx_qjs_exception(ctx->engine, &exception);
+        ngx_qjs_exception(cx, &exception);
 
         ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                       "js call exception: %V", &exception);
@@ -1378,7 +1383,7 @@ ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue fn, JSValue *argv, int argc)
         rc = JS_ExecutePendingJob(rt, &cx1);
         if (rc <= 0) {
             if (rc == -1) {
-                ngx_qjs_exception(ctx->engine, &exception);
+                ngx_qjs_exception(cx, &exception);
 
                 ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
                               "js job exception: %V", &exception);
@@ -1395,16 +1400,16 @@ ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue fn, JSValue *argv, int argc)
 
 
 ngx_int_t
-ngx_qjs_exception(ngx_engine_t *e, ngx_str_t *s)
+ngx_qjs_exception(JSContext *cx, ngx_str_t *s)
 {
     JSValue  exception;
 
-    exception = JS_GetException(e->u.qjs.ctx);
-    if (ngx_qjs_dump_obj(e, exception, s) != NGX_OK) {
+    exception = JS_GetException(cx);
+    if (ngx_qjs_dump_obj(cx, exception, s) != NGX_OK) {
         return NGX_ERROR;
     }
 
-    JS_FreeValue(e->u.qjs.ctx, exception);
+    JS_FreeValue(cx, exception);
 
     return NGX_OK;
 }
@@ -1431,13 +1436,17 @@ ngx_qjs_integer(JSContext *cx, JSValueConst val, ngx_int_t *n)
 
 
 ngx_int_t
-ngx_qjs_string(ngx_engine_t *e, JSValueConst val, ngx_str_t *dst)
+ngx_qjs_string(JSContext *cx, JSValueConst val, ngx_str_t *dst)
 {
-    size_t       len, byte_offset, byte_length;
-    u_char      *start;
-    JSValue      buffer;
-    JSContext   *cx;
-    const char  *str;
+    size_t         len, byte_offset, byte_length;
+    u_char        *start;
+    JSValue        buffer;
+    const char    *str;
+    ngx_js_ctx_t  *ctx;
+    ngx_engine_t  *e;
+
+    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
+    e = ctx->engine;
 
     if (JS_IsNullOrUndefined(val)) {
         dst->data = NULL;
@@ -1512,8 +1521,7 @@ ngx_qjs_timer_handler(ngx_event_t *ev)
     external = JS_GetContextOpaque(cx);
     ctx = ngx_qjs_external_ctx(cx, external);
 
-    rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, event->function, event->args,
-                      event->nargs);
+    rc = ngx_qjs_call(cx, event->function, event->args, event->nargs);
 
     ngx_js_del_event(ctx, event);
 
@@ -1740,7 +1748,6 @@ ngx_qjs_ext_log(JSContext *cx, JSValueConst this_val, int argc,
     char              *p;
     uint32_t           level;
     ngx_str_t          msg;
-    ngx_js_ctx_t      *ctx;
     ngx_connection_t  *c;
 
     p = JS_GetContextOpaque(cx);
@@ -1759,11 +1766,10 @@ ngx_qjs_ext_log(JSContext *cx, JSValueConst this_val, int argc,
         argv++;
     }
 
-    ctx = ngx_qjs_external_ctx(cx, p);
     c = ngx_qjs_external_connection(cx, p);
 
     for ( ; argc > 0; argc--, argv++) {
-        if (ngx_qjs_dump_obj(ctx->engine, argv[0], &msg) != NGX_OK) {
+        if (ngx_qjs_dump_obj(cx, argv[0], &msg) != NGX_OK) {
             return JS_EXCEPTION;
         }
 
diff --git a/nginx/ngx_js.h b/nginx/ngx_js.h
index 833c1490..6fac6994 100644
--- a/nginx/ngx_js.h
+++ b/nginx/ngx_js.h
@@ -340,11 +340,11 @@ ngx_engine_t *ngx_qjs_clone(ngx_js_ctx_t *ctx, ngx_js_loc_conf_t *cf,
     void *external);
 void ngx_engine_qjs_destroy(ngx_engine_t *e, ngx_js_ctx_t *ctx,
     ngx_js_loc_conf_t *conf);
-ngx_int_t ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue function,
-    JSValue *argv, int argc);
-ngx_int_t ngx_qjs_exception(ngx_engine_t *e, ngx_str_t *s);
+ngx_int_t ngx_qjs_call(JSContext *cx, JSValue function, JSValue *argv,
+    int argc);
+ngx_int_t ngx_qjs_exception(JSContext *cx, ngx_str_t *s);
 ngx_int_t ngx_qjs_integer(JSContext *cx, JSValueConst val, ngx_int_t *n);
-ngx_int_t ngx_qjs_string(ngx_engine_t *e, JSValueConst val, ngx_str_t *str);
+ngx_int_t ngx_qjs_string(JSContext *cx, JSValueConst val, ngx_str_t *str);
 
 #define ngx_qjs_prop(cx, type, start, len)                                   \
     ((type == NGX_JS_STRING) ? qjs_string_create(cx, start, len)             \
diff --git a/nginx/ngx_js_shared_dict.c b/nginx/ngx_js_shared_dict.c
index 6ae12d84..7f8c808e 100644
--- a/nginx/ngx_js_shared_dict.c
+++ b/nginx/ngx_js_shared_dict.c
@@ -2078,7 +2078,6 @@ ngx_qjs_ext_shared_dict_delete(JSContext *cx, JSValueConst this_val,
     int argc, JSValueConst *argv)
 {
     ngx_str_t        key;
-    ngx_js_ctx_t    *ctx;
     ngx_shm_zone_t  *shm_zone;
 
     shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
@@ -2086,9 +2085,7 @@ ngx_qjs_ext_shared_dict_delete(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2124,7 +2121,6 @@ ngx_qjs_ext_shared_dict_get(JSContext *cx, JSValueConst this_val,
     int argc, JSValueConst *argv)
 {
     ngx_str_t        key;
-    ngx_js_ctx_t    *ctx;
     ngx_shm_zone_t  *shm_zone;
 
     shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
@@ -2132,9 +2128,7 @@ ngx_qjs_ext_shared_dict_get(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2149,7 +2143,6 @@ ngx_qjs_ext_shared_dict_has(JSContext *cx, JSValueConst this_val,
     ngx_str_t            key;
     ngx_msec_t           now;
     ngx_time_t          *tp;
-    ngx_js_ctx_t        *ctx;
     ngx_js_dict_t       *dict;
     ngx_shm_zone_t      *shm_zone;
     ngx_js_dict_node_t  *node;
@@ -2159,9 +2152,7 @@ ngx_qjs_ext_shared_dict_has(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2193,7 +2184,6 @@ ngx_qjs_ext_shared_dict_incr(JSContext *cx, JSValueConst this_val,
     double           delta, init;
     uint32_t         timeout;
     ngx_str_t        key;
-    ngx_js_ctx_t    *ctx;
     ngx_js_dict_t   *dict;
     ngx_shm_zone_t  *shm_zone;
 
@@ -2208,9 +2198,7 @@ ngx_qjs_ext_shared_dict_incr(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "shared dict is not a number dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2464,7 +2452,6 @@ ngx_qjs_ext_shared_dict_pop(JSContext *cx, JSValueConst this_val,
     int argc, JSValueConst *argv)
 {
     ngx_str_t        key;
-    ngx_js_ctx_t    *ctx;
     ngx_shm_zone_t  *shm_zone;
 
     shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
@@ -2472,9 +2459,7 @@ ngx_qjs_ext_shared_dict_pop(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2489,7 +2474,6 @@ ngx_qjs_ext_shared_dict_set(JSContext *cx, JSValueConst this_val,
     JSValue          ret;
     uint32_t         timeout;
     ngx_str_t        key;
-    ngx_js_ctx_t    *ctx;
     ngx_js_dict_t   *dict;
     ngx_shm_zone_t  *shm_zone;
 
@@ -2498,9 +2482,7 @@ ngx_qjs_ext_shared_dict_set(JSContext *cx, JSValueConst this_val,
         return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
     }
 
-    ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
-    if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
diff --git a/nginx/ngx_stream_js_module.c b/nginx/ngx_stream_js_module.c
index 7e93b237..a7dddd04 100644
--- a/nginx/ngx_stream_js_module.c
+++ b/nginx/ngx_stream_js_module.c
@@ -2152,7 +2152,7 @@ ngx_stream_qjs_ext_on(JSContext *cx, JSValueConst this_val, int argc,
 
     ctx = ngx_stream_get_module_ctx(ses->session, ngx_stream_js_module);
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &name) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2195,7 +2195,7 @@ ngx_stream_qjs_ext_off(JSContext *cx, JSValueConst this_val, int argc,
 
     ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &name) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2278,7 +2278,7 @@ ngx_stream_qjs_ext_send(JSContext *cx, JSValueConst this_val, int argc,
         return JS_ThrowInternalError(cx, "cannot send buffer in this handler");
     }
 
-    if (ngx_qjs_string(ctx->engine, argv[0], &buffer) != NGX_OK) {
+    if (ngx_qjs_string(cx, argv[0], &buffer) != NGX_OK) {
         return JS_EXCEPTION;
     }
 
@@ -2510,7 +2510,6 @@ ngx_stream_qjs_variables_set_property(JSContext *cx, JSValueConst obj,
 {
     ngx_str_t                     name, name_lc, val;
     ngx_uint_t                    key;
-    ngx_js_ctx_t                 *ctx;
     ngx_stream_session_t         *s;
     ngx_stream_variable_t        *v;
     ngx_stream_variable_value_t  *vv;
@@ -2556,9 +2555,7 @@ ngx_stream_qjs_variables_set_property(JSContext *cx, JSValueConst obj,
         return -1;
     }
 
-    ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
-
-    if (ngx_qjs_string(ctx->engine, value, &val) != NGX_OK) {
+    if (ngx_qjs_string(cx, value, &val) != NGX_OK) {
         return -1;
     }
 
@@ -2669,14 +2666,13 @@ ngx_stream_qjs_run_event(ngx_stream_session_t *s, ngx_stream_js_ctx_t *ctx,
 
     JS_SetOpaque(argv[1], (void *) flags);
 
-    rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, ngx_qjs_arg(event->function),
-                      &argv[0], 2);
+    rc = ngx_qjs_call(cx, ngx_qjs_arg(event->function), &argv[0], 2);
     JS_FreeValue(cx, argv[0]);
     JS_FreeValue(cx, argv[1]);
 
     if (rc == NGX_ERROR) {
 error:
-        ngx_qjs_exception(ctx->engine, &exception);
+        ngx_qjs_exception(cx, &exception);
 
         ngx_log_error(NGX_LOG_ERR, c->log, 0, "js exception: %V",
                       &exception);


More information about the nginx-devel mailing list