awk: fix handling of "if ... break ; else ..." - closes 7226
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0b0ccd4570
commit
5f8daefb83
@ -1540,12 +1540,14 @@ static void chain_group(void)
|
|||||||
debug_printf_parse("%s: OC_BREAK\n", __func__);
|
debug_printf_parse("%s: OC_BREAK\n", __func__);
|
||||||
n = chain_node(OC_EXEC);
|
n = chain_node(OC_EXEC);
|
||||||
n->a.n = break_ptr;
|
n->a.n = break_ptr;
|
||||||
|
chain_expr(t_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OC_CONTINUE:
|
case OC_CONTINUE:
|
||||||
debug_printf_parse("%s: OC_CONTINUE\n", __func__);
|
debug_printf_parse("%s: OC_CONTINUE\n", __func__);
|
||||||
n = chain_node(OC_EXEC);
|
n = chain_node(OC_EXEC);
|
||||||
n->a.n = continue_ptr;
|
n->a.n = continue_ptr;
|
||||||
|
chain_expr(t_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* delete, next, nextfile, return, exit */
|
/* delete, next, nextfile, return, exit */
|
||||||
|
@ -295,6 +295,22 @@ testing "awk -e and ARGC" \
|
|||||||
""
|
""
|
||||||
SKIP=
|
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"
|
# testing "description" "command" "result" "infile" "stdin"
|
||||||
|
|
||||||
exit $FAILCOUNT
|
exit $FAILCOUNT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user