]> git.kaiwu.me - njs.git/commitdiff
Improved njs_parser_property_token().
authorhongzhidao <hongzhidao@gmail.com>
Sat, 9 Feb 2019 08:26:08 +0000 (16:26 +0800)
committerhongzhidao <hongzhidao@gmail.com>
Sat, 9 Feb 2019 08:26:08 +0000 (16:26 +0800)
njs/njs_parser.c
njs/njs_parser.h
njs/njs_parser_expression.c

index 22069e0f4eb04b73620098db183edc2124ccb773..6c5d7fefb94ab9bc16aa3bcc3b20266ece2c32d0 100644 (file)
@@ -60,6 +60,7 @@ static njs_token_t njs_parser_object(njs_vm_t *vm, njs_parser_t *parser,
     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 *vm, njs_parser_t *parser)
 
 
 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)
 
     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_parser_t *parser, njs_parser_node_t *obj)
     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_parser_t *parser, njs_parser_node_t *obj)
             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_parser_t *parser, njs_parser_node_t *obj)
 }
 
 
-nxt_int_t
+static nxt_int_t
 njs_parser_string_create(njs_vm_t *vm, njs_value_t *value)
 {
     u_char     *p;
index 08ed34f62683da09e203a7f119da86d7f35fc15b..30d04a55781628e26086ac916247ec10bd0869de 100644 (file)
@@ -320,10 +320,8 @@ njs_token_t njs_parser_assignment_expression(njs_vm_t *vm,
     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);
index 1848cc2c1ab654fa3b91586144cb97660e537697..1368f060a30c074c9389cd9fb339d398d7982b17 100644 (file)
@@ -984,7 +984,7 @@ njs_parser_property_expression(njs_vm_t *vm, njs_parser_t *parser,
 
         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 *vm, njs_parser_t *parser,
                 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 *vm, njs_parser_t *parser,
 }
 
 
-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)