Welcome! Log In Create A New Profile

Advanced

[njs] Improved njs_parser_property_token().

Dmitry Volyntsev
February 11, 2019 10:18AM
details: https://hg.nginx.org/njs/rev/08285ce7dd7c
branches:
changeset: 772:08285ce7dd7c
user: hongzhidao <hongzhidao@gmail.com>
date: Sat Feb 09 16:26:08 2019 +0800
description:
Improved njs_parser_property_token().

diffstat:

njs/njs_parser.c | 27 ++++++++++++++++++++++-----
njs/njs_parser.h | 4 +---
njs/njs_parser_expression.c | 26 ++------------------------
3 files changed, 25 insertions(+), 32 deletions(-)

diffs (138 lines):

diff -r 4e8940c1bef1 -r 08285ce7dd7c njs/njs_parser.c
--- a/njs/njs_parser.c Fri Feb 08 20:22:28 2019 +0300
+++ b/njs/njs_parser.c Sat Feb 09 16:26:08 2019 +0800
@@ -60,6 +60,7 @@ static njs_token_t njs_parser_object(njs
njs_parser_node_t *obj);
static njs_token_t njs_parser_array(njs_vm_t *vm, njs_parser_t *parser,
njs_parser_node_t *obj);
+static nxt_int_t njs_parser_string_create(njs_vm_t *vm, njs_value_t *value);
static njs_token_t njs_parser_escape_string_create(njs_vm_t *vm,
njs_parser_t *parser, njs_value_t *value);
static njs_token_t njs_parser_unexpected_token(njs_vm_t *vm,
@@ -1756,9 +1757,11 @@ njs_parser_grouping_expression(njs_vm_t


njs_token_t
-njs_parser_property_token(njs_parser_t *parser)
+njs_parser_property_token(njs_vm_t *vm, njs_parser_t *parser)
{
- njs_token_t token;
+ nxt_int_t ret;
+ njs_token_t token;
+ njs_parser_node_t *node;

parser->lexer->property = 1;

@@ -1766,6 +1769,20 @@ njs_parser_property_token(njs_parser_t *

parser->lexer->property = 0;

+ if (token == NJS_TOKEN_NAME) {
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_STRING);
+ if (nxt_slow_path(node == NULL)) {
+ return NJS_TOKEN_ERROR;
+ }
+
+ ret = njs_parser_string_create(vm, &node->u.value);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ return NJS_TOKEN_ERROR;
+ }
+
+ parser->node = node;
+ }
+
return token;
}

@@ -2183,7 +2200,7 @@ njs_parser_object(njs_vm_t *vm, njs_pars
object->u.object = obj;

for ( ;; ) {
- token = njs_parser_property_token(parser);
+ token = njs_parser_property_token(vm, parser);

switch (token) {

@@ -2191,7 +2208,7 @@ njs_parser_object(njs_vm_t *vm, njs_pars
return njs_parser_token(parser);

case NJS_TOKEN_NAME:
- token = njs_parser_property_name(vm, parser);
+ token = njs_parser_token(parser);
break;

case NJS_TOKEN_NUMBER:
@@ -2351,7 +2368,7 @@ njs_parser_array(njs_vm_t *vm, njs_parse
}


-nxt_int_t
+static nxt_int_t
njs_parser_string_create(njs_vm_t *vm, njs_value_t *value)
{
u_char *p;
diff -r 4e8940c1bef1 -r 08285ce7dd7c njs/njs_parser.h
--- a/njs/njs_parser.h Fri Feb 08 20:22:28 2019 +0300
+++ b/njs/njs_parser.h Sat Feb 09 16:26:08 2019 +0800
@@ -320,10 +320,8 @@ njs_token_t njs_parser_assignment_expres
njs_parser_t *parser, njs_token_t token);
njs_token_t njs_parser_terminal(njs_vm_t *vm, njs_parser_t *parser,
njs_token_t token);
-njs_token_t njs_parser_property_name(njs_vm_t *vm, njs_parser_t *parser);
-njs_token_t njs_parser_property_token(njs_parser_t *parser);
+njs_token_t njs_parser_property_token(njs_vm_t *vm, njs_parser_t *parser);
njs_token_t njs_parser_token(njs_parser_t *parser);
-nxt_int_t njs_parser_string_create(njs_vm_t *vm, njs_value_t *value);
njs_variable_t *njs_variable_resolve(njs_vm_t *vm, njs_parser_node_t *node);
njs_index_t njs_variable_typeof(njs_vm_t *vm, njs_parser_node_t *node);
njs_index_t njs_variable_index(njs_vm_t *vm, njs_parser_node_t *node);
diff -r 4e8940c1bef1 -r 08285ce7dd7c njs/njs_parser_expression.c
--- a/njs/njs_parser_expression.c Fri Feb 08 20:22:28 2019 +0300
+++ b/njs/njs_parser_expression.c Sat Feb 09 16:26:08 2019 +0800
@@ -984,7 +984,7 @@ njs_parser_property_expression(njs_vm_t

if (token == NJS_TOKEN_DOT) {

- token = njs_parser_property_token(parser);
+ token = njs_parser_property_token(vm, parser);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
@@ -993,7 +993,7 @@ njs_parser_property_expression(njs_vm_t
return NJS_TOKEN_ILLEGAL;
}

- token = njs_parser_property_name(vm, parser);
+ token = njs_parser_token(parser);

} else {
token = njs_parser_token(parser);
@@ -1014,28 +1014,6 @@ njs_parser_property_expression(njs_vm_t
}


-njs_token_t
-njs_parser_property_name(njs_vm_t *vm, njs_parser_t *parser)
-{
- nxt_int_t ret;
- njs_parser_node_t *node;
-
- node = njs_parser_node_new(vm, parser, NJS_TOKEN_STRING);
- if (nxt_slow_path(node == NULL)) {
- return NJS_TOKEN_ERROR;
- }
-
- ret = njs_parser_string_create(vm, &node->u.value);
- if (nxt_slow_path(ret != NXT_OK)) {
- return NJS_TOKEN_ERROR;
- }
-
- parser->node = node;
-
- return njs_parser_token(parser);
-}
-
-
static njs_token_t
njs_parser_property_brackets(njs_vm_t *vm, njs_parser_t *parser,
njs_token_t token)
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Improved njs_parser_property_token().

Dmitry Volyntsev 48 February 11, 2019 10:18AM



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

Online Users

Guests: 72
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready