]> git.kaiwu.me - njs.git/commitdiff
Added njs_vm_value().
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 16 Apr 2018 16:28:07 +0000 (19:28 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Mon, 16 Apr 2018 16:28:07 +0000 (19:28 +0300)
njs/njs.h
njs/njs_variable.c

index 3d7d4ec349a9fc2bc789a01065e2cfa1080c0cde..334fcc87187e6b24094f7be64d18d0ea33c7cb99 100644 (file)
--- a/njs/njs.h
+++ b/njs/njs.h
@@ -229,7 +229,8 @@ NXT_EXPORT njs_external_ptr_t njs_vm_external(njs_vm_t *vm,
 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 const njs_value_t *njs_vm_value(njs_vm_t *vm, const nxt_str_t *name);
+NXT_EXPORT njs_function_t *njs_vm_function(njs_vm_t *vm, const 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, const njs_value_t *value);
 
index b692b6f17b13d8c0c518e4dd9a3b5b4782baa052..f4596baad13432a4653e2c84b53ca0d1e7ffcc2c 100644 (file)
@@ -598,24 +598,35 @@ njs_name_copy(njs_vm_t *vm, nxt_str_t *dst, nxt_str_t *src)
 }
 
 
-njs_function_t *
-njs_vm_function(njs_vm_t *vm, nxt_str_t *name)
+const njs_value_t *
+njs_vm_value(njs_vm_t *vm, const nxt_str_t *name)
 {
-    njs_value_t         *value;
-    njs_variable_t      *var;
     nxt_lvlhsh_query_t  lhq;
 
     lhq.key_hash = nxt_djb_hash(name->start, name->length);
     lhq.key = *name;
     lhq.proto = &njs_variables_hash_proto;
 
-    if (nxt_slow_path(nxt_lvlhsh_find(&vm->variables_hash, &lhq) != NXT_OK)) {
-        return NULL;
+    if (nxt_lvlhsh_find(&vm->variables_hash, &lhq) == NXT_OK) {
+        return njs_vmcode_operand(vm, ((njs_variable_t *) lhq.value)->index);
+    }
+
+    lhq.proto = &njs_extern_value_hash_proto;
+
+    if (nxt_lvlhsh_find(&vm->externals_hash, &lhq) == NXT_OK) {
+        return &((njs_extern_value_t *) lhq.value)->value;
     }
 
-    var = lhq.value;
+    return &njs_value_undefined;
+}
+
+
+njs_function_t *
+njs_vm_function(njs_vm_t *vm, const nxt_str_t *name)
+{
+    const njs_value_t  *value;
 
-    value = njs_global_variable_value(vm, var);
+    value = njs_vm_value(vm, name);
 
     if (njs_is_function(value)) {
         return value->data.u.function;