]> git.kaiwu.me - njs.git/commitdiff
Improved handling of arguments object.
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 11 Mar 2019 08:15:20 +0000 (11:15 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Mon, 11 Mar 2019 08:15:20 +0000 (11:15 +0300)
njs/njs_generator.c
njs/njs_generator.h
njs/njs_parser.c
njs/njs_parser.h

index d8cf77148ae1f49495c97e83216dfc5f107faec5..5c818b7d9daf2943c4362a711649261add7700a8 100644 (file)
@@ -579,8 +579,6 @@ njs_generate_arguments_object(njs_vm_t *vm, njs_generator_t *generator,
 {
     njs_vmcode_arguments_t  *gen;
 
-    generator->arguments_object = 1;
-
     node->index = njs_generate_object_dest_index(vm, generator, node);
     if (nxt_slow_path(node->index == NJS_INDEX_ERROR)) {
         return NXT_ERROR;
@@ -2312,7 +2310,7 @@ 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->arguments_object = node->scope->arguments_object;
 
         lambda->start = generator.code_start;
         lambda->local_size = generator.scope_size;
index 1ffe022e623c9f71ea830fa89a219483f17487ad..3ebb0739ca6dde71202b9023cf86ac5584a53601 100644 (file)
@@ -24,7 +24,6 @@ struct njs_generator_s {
 
     /* Parsing Function() or eval(). */
     uint8_t                         runtime;           /* 1 bit */
-    uint8_t                         arguments_object;  /* 1 bit */
 };
 
 
index 1cb012d6651c5ad0187862244ab1afe3d33db4fe..9b408e7699fe451c7ca88be6d44da3bf021ad228 100644 (file)
@@ -2169,6 +2169,8 @@ njs_parser_reference(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token,
             return NULL;
         }
 
+        parser->scope->arguments_object = 1;
+
         break;
 
     case NJS_TOKEN_OBJECT_CONSTRUCTOR:
index fca1c2d726da453c08606d8cd1a0e2e9e323017d..0797f21982d9821310719f1b40032106db6f4dff 100644 (file)
@@ -30,6 +30,7 @@ struct njs_parser_scope_s {
     njs_scope_t                     type:8;
     uint8_t                         nesting;     /* 4 bits */
     uint8_t                         argument_closures;
+    uint8_t                         arguments_object;
 };