changeset 155:e6e192a55774

A return statement has been disabled outside of function.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 15 Aug 2016 11:33:37 +0300
parents 0c9a771b7664
children dcd8a105b5e7
files njs/njs_parser.c njs/test/njs_unit_test.c
diffstat 2 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/njs/njs_parser.c	Thu Aug 11 13:57:36 2016 +0300
+++ b/njs/njs_parser.c	Mon Aug 15 11:33:37 2016 +0300
@@ -584,6 +584,13 @@
     njs_token_t        token;
     njs_parser_node_t  *node;
 
+    if (parser->scope == NJS_SCOPE_GLOBAL) {
+        nxt_alert(&vm->trace, NXT_LEVEL_ERROR,
+                  "SyntaxError: Illegal return statement");
+
+        return NXT_ERROR;
+    }
+
     node = njs_parser_node_alloc(vm);
     if (nxt_slow_path(node == NULL)) {
         return NJS_TOKEN_ERROR;
--- a/njs/test/njs_unit_test.c	Thu Aug 11 13:57:36 2016 +0300
+++ b/njs/test/njs_unit_test.c	Mon Aug 15 11:33:37 2016 +0300
@@ -3290,6 +3290,9 @@
 
     /* Functions. */
 
+    { nxt_string("return"),
+      nxt_string("SyntaxError: Illegal return statement in 1") },
+
     { nxt_string("function () { } f()"),
       nxt_string("SyntaxError: Unexpected token \"(\" in 1") },