]> git.kaiwu.me - njs.git/commitdiff
Fixed break label for if statement.
authorVadim Zhestikov <v.zhestikov@f5.com>
Thu, 20 Oct 2022 23:40:35 +0000 (16:40 -0700)
committerVadim Zhestikov <v.zhestikov@f5.com>
Thu, 20 Oct 2022 23:40:35 +0000 (16:40 -0700)
This fixes #591 issue on Github.

src/njs_generator.c
src/test/njs_unit_test.c

index 5d1b9a8908f325159ad3aeaee172ce307406d4b1..6d83a9e5828275c99737e9db8ee69a4c840a3b51 100644 (file)
@@ -1127,6 +1127,14 @@ static njs_int_t
 njs_generate_if_statement(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
+    njs_int_t  ret;
+
+    ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_BLOCK,
+                                    &node->name);
+    if (njs_slow_path(ret != NJS_OK)) {
+        return ret;
+    }
+
     /* The condition expression. */
 
     njs_generator_next(generator, njs_generate, node->left);
@@ -1231,6 +1239,8 @@ njs_generate_if_statement_else(njs_vm_t *vm, njs_generator_t *generator,
 
     njs_code_set_offset(generator, label_offset, *jump_offset);
 
+    njs_generate_patch_block_exit(vm, generator);
+
     return njs_generator_stack_pop(vm, generator, generator->context);
 }
 
index c11c563004458c3858eb4c138a2528928d572bb7..1e1e453249cb33c67eaf9b2239607e2723bc329b 100644 (file)
@@ -3188,6 +3188,12 @@ static njs_unit_test_t  njs_test[] =
       njs_str("1") },
 #endif
 
+    { njs_str("var r='ok'; a:if(1){break a; r='!ok'}; r"),
+      njs_str("ok") },
+
+    { njs_str("var r='ok'; a:if(0){break a; r='!ok1'} else {break a; r='!ok2'}; r"),
+      njs_str("ok") },
+
     { njs_str("var a = 0; a:{a++}; a"),
       njs_str("1") },