Welcome! Log In Create A New Profile

Advanced

[njs] Introduced njs_variables_copy().

Dmitry Volyntsev
August 21, 2019 09:34AM
details: https://hg.nginx.org/njs/rev/91e3f7345e47
branches:
changeset: 1139:91e3f7345e47
user: hongzhidao <hongzhidao@gmail.com>
date: Tue Aug 20 23:03:26 2019 -0400
description:
Introduced njs_variables_copy().

diffstat:

src/njs_parser.c | 38 +++++++-------------------------------
src/njs_variable.c | 36 ++++++++++++++++++++++++++++++++++++
src/njs_variable.h | 2 ++
3 files changed, 45 insertions(+), 31 deletions(-)

diffs (113 lines):

diff -r 4cc08cb772a2 -r 91e3f7345e47 src/njs_parser.c
--- a/src/njs_parser.c Tue Aug 20 22:59:38 2019 -0400
+++ b/src/njs_parser.c Tue Aug 20 23:03:26 2019 -0400
@@ -76,13 +76,9 @@ static njs_token_t njs_parser_grouping_e
njs_int_t
njs_parser(njs_vm_t *vm, njs_parser_t *parser, njs_parser_t *prev)
{
- njs_int_t ret;
- njs_token_t token;
- njs_lvlhsh_t *variables, *prev_variables;
- njs_variable_t *var;
- njs_parser_node_t *node;
- njs_lvlhsh_each_t lhe;
- njs_lvlhsh_query_t lhq;
+ njs_int_t ret;
+ njs_token_t token;
+ njs_parser_node_t *node;

ret = njs_parser_scope_begin(vm, parser, NJS_SCOPE_GLOBAL);
if (njs_slow_path(ret != NJS_OK)) {
@@ -94,30 +90,10 @@ njs_parser(njs_vm_t *vm, njs_parser_t *p
* Copy the global scope variables from the previous
* iteration of the accumulative mode.
*/
- njs_lvlhsh_each_init(&lhe, &njs_variables_hash_proto);
-
- lhq.proto = &njs_variables_hash_proto;
- lhq.replace = 0;
- lhq.pool = vm->mem_pool;
-
- variables = &parser->scope->variables;
- prev_variables = &prev->scope->variables;
-
- for ( ;; ) {
- var = njs_lvlhsh_each(prev_variables, &lhe);
-
- if (var == NULL) {
- break;
- }
-
- lhq.value = var;
- lhq.key = var->name;
- lhq.key_hash = njs_djb_hash(var->name.start, var->name.length);
-
- ret = njs_lvlhsh_insert(variables, &lhq);
- if (njs_slow_path(ret != NJS_OK)) {
- return NJS_ERROR;
- }
+ ret = njs_variables_copy(vm, &parser->scope->variables,
+ &prev->scope->variables);
+ if (njs_slow_path(ret != NJS_OK)) {
+ return ret;
}
}

diff -r 4cc08cb772a2 -r 91e3f7345e47 src/njs_variable.c
--- a/src/njs_variable.c Tue Aug 20 22:59:38 2019 -0400
+++ b/src/njs_variable.c Tue Aug 20 23:03:26 2019 -0400
@@ -80,6 +80,42 @@ njs_variable_add(njs_vm_t *vm, njs_parse
}


+njs_int_t
+njs_variables_copy(njs_vm_t *vm, njs_lvlhsh_t *variables,
+ njs_lvlhsh_t *prev_variables)
+{
+ njs_int_t ret;
+ njs_variable_t *var;
+ njs_lvlhsh_each_t lhe;
+ njs_lvlhsh_query_t lhq;
+
+ njs_lvlhsh_each_init(&lhe, &njs_variables_hash_proto);
+
+ lhq.proto = &njs_variables_hash_proto;
+ lhq.replace = 0;
+ lhq.pool = vm->mem_pool;
+
+ for ( ;; ) {
+ var = njs_lvlhsh_each(prev_variables, &lhe);
+
+ if (var == NULL) {
+ break;
+ }
+
+ lhq.value = var;
+ lhq.key = var->name;
+ lhq.key_hash = njs_djb_hash(var->name.start, var->name.length);
+
+ ret = njs_lvlhsh_insert(variables, &lhq);
+ if (njs_slow_path(ret != NJS_OK)) {
+ return NJS_ERROR;
+ }
+ }
+
+ return NJS_OK;
+}
+
+
static njs_variable_t *
njs_variable_scope_add(njs_vm_t *vm, njs_parser_scope_t *scope,
njs_lvlhsh_query_t *lhq, njs_variable_type_t type)
diff -r 4cc08cb772a2 -r 91e3f7345e47 src/njs_variable.h
--- a/src/njs_variable.h Tue Aug 20 22:59:38 2019 -0400
+++ b/src/njs_variable.h Tue Aug 20 23:03:26 2019 -0400
@@ -51,6 +51,8 @@ typedef struct {

njs_variable_t *njs_variable_add(njs_vm_t *vm, njs_parser_scope_t *scope,
njs_str_t *name, uint32_t hash, njs_variable_type_t type);
+njs_int_t njs_variables_copy(njs_vm_t *vm, njs_lvlhsh_t *variables,
+ njs_lvlhsh_t *prev_variables);
njs_variable_t * njs_label_add(njs_vm_t *vm, njs_parser_scope_t *scope,
njs_str_t *name, uint32_t hash);
njs_variable_t *njs_label_find(njs_vm_t *vm, njs_parser_scope_t *scope,
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Introduced njs_variables_copy().

Dmitry Volyntsev 247 August 21, 2019 09:34AM



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

Online Users

Guests: 315
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