awk: fix handling of "if ... break ; else ..." - closes 7226
No binary (build failed)
—
(log yok)
| @@ -1540,12 +1540,14 @@ static void chain_group(void) | |
| debug_printf_parse("%s: OC_BREAK\n", __func__); | |
| n = chain_node(OC_EXEC); | |
| n->a.n = break_ptr; | |
| + | chain_expr(t_info); |
| break; | |
| case OC_CONTINUE: | |
| debug_printf_parse("%s: OC_CONTINUE\n", __func__); | |
| n = chain_node(OC_EXEC); | |
| n->a.n = continue_ptr; | |
| + | chain_expr(t_info); |
| break; | |
| /* delete, next, nextfile, return, exit */ | |
| @@ -295,6 +295,22 @@ testing "awk -e and ARGC" \ | |
| "" | |
| SKIP= | |
| + | # The examples are in fact not valid awk programs (break/continue |
| + | # can only be used inside loops). |
| + | # But we do accept them outside of loops. |
| + | # We had a bug with misparsing "break ; else" sequence. |
| + | # Test that *that* bug is fixed, using simplest possible scripts: |
| + | testing "awk break" \ |
| + | "awk -f - 2>&1; echo \$?" \ |
| + | "0\n" \ |
| + | "" \ |
| + | 'BEGIN { if (1) break; else a = 1 }' |
| + | testing "awk continue" \ |
| + | "awk -f - 2>&1; echo \$?" \ |
| + | "0\n" \ |
| + | "" \ |
| + | 'BEGIN { if (1) continue; else a = 1 }' |
| + | |
| # testing "description" "command" "result" "infile" "stdin" | |
| exit $FAILCOUNT | |