]> git.kaiwu.me - njs.git/commitdiff
Usage of njs_opaque_value_t is refactored in public API.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 4 May 2018 16:53:19 +0000 (19:53 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 4 May 2018 16:53:19 +0000 (19:53 +0300)
nginx/ngx_http_js_module.c
nginx/ngx_stream_js_module.c
njs/njs.c
njs/njs.h
njs/njs_event.h
njs/njs_extern.c
njs/njs_shell.c
njs/test/njs_unit_test.c

index 5a5cb68f1db8163bba87a5f16c91114a27be6f0d..68517e951cc85ed38b15963a5eb656f39e4944de 100644 (file)
@@ -134,7 +134,7 @@ static void ngx_http_js_clear_timer(njs_external_ptr_t external,
     njs_host_event_t event);
 static void ngx_http_js_timer_handler(ngx_event_t *ev);
 static void ngx_http_js_handle_event(ngx_http_request_t *r,
-    njs_vm_event_t vm_event, njs_opaque_value_t *args, nxt_uint_t nargs);
+    njs_vm_event_t vm_event, njs_value_t *args, nxt_uint_t nargs);
 
 static char *ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
@@ -666,7 +666,7 @@ ngx_http_js_content_event_handler(ngx_http_request_t *r)
         return;
     }
 
-    if (njs_vm_call(ctx->vm, func, ctx->args, 2) != NJS_OK) {
+    if (njs_vm_call(ctx->vm, func, njs_value_arg(ctx->args), 2) != NJS_OK) {
         njs_vm_retval_to_ext_string(ctx->vm, &exception);
 
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
@@ -776,7 +776,7 @@ ngx_http_js_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
 
     pending = njs_vm_pending(ctx->vm);
 
-    if (njs_vm_call(ctx->vm, func, ctx->args, 2) != NJS_OK) {
+    if (njs_vm_call(ctx->vm, func, njs_value_arg(ctx->args), 2) != NJS_OK) {
         njs_vm_retval_to_ext_string(ctx->vm, &exception);
 
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
@@ -859,12 +859,14 @@ ngx_http_js_init_vm(ngx_http_request_t *r)
         return NGX_ERROR;
     }
 
-    rc = njs_vm_external_create(ctx->vm, &ctx->args[0], jlcf->req_proto, r);
+    rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->args[0]),
+                                jlcf->req_proto, r);
     if (rc != NXT_OK) {
         return NGX_ERROR;
     }
 
-    rc = njs_vm_external_create(ctx->vm, &ctx->args[1], jlcf->res_proto, r);
+    rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->args[1]),
+                                jlcf->res_proto, r);
     if (rc != NXT_OK) {
         return NGX_ERROR;
     }
@@ -1670,7 +1672,7 @@ ngx_http_js_ext_get_response(njs_vm_t *vm, njs_value_t *value, void *obj,
 
     ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
 
-    njs_vm_retval_set(ctx->vm, &ctx->args[1]);
+    njs_vm_retval_set(ctx->vm, njs_value_arg(&ctx->args[1]));
 
     return NJS_OK;
 }
@@ -1988,7 +1990,8 @@ ngx_http_js_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
         return NGX_ERROR;
     }
 
-    ret = njs_vm_external_create(ctx->vm, &reply, jlcf->rep_proto, r);
+    ret = njs_vm_external_create(ctx->vm, njs_value_arg(&reply),
+                                 jlcf->rep_proto, r);
     if (ret != NXT_OK) {
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                       "js subrequest reply creation failed");
@@ -1996,7 +1999,7 @@ ngx_http_js_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
         return NGX_ERROR;
     }
 
-    ngx_http_js_handle_event(r->parent, vm_event, &reply, 1);
+    ngx_http_js_handle_event(r->parent, vm_event, njs_value_arg(&reply), 1);
 
     return NGX_OK;
 }
@@ -2019,7 +2022,7 @@ ngx_http_js_ext_get_parent(njs_vm_t *vm, njs_value_t *value, void *obj,
         return NJS_ERROR;
     }
 
-    njs_vm_retval_set(ctx->vm, &ctx->args[0]);
+    njs_vm_retval_set(ctx->vm, njs_value_arg(&ctx->args[0]));
 
     return NJS_OK;
 }
