]> git.kaiwu.me - njs.git/commitdiff
Allocating njs_generator_t on stack.
authorhongzhidao <hongzhidao@gmail.com>
Sat, 16 Feb 2019 15:18:43 +0000 (23:18 +0800)
committerhongzhidao <hongzhidao@gmail.com>
Sat, 16 Feb 2019 15:18:43 +0000 (23:18 +0800)
njs/njs.c
njs/njs_generator.c

index b08548943183bb0e0f923a3018e4c9a13f39893f..b8ceea0c103e86003a45efffba9da62071cbbc56 100644 (file)
--- 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;
 
index 14ed8c46deb28c4373e045e34b2e3ba15da333b6..a5496e9c701756b14632b713724eaef013960e9c 100644 (file)
@@ -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;
 }