Welcome! Log In Create A New Profile

Advanced

[njs] Added njs_vm_value().

Dmitry Volyntsev
March 27, 2019 02:12PM
details: https://hg.nginx.org/njs/rev/ab2264c8f37f
branches:
changeset: 850:ab2264c8f37f
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Mon Apr 16 19:28:07 2018 +0300
description:
Added njs_vm_value().

diffstat:

njs/njs.h | 3 ++-
njs/njs_variable.c | 27 +++++++++++++++++++--------
2 files changed, 21 insertions(+), 9 deletions(-)

diffs (60 lines):

diff -r 5ef3dbe30d2d -r ab2264c8f37f njs/njs.h
--- a/njs/njs.h Tue Mar 26 08:04:02 2019 +0300
+++ b/njs/njs.h Mon Apr 16 19:28:07 2018 +0300
@@ -229,7 +229,8 @@ NXT_EXPORT njs_external_ptr_t njs_vm_ext
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);

diff -r 5ef3dbe30d2d -r ab2264c8f37f njs/njs_variable.c
--- a/njs/njs_variable.c Tue Mar 26 08:04:02 2019 +0300
+++ b/njs/njs_variable.c Mon Apr 16 19:28:07 2018 +0300
@@ -598,24 +598,35 @@ njs_name_copy(njs_vm_t *vm, nxt_str_t *d
}


-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;
+}
+

- value = njs_global_variable_value(vm, var);
+njs_function_t *
+njs_vm_function(njs_vm_t *vm, const nxt_str_t *name)
+{
+ const njs_value_t *value;
+
+ value = njs_vm_value(vm, name);

if (njs_is_function(value)) {
return value->data.u.function;
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Added njs_vm_value().

Dmitry Volyntsev 218 March 27, 2019 02:12PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 305
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready