[njs] Improved njs_parser_reference().
Dmitry Volyntsev
xeioex at nginx.com
Sun Mar 10 13:41:45 UTC 2019
details: https://hg.nginx.org/njs/rev/79e9f062beae
branches:
changeset: 820:79e9f062beae
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Sun Mar 10 16:14:37 2019 +0300
description:
Improved njs_parser_reference().
diffstat:
njs/njs_parser.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diffs (77 lines):
diff -r 8e2cb4da5e46 -r 79e9f062beae njs/njs_parser.c
--- a/njs/njs_parser.c Fri Mar 08 00:11:23 2019 +0800
+++ b/njs/njs_parser.c Sun Mar 10 16:14:37 2019 +0300
@@ -53,7 +53,8 @@ static njs_token_t njs_parser_throw_stat
static njs_token_t njs_parser_grouping_expression(njs_vm_t *vm,
njs_parser_t *parser);
static njs_parser_node_t *njs_parser_reference(njs_vm_t *vm,
- njs_parser_t *parser, njs_token_t token, nxt_str_t *name, uint32_t hash);
+ njs_parser_t *parser, njs_token_t token, nxt_str_t *name, uint32_t hash,
+ uint32_t token_line);
static nxt_int_t njs_parser_builtin(njs_vm_t *vm, njs_parser_t *parser,
njs_parser_node_t *node, njs_value_type_t type, nxt_str_t *name,
uint32_t hash);
@@ -2038,7 +2039,8 @@ njs_parser_terminal(njs_vm_t *vm, njs_pa
default:
node = njs_parser_reference(vm, parser, token,
njs_parser_text(parser),
- njs_parser_key_hash(parser));
+ njs_parser_key_hash(parser),
+ njs_parser_token_line(parser));
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
@@ -2055,7 +2057,7 @@ njs_parser_terminal(njs_vm_t *vm, njs_pa
static njs_parser_node_t *
njs_parser_reference(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token,
- nxt_str_t *name, uint32_t hash)
+ nxt_str_t *name, uint32_t hash, uint32_t token_line)
{
njs_ret_t ret;
njs_value_t *ext;
@@ -2217,7 +2219,7 @@ njs_parser_reference(njs_vm_t *vm, njs_p
case NJS_TOKEN_NAME:
nxt_thread_log_debug("JS: %V", name);
- node->token_line = njs_parser_token_line(parser);
+ node->token_line = token_line;
ext = njs_external_lookup(vm, name, hash);
@@ -2301,7 +2303,7 @@ njs_parser_builtin(njs_vm_t *vm, njs_par
static njs_token_t
njs_parser_object(njs_vm_t *vm, njs_parser_t *parser, njs_parser_node_t *obj)
{
- uint32_t hash;
+ uint32_t hash, token_line;
nxt_str_t name;
njs_token_t token;
njs_lexer_t *lexer;
@@ -2312,6 +2314,7 @@ njs_parser_object(njs_vm_t *vm, njs_pars
/* GCC and Clang complain about uninitialized hash. */
hash = 0;
+ token_line = 0;
object = njs_parser_node_new(vm, parser, NJS_TOKEN_OBJECT_VALUE);
if (nxt_slow_path(object == NULL)) {
@@ -2332,7 +2335,9 @@ njs_parser_object(njs_vm_t *vm, njs_pars
case NJS_TOKEN_NAME:
name = *njs_parser_text(parser);
+
hash = njs_parser_key_hash(parser);
+ token_line = njs_parser_token_line(parser);
token = njs_parser_token(parser);
break;
@@ -2365,7 +2370,7 @@ njs_parser_object(njs_vm_t *vm, njs_pars
&& lexer->property_token != NJS_TOKEN_GLOBAL_THIS)
{
expression = njs_parser_reference(vm, parser, lexer->property_token,
- &name, hash);
+ &name, hash, token_line);
if (nxt_slow_path(expression == NULL)) {
return NJS_TOKEN_ERROR;
}
More information about the nginx-devel
mailing list