From: hongzhidao Date: Sat, 16 Feb 2019 15:18:43 +0000 (+0800) Subject: Allocating njs_generator_t on stack. X-Git-Tag: 0.2.8~17 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=60f6a84a475144f1f7a1d78ff04080084d89bd53;p=njs.git Allocating njs_generator_t on stack. --- diff --git a/njs/njs.c b/njs/njs.c index b0854894..b8ceea0c 100644 --- a/njs/njs.c +++ b/njs/njs.c @@ -216,17 +216,17 @@ njs_vm_destroy(njs_vm_t *vm) nxt_int_t njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end) { - nxt_int_t ret; + nxt_int_t ret; njs_lexer_t *lexer; njs_parser_t *parser, *prev; - njs_generator_t *generator; + njs_generator_t generator; - parser = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_parser_t)); - if (nxt_slow_path(parser == NULL)) { + if (vm->parser != NULL && !vm->options.accumulative) { return NJS_ERROR; } - if (vm->parser != NULL && !vm->options.accumulative) { + parser = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_parser_t)); + if (nxt_slow_path(parser == NULL)) { return NJS_ERROR; } @@ -269,24 +269,16 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end) */ vm->code = NULL; - generator = nxt_mp_align(vm->mem_pool, sizeof(njs_value_t), - sizeof(njs_generator_t)); - - if (nxt_slow_path(generator == NULL)) { - goto fail; - } - - nxt_memzero(generator, sizeof(njs_generator_t)); + nxt_memzero(&generator, sizeof(njs_generator_t)); - ret = njs_generate_scope(vm, generator, parser->scope); + ret = njs_generate_scope(vm, &generator, parser->scope); if (nxt_slow_path(ret != NXT_OK)) { goto fail; } - vm->current = generator->code_start; - - vm->global_scope = generator->local_scope; - vm->scope_size = generator->scope_size; + vm->current = generator.code_start; + vm->global_scope = generator.local_scope; + vm->scope_size = generator.scope_size; vm->variables_hash = parser->scope->variables; diff --git a/njs/njs_generator.c b/njs/njs_generator.c index 14ed8c46..a5496e9c 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -2282,19 +2282,13 @@ njs_generate_function_scope(njs_vm_t *vm, njs_function_lambda_t *lambda, size_t size; nxt_int_t ret; nxt_array_t *closure; - njs_generator_t *generator; - - generator = nxt_mp_align(vm->mem_pool, sizeof(njs_value_t), - sizeof(njs_generator_t)); - if (nxt_slow_path(generator == NULL)) { - return NXT_ERROR; - } - - nxt_memzero(generator, sizeof(njs_generator_t)); + njs_generator_t generator; node = node->right; - ret = njs_generate_scope(vm, generator, node->scope); + nxt_memzero(&generator, sizeof(njs_generator_t)); + + ret = njs_generate_scope(vm, &generator, node->scope); if (nxt_fast_path(ret == NXT_OK)) { size = 0; @@ -2309,16 +2303,13 @@ njs_generate_function_scope(njs_vm_t *vm, njs_function_lambda_t *lambda, lambda->closure_size = size; lambda->nesting = node->scope->nesting; - lambda->arguments_object = generator->arguments_object; - - lambda->local_size = generator->scope_size; - lambda->local_scope = generator->local_scope; + lambda->arguments_object = generator.arguments_object; - lambda->start = generator->code_start; + lambda->start = generator.code_start; + lambda->local_size = generator.scope_size; + lambda->local_scope = generator.local_scope; } - nxt_mp_free(vm->mem_pool, generator); - return ret; }