]> git.kaiwu.me - njs.git/commitdiff
njs_vm_function() interface to get a function by name.
authorIgor Sysoev <igor@sysoev.ru>
Thu, 14 Jul 2016 16:24:51 +0000 (19:24 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 14 Jul 2016 16:24:51 +0000 (19:24 +0300)
njs/njs_variable.c
njs/njscript.h

index 6fc55138ac359d66bd540e1aa18393e73da933d3..6782cc11b12a59a5eec8434e96261d706be1d026 100644 (file)
@@ -119,6 +119,30 @@ njs_parser_variable(njs_vm_t *vm, njs_parser_t *parser, nxt_uint_t *level)
 }
 
 
+njs_function_t *
+njs_vm_function(njs_vm_t *vm, nxt_str_t *name)
+{
+    njs_value_t         *value;
+    njs_variable_t      *var;
+    nxt_lvlhsh_query_t  lhq;
+
+    lhq.key_hash = nxt_djb_hash(name->data, name->len);
+    lhq.key = *name;
+    lhq.proto = &njs_variables_hash_proto;
+
+    if (nxt_slow_path(nxt_lvlhsh_find(&vm->variables_hash, &lhq) != NXT_OK)) {
+        return NULL;
+    }
+
+    var = lhq.value;
+
+    value = (njs_value_t *) ((u_char *) vm->scopes[NJS_SCOPE_GLOBAL]
+                             + njs_offset(var->index));
+
+    return value->data.u.function;
+}
+
+
 static njs_variable_t *
 njs_variable_alloc(njs_vm_t *vm, njs_parser_t *parser, nxt_str_t *name)
 {
index 188e13c6bba7fbe22a3b3cca68d63d734e1624fd..bfc88838101b1c59e9d588e15973bdbfa50bf537 100644 (file)
@@ -91,6 +91,7 @@ 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);
 NXT_EXPORT nxt_int_t njs_vm_run(njs_vm_t *vm);
 
+NXT_EXPORT njs_function_t *njs_vm_function(njs_vm_t *vm, nxt_str_t *name);
 NXT_EXPORT njs_ret_t njs_vm_return_string(njs_vm_t *vm, u_char *start,
     size_t size);
 NXT_EXPORT nxt_int_t njs_vm_retval(njs_vm_t *vm, nxt_str_t *retval);