/* 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. */
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,
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;
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);
}
} 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;
}
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;
}
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);