diff options
author | hongzhidao <hongzhidao@gmail.com> | 2025-03-17 14:40:49 +0800 |
---|---|---|
committer | hongzhidao <hongzhidao@gmail.com> | 2025-03-18 09:59:30 +0800 |
commit | 9010aeea7807a6398e5d5ea89794f94ca0e4cb1e (patch) | |
tree | e03c699b12f94cde8085c82d7b0a5c106160e103 /nginx/ngx_js.c | |
parent | 18d31701cef4af1925f6702e591ca77761541b7e (diff) | |
download | njs-9010aeea7807a6398e5d5ea89794f94ca0e4cb1e.tar.gz njs-9010aeea7807a6398e5d5ea89794f94ca0e4cb1e.zip |
QuickJS: making ngx_qjs_*() functions consistent with ngx_js_*().
Diffstat (limited to 'nginx/ngx_js.c')
-rw-r--r-- | nginx/ngx_js.c | 84 |
1 files changed, 45 insertions, 39 deletions
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; } |