]> git.kaiwu.me - njs.git/commitdiff
Fixed assignment expression from compound assignment.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 28 Nov 2018 12:47:05 +0000 (15:47 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 28 Nov 2018 12:47:05 +0000 (15:47 +0300)
njs/njs_parser_expression.c
njs/test/njs_unit_test.c

index f23f9dfd35401b95f3dc3954353a0c78873e8b53..d4a5c0a749a84868a56df0c3b0c21b70007e7f0f 100644 (file)
@@ -237,7 +237,7 @@ njs_parser_var_expression(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token)
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
-    token = njs_parser_conditional_expression(vm, parser, token);
+    token = njs_parser_assignment_expression(vm, parser, token);
     if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
         return token;
     }
index 850f442d9203232535054d77cbd34205a5abd843..b6011a4ed2a9dce64bb2bf7ae89cbe8ab4e4e5d9 100644 (file)
@@ -597,6 +597,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("var a, b = (a = [2]) * (3 * 4); a +' '+ b"),
       nxt_string("2 24") },
 
+    { nxt_string("var a = 1; var b = a += 1; b"),
+      nxt_string("2") },
+
+    { nxt_string("var a = 1; var b = a -= 1; b"),
+      nxt_string("0") },
+
+    { nxt_string("var a = 1; var b = a <<= 1; b"),
+      nxt_string("2") },
+
     /* 3 address operation and side effect. */
 
     { nxt_string("var a = 1; function f(x) { a = x; return 2 }; a+f(5)+' '+a"),