]> git.kaiwu.me - njs.git/commitdiff
Logical "or" and "and" operations should store result in a
authorIgor Sysoev <igor@sysoev.ru>
Tue, 3 Jan 2017 16:38:17 +0000 (19:38 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 3 Jan 2017 16:38:17 +0000 (19:38 +0300)
temporary destination because they are actually branch operations.

njs/njs_generator.c
njs/test/njs_unit_test.c

index 85eeb20dde4c91a8aedaff6a80a937ef43ad1413..2fe7236e286b0cb6b5595e0824bca60c1fe4c1fa 100644 (file)
@@ -1666,7 +1666,7 @@ njs_generate_test_jump_expression(njs_vm_t *vm, njs_parser_t *parser,
     test_jump->code.retval = NJS_VMCODE_RETVAL;
     test_jump->value = node->left->index;
 
-    node->index = njs_generator_dest_index(vm, parser, node);
+    node->index = njs_generator_node_temp_index_get(vm, parser, node);
     if (nxt_slow_path(node->index == NJS_INDEX_ERROR)) {
         return node->index;
     }
@@ -1695,7 +1695,7 @@ njs_generate_test_jump_expression(njs_vm_t *vm, njs_parser_t *parser,
 
     test_jump->offset = parser->code_end - (u_char *) test_jump;
 
-    return njs_generator_node_index_release(vm, parser, node->right);
+    return njs_generator_children_indexes_release(vm, parser, node);
 }
 
 
index b9cf00c0f8ab76483962c3279f38d63ffe0dcbc5..95363aee7eeda82524e6b7b2c702a8376de24c79 100644 (file)
@@ -568,6 +568,12 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("var a = 1; 1 || (a = 2); a"),
       nxt_string("1") },
 
+    { nxt_string("var x; x = 0 || x; x"),
+      nxt_string("undefined") },
+
+    { nxt_string("var x; x = 1 && x; x"),
+      nxt_string("undefined") },
+
     { nxt_string("1 || 2 || 3"),
       nxt_string("1") },