From b7816bb670dbf8f1a8446ccefe32953398379747 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 28 Nov 2018 15:47:05 +0300 Subject: [PATCH] Fixed assignment expression from compound assignment. --- njs/njs_parser_expression.c | 2 +- njs/test/njs_unit_test.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/njs/njs_parser_expression.c b/njs/njs_parser_expression.c index f23f9dfd..d4a5c0a7 100644 --- a/njs/njs_parser_expression.c +++ b/njs/njs_parser_expression.c @@ -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; } diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 850f442d..b6011a4e 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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"), -- 2.47.3