]> git.kaiwu.me - njs.git/commitdiff
Introduced njs_function_lambda_alloc().
authorhongzhidao <hongzhidao@gmail.com>
Wed, 3 Jul 2019 02:10:19 +0000 (22:10 -0400)
committerhongzhidao <hongzhidao@gmail.com>
Wed, 3 Jul 2019 02:10:19 +0000 (22:10 -0400)
njs/njs_function.c
njs/njs_function.h
njs/njs_parser.c

index 5568517724be92f17a1345f8ad1468363c223b33..20e81814c43834d153692d023e2ad1db2f2036e4 100644 (file)
@@ -37,7 +37,7 @@ njs_function_alloc(njs_vm_t *vm, njs_function_lambda_t *lambda,
      *   function->object.__proto__ = NULL;
      */
 
-    function->ctor = !lambda->arrow;
+    function->ctor = lambda->ctor;
     function->args_offset = 1;
     function->u.lambda = lambda;
 
index 7a9cb43a4cfaea35aefd3a5f990b3216b82cad3b..5a212d1c70188ed281d019babb949dd8bcc4ad1d 100644 (file)
@@ -30,7 +30,7 @@ struct njs_function_lambda_s {
     /* Function internal block closures levels. */
     uint8_t                        block_closures;    /* 4 bits */
 
-    uint8_t                        arrow;             /* 1 bit */
+    uint8_t                        ctor;              /* 1 bit */
     uint8_t                        rest_parameters;   /* 1 bit */
 
     /* Initial values of local scope. */
@@ -176,6 +176,21 @@ njs_ret_t njs_function_native_call(njs_vm_t *vm, njs_function_native_t native,
 void njs_function_frame_free(njs_vm_t *vm, njs_native_frame_t *frame);
 
 
+nxt_inline njs_function_lambda_t *
+njs_function_lambda_alloc(njs_vm_t *vm, uint8_t ctor)
+{
+    njs_function_lambda_t  *lambda;
+
+    lambda = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_function_lambda_t));
+
+    if (nxt_fast_path(lambda != NULL)) {
+        lambda->ctor = ctor;
+    }
+
+    return lambda;
+}
+
+
 nxt_inline njs_ret_t
 njs_function_frame(njs_vm_t *vm, njs_function_t *function,
     const njs_value_t *this, const njs_value_t *args, nxt_uint_t nargs,
index 1a05dec10fa560edf14824343c57d9eec85ef51e..c27771f4eed32f942ee70a82f506b355fbc82a9d 100644 (file)
@@ -602,7 +602,7 @@ njs_parser_function_alloc(njs_vm_t *vm, njs_parser_t *parser,
     njs_function_t         *function;
     njs_function_lambda_t  *lambda;
 
-    lambda = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_function_lambda_t));
+    lambda = njs_function_lambda_alloc(vm, 1);
     if (nxt_slow_path(lambda == NULL)) {
         njs_memory_error(vm);
         return NULL;
@@ -687,9 +687,7 @@ njs_parser_function_declaration(njs_vm_t *vm, njs_parser_t *parser)
         return NJS_TOKEN_ERROR;
     }
 
-    token = njs_parser_function_lambda(vm, parser, function->u.lambda, token);
-
-    return token;
+    return njs_parser_function_lambda(vm, parser, function->u.lambda, token);
 }
 
 
@@ -745,7 +743,7 @@ njs_parser_function_expression(njs_vm_t *vm, njs_parser_t *parser)
 
     } else {
         /* Anonymous function. */
-        lambda = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_function_lambda_t));
+        lambda = njs_function_lambda_alloc(vm, 1);
         if (nxt_slow_path(lambda == NULL)) {
             return NJS_TOKEN_ERROR;
         }
@@ -1896,7 +1894,7 @@ njs_parser_module_lambda(njs_vm_t *vm, njs_parser_t *parser)
         return token;
     }
 
-    lambda = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_function_lambda_t));
+    lambda = njs_function_lambda_alloc(vm, 1);
     if (nxt_slow_path(lambda == NULL)) {
         return NJS_TOKEN_ERROR;
     }
@@ -2156,13 +2154,11 @@ njs_parser_arrow_expression(njs_vm_t *vm, njs_parser_t *parser,
     node->token_line = njs_parser_token_line(parser);
     parser->node = node;
 
-    lambda = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_function_lambda_t));
+    lambda = njs_function_lambda_alloc(vm, 0);
     if (nxt_slow_path(lambda == NULL)) {
         return NJS_TOKEN_ERROR;
     }
 
-    lambda->arrow = 1;
-
     node->u.value.data.u.lambda = lambda;
 
     ret = njs_parser_scope_begin(vm, parser, NJS_SCOPE_FUNCTION);