[njs] Corrected error message when parsing "var" inside "for".

Valentin Bartenev vbart at nginx.com
Thu May 2 20:50:33 UTC 2019


details:   https://hg.nginx.org/njs/rev/ae95d2637819
branches:  
changeset: 940:ae95d2637819
user:      Valentin Bartenev <vbart at nginx.com>
date:      Thu May 02 11:08:44 2019 +0300
description:
Corrected error message when parsing "var" inside "for".

The "var_in" flag indicates parsing inside the "for" statement with expectation
of the "in" token, but it doesn't define the loop as a for-in one.  In fact,
that's unknown at the moment when this particular error message is emitted.

As a result, the following code:

  for (var eval = 10; eval; eval--);

produces the error message about for-in loop:

  SyntaxError: Identifier "eval" is forbidden in for-in var declaration

Actually, according to the specification "eval" isn't a keyword and shouldn't
cause any errors here.  But this bug is beyond the scope of the current fix.

diffstat:

 njs/njs_parser.c         |  5 ++---
 njs/test/njs_unit_test.c |  2 +-
 2 files changed, 3 insertions(+), 4 deletions(-)

diffs (27 lines):

diff -r 601a52c421d1 -r ae95d2637819 njs/njs_parser.c
--- a/njs/njs_parser.c	Mon Apr 29 15:57:36 2019 +0300
+++ b/njs/njs_parser.c	Thu May 02 11:08:44 2019 +0300
@@ -1057,9 +1057,8 @@ njs_parser_var_statement(njs_vm_t *vm, n
         if (token != NJS_TOKEN_NAME) {
             if (token == NJS_TOKEN_ARGUMENTS || token == NJS_TOKEN_EVAL) {
                 njs_parser_syntax_error(vm, parser, "Identifier \"%V\" "
-                                        "is forbidden in %s declaration",
-                                        njs_parser_text(parser),
-                                        var_in ? "for-in var" : "var");
+                                        "is forbidden in var declaration",
+                                        njs_parser_text(parser));
             }
 
             return NJS_TOKEN_ILLEGAL;
diff -r 601a52c421d1 -r ae95d2637819 njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c	Mon Apr 29 15:57:36 2019 +0300
+++ b/njs/test/njs_unit_test.c	Thu May 02 11:08:44 2019 +0300
@@ -6737,7 +6737,7 @@ static njs_unit_test_t  njs_test[] =
       nxt_string("SyntaxError: Identifier \"arguments\" is forbidden in var declaration in 1") },
 
     { nxt_string("for (var arguments in []) {}"),
-      nxt_string("SyntaxError: Identifier \"arguments\" is forbidden in for-in var declaration in 1") },
+      nxt_string("SyntaxError: Identifier \"arguments\" is forbidden in var declaration in 1") },
 
     { nxt_string("function arguments(){}"),
       nxt_string("SyntaxError: Identifier \"arguments\" is forbidden in function declaration in 1") },


More information about the nginx-devel mailing list