@@ -2119,7 +2122,7 @@ ngx_http_js_timer_handler(ngx_event_t *ev)
 
 static void
 ngx_http_js_handle_event(ngx_http_request_t *r, njs_vm_event_t vm_event,
-    njs_opaque_value_t *args, nxt_uint_t nargs)
+    njs_value_t *args, nxt_uint_t nargs)
 {
     njs_ret_t           rc;
     nxt_str_t           exception;
index 80051fb4580c6d37c66ccc6634e6666fb9a27e9b..fb216ed75f6287ee201199492102eb11932755fb 100644 (file)
@@ -400,7 +400,7 @@ ngx_stream_js_phase_handler(ngx_stream_session_t *s, ngx_str_t *name)
         return NGX_ERROR;
     }
 
-    if (njs_vm_call(ctx->vm, func, &ctx->arg, 1) != NJS_OK) {
+    if (njs_vm_call(ctx->vm, func, njs_value_arg(&ctx->arg), 1) != NJS_OK) {
         njs_vm_retval_to_ext_string(ctx->vm, &exception);
 
         ngx_log_error(NGX_LOG_ERR, c->log, 0, "js exception: %*s",
@@ -487,7 +487,7 @@ ngx_stream_js_body_filter(ngx_stream_session_t *s, ngx_chain_t *in,
     while (in) {
         ctx->buf = in->buf;
 
-        if (njs_vm_call(ctx->vm, func, &ctx->arg, 1) != NJS_OK) {
+        if (njs_vm_call(ctx->vm, func, njs_value_arg(&ctx->arg), 1) != NJS_OK) {
             njs_vm_retval_to_ext_string(ctx->vm, &exception);
 
             ngx_log_error(NGX_LOG_ERR, c->log, 0, "js exception: %*s",
@@ -588,7 +588,7 @@ ngx_stream_js_variable(ngx_stream_session_t *s, ngx_stream_variable_value_t *v,
 
     pending = njs_vm_pending(ctx->vm);
 
-    if (njs_vm_call(ctx->vm, func, &ctx->arg, 1) != NJS_OK) {
+    if (njs_vm_call(ctx->vm, func, njs_value_arg(&ctx->arg), 1) != NJS_OK) {
         njs_vm_retval_to_ext_string(ctx->vm, &exception);
 
         ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
@@ -671,7 +671,8 @@ ngx_stream_js_init_vm(ngx_stream_session_t *s)
         return NGX_ERROR;
     }
 
-    rc = njs_vm_external_create(ctx->vm, &ctx->arg, jscf->proto, s);
+    rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->arg), jscf->proto,
+                                s);
     if (rc != NXT_OK) {
         return NGX_ERROR;
     }
index fc5de1b97497cc59a6ec8ebb36d50c44a90499e0..dc5907eb317cc8345f39ed7b8c78a9a200212ead 100644 (file)
--- a/njs/njs.c
+++ b/njs/njs.c
@@ -444,7 +444,7 @@ njs_vm_init(njs_vm_t *vm)
 
 
 nxt_int_t
-njs_vm_call(njs_vm_t *vm, njs_function_t *function, njs_opaque_value_t *args,
+njs_vm_call(njs_vm_t *vm, njs_function_t *function, njs_value_t *args,
     nxt_uint_t nargs)
 {
     u_char       *current;
@@ -460,8 +460,7 @@ njs_vm_call(njs_vm_t *vm, njs_function_t *function, njs_opaque_value_t *args,
 
     this = (njs_value_t *) &njs_value_void;
 
-    ret = njs_function_frame(vm, function, this,
-                             (njs_value_t *) args, nargs, 0);
+    ret = njs_function_frame(vm, function, this, args, nargs, 0);
     if (nxt_slow_path(ret != NXT_OK)) {
         return ret;
     }
@@ -532,7 +531,7 @@ njs_vm_pending(njs_vm_t *vm)
 
 nxt_int_t
 njs_vm_post_event(njs_vm_t *vm, njs_vm_event_t vm_event,
-    njs_opaque_value_t *args, nxt_uint_t nargs)
+    njs_value_t *args, nxt_uint_t nargs)
 {
     njs_event_t  *event;
 
@@ -541,12 +540,12 @@ njs_vm_post_event(njs_vm_t *vm, njs_vm_event_t vm_event,
     if (nargs != 0 && !event->posted) {
         event->nargs = nargs;
         event->args = nxt_mem_cache_alloc(vm->mem_cache_pool,
-                                          sizeof(njs_opaque_value_t) * nargs);
+                                          sizeof(njs_value_t) * nargs);
         if (nxt_slow_path(event->args == NULL)) {
             return NJS_ERROR;
         }
 
-        memcpy(event->args, args, sizeof(njs_opaque_value_t) * nargs);
+        memcpy(event->args, args, sizeof(njs_value_t) * nargs);
     }
 
     if (!event->posted) {
@@ -655,7 +654,7 @@ njs_vm_retval(njs_vm_t *vm)
 
 
 nxt_noinline void
-njs_vm_retval_set(njs_vm_t *vm, njs_opaque_value_t *value)
+njs_vm_retval_set(njs_vm_t *vm, njs_value_t *value)
 {
     vm->retval = *(njs_value_t *) value;
 }
index 1ab5735d02f855a84ce846b431b7f4b09da01275..129c96681bafe0064fe21c4f2e611be010eae5fe 100644 (file)
--- a/njs/njs.h
+++ b/njs/njs.h
@@ -30,6 +30,11 @@ typedef struct njs_extern_s         njs_extern_t;
 typedef struct njs_function_s       njs_function_t;
 typedef struct njs_vm_shared_s      njs_vm_shared_t;
 
+/*
+ * njs_opaque_value_t is the external storage type for native njs_value_t type.
+ * sizeof(njs_opaque_value_t) == sizeof(njs_value_t).
+ */
+
 typedef struct {
     uint64_t                        filler[2];
 } njs_opaque_value_t;
@@ -42,6 +47,9 @@ typedef struct {
 #define njs_value_assign(dst, src)                                            \
     *((njs_opaque_value_t *) dst) = *((njs_opaque_value_t *) src);
 
+#define njs_value_arg(val) ((njs_value_t *) val)
+
+
 #define njs_vm_error(vm, fmt, ...)                                            \
     njs_value_error_set(vm, njs_vm_retval(vm), fmt, ##__VA_ARGS__)
 
@@ -147,7 +155,7 @@ NXT_EXPORT void njs_vm_destroy(njs_vm_t *vm);
 NXT_EXPORT nxt_int_t njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end);
 NXT_EXPORT njs_vm_t *njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external);
 NXT_EXPORT nxt_int_t njs_vm_call(njs_vm_t *vm, njs_function_t *function,
-    njs_opaque_value_t *args, nxt_uint_t nargs);
+    njs_value_t *args, nxt_uint_t nargs);
 
 NXT_EXPORT njs_vm_event_t njs_vm_add_event(njs_vm_t *vm,
     njs_function_t *function, njs_host_event_t host_ev,
@@ -155,23 +163,23 @@ NXT_EXPORT njs_vm_event_t njs_vm_add_event(njs_vm_t *vm,
 NXT_EXPORT void njs_vm_del_event(njs_vm_t *vm, njs_vm_event_t vm_event);
 NXT_EXPORT nxt_int_t njs_vm_pending(njs_vm_t *vm);
 NXT_EXPORT nxt_int_t njs_vm_post_event(njs_vm_t *vm, njs_vm_event_t vm_event,
-    njs_opaque_value_t *args, nxt_uint_t nargs);
+    njs_value_t *args, nxt_uint_t nargs);
 
 NXT_EXPORT nxt_int_t njs_vm_run(njs_vm_t *vm);
 
 NXT_EXPORT const njs_extern_t *njs_vm_external_prototype(njs_vm_t *vm,
     njs_external_t *external);
 NXT_EXPORT nxt_int_t njs_vm_external_create(njs_vm_t *vm,
-        njs_opaque_value_t *value, const njs_extern_t *proto, void *object);
+    njs_value_t *value, const njs_extern_t *proto, void *object);
 NXT_EXPORT nxt_int_t njs_vm_external_bind(njs_vm_t *vm,
-    const nxt_str_t *var_name, njs_opaque_value_t *value);
+    const nxt_str_t *var_name, njs_value_t *value);
 
 NXT_EXPORT void njs_disassembler(njs_vm_t *vm);
 NXT_EXPORT nxt_array_t *njs_vm_completions(njs_vm_t *vm, nxt_str_t *expression);
 
 NXT_EXPORT njs_function_t *njs_vm_function(njs_vm_t *vm, nxt_str_t *name);
 NXT_EXPORT njs_value_t *njs_vm_retval(njs_vm_t *vm);
-NXT_EXPORT void njs_vm_retval_set(njs_vm_t *vm, njs_opaque_value_t *value);
+NXT_EXPORT void njs_vm_retval_set(njs_vm_t *vm, njs_value_t *value);
 
 NXT_EXPORT u_char * njs_string_alloc(njs_vm_t *vm, njs_value_t *value,
     uint32_t size, uint32_t length);
@@ -184,7 +192,7 @@ NXT_EXPORT nxt_int_t njs_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
 NXT_EXPORT njs_ret_t njs_vm_value_to_ext_string(njs_vm_t *vm, nxt_str_t *dst,
     const njs_value_t *src, nxt_uint_t handle_exception);
 NXT_EXPORT njs_ret_t njs_vm_retval_to_ext_string(njs_vm_t *vm,
-        nxt_str_t *retval);
+    nxt_str_t *retval);
 
 NXT_EXPORT void njs_vm_memory_error(njs_vm_t *vm);
 
index ebfd835710c007478879b602641442ff45628e1d..8db5175d05207b0771776de805ae3392a68e136e 100644 (file)
@@ -17,7 +17,7 @@
 
 typedef struct {
     njs_function_t        *function;
-    njs_opaque_value_t    *args;
+    njs_value_t           *args;
     nxt_uint_t            nargs;
     njs_host_event_t      host_event;
     njs_event_destructor  destructor;
index 8144bcf6457f3b60a15b1dfd87a4c4206f3ee2f6..2a915ba91133109252ce30108d28c9c35e71c3d6 100644 (file)
@@ -150,11 +150,10 @@ njs_vm_external_prototype(njs_vm_t *vm, njs_external_t *external)
 
 
 nxt_int_t
-njs_vm_external_create(njs_vm_t *vm, njs_opaque_value_t *value,
+njs_vm_external_create(njs_vm_t *vm, njs_value_t *ext_val,
     const njs_extern_t *proto,  void *object)
 {
-    void         *obj;
-    njs_value_t  *ext_val;
+    void  *obj;
 
     if (nxt_slow_path(proto == NULL)) {
         return NXT_ERROR;
@@ -168,8 +167,6 @@ njs_vm_external_create(njs_vm_t *vm, njs_opaque_value_t *value,
 
     memcpy(obj, &object, sizeof(void *));
 
-    ext_val = (njs_value_t *) value;
-
     ext_val->type = NJS_EXTERNAL;
     ext_val->data.truth = 1;
     ext_val->external.proto = proto;
@@ -181,15 +178,12 @@ njs_vm_external_create(njs_vm_t *vm, njs_opaque_value_t *value,
 
 nxt_int_t
 njs_vm_external_bind(njs_vm_t *vm, const nxt_str_t *var_name,
-    njs_opaque_value_t *val)
+    njs_value_t *value)
 {
     nxt_int_t           ret;
-    njs_value_t         *value;
     njs_extern_value_t  *ev;
     nxt_lvlhsh_query_t  lhq;
 
-    value = (njs_value_t *) val;
-
     if (nxt_slow_path(!njs_is_external(value))) {
         return NXT_ERROR;
     }
index c83b1098d7630e870de8c85880d5c16ccafa5584..2b64c6b1fe83c1ba61f834409a9b4996e7196d68 100644 (file)
@@ -193,8 +193,8 @@ static nxt_int_t
 njs_externals_init(njs_vm_t *vm)
 {
     nxt_uint_t          ret;
+    njs_value_t         *value;
     const njs_extern_t  *proto;
-    njs_opaque_value_t  *value;
 
     static const nxt_str_t name = nxt_string_value("console");
 
index 1bf0411e69c296a23bc5907e770fdc891e6e98e2..2f241bd5702e4c6d73f1bc6603411c2be34287a7 100644 (file)
@@ -9533,7 +9533,7 @@ njs_unit_test_create_external(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 {
     nxt_int_t            ret;
     nxt_str_t            uri;
-    njs_opaque_value_t   *value;
+    njs_value_t          *value;
     njs_unit_test_req_t  *r, *sr;
 
     if (nargs > 1) {
@@ -9737,15 +9737,15 @@ njs_externals_init(njs_vm_t *vm)
         requests[i].mem_cache_pool = vm->mem_cache_pool;
         requests[i].proto = proto;
 
-        ret = njs_vm_external_create(vm, &requests[i].value, proto,
-                                     &requests[i]);
+        ret = njs_vm_external_create(vm, njs_value_arg(&requests[i].value),
+                                     proto, &requests[i]);
         if (ret != NXT_OK) {
             printf("njs_vm_external_create() failed\n");
             return NXT_ERROR;
         }
 
         ret = njs_vm_external_bind(vm, &nxt_test_requests[i].name,
-                                   &requests[i].value);
+                                   njs_value_arg(&requests[i].value));
         if (ret != NXT_OK) {
             printf("njs_vm_external_bind() failed\n");
             return NXT_ERROR;