From: hongzhidao Date: Wed, 3 Jul 2019 02:10:19 +0000 (-0400) Subject: Introduced njs_function_lambda_alloc(). X-Git-Tag: 0.3.4~98 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=2344743c585f33ee5cafb55e4d2739d48fe938f5;p=njs.git Introduced njs_function_lambda_alloc(). --- diff --git a/njs/njs_function.c b/njs/njs_function.c index 55685177..20e81814 100644 --- a/njs/njs_function.c +++ b/njs/njs_function.c @@ -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; diff --git a/njs/njs_function.h b/njs/njs_function.h index 7a9cb43a..5a212d1c 100644 --- a/njs/njs_function.h +++ b/njs/njs_function.h @@ -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, diff --git a/njs/njs_parser.c b/njs/njs_parser.c index 1a05dec1..c27771f4 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -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);