From 8572345e13e35b7873d6c4adf12dcc097909024a Mon Sep 17 00:00:00 2001 From: Vadim Zhestikov Date: Thu, 20 Oct 2022 16:40:35 -0700 Subject: [PATCH] Fixed break label for if statement. This fixes #591 issue on Github. --- src/njs_generator.c | 10 ++++++++++ src/test/njs_unit_test.c | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/src/njs_generator.c b/src/njs_generator.c index 5d1b9a89..6d83a9e5 100644 --- a/src/njs_generator.c +++ b/src/njs_generator.c @@ -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); } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index c11c5630..1e1e4532 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") }, -- 2.47.3