Filter: Fixing empty block and never-executed-statement bug

This commit is contained in:
Maria Matejka 2019-08-13 16:45:27 +02:00
parent 70a4320bdd
commit dfe63ed84d
2 changed files with 26 additions and 10 deletions

View file

@ -446,7 +446,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, UNSET, RETURN,
%nonassoc THEN
%nonassoc ELSE
%type <xp> cmds_int
%type <xp> cmds_int cmd_prep
%type <x> term block cmd cmds constant constructor print_list var_list function_call symbol_value bgp_path_expr bgp_path bgp_path_tail
%type <fda> dynamic_attr
%type <fsa> static_attr
@ -624,17 +624,25 @@ cmds: /* EMPTY */ { $$ = NULL; }
| cmds_int { $$ = $1.begin; }
;
cmds_int: cmd {
cmd_prep: cmd {
$$.begin = $$.end = $1;
while ($$.end->next)
$$.end = $$.end->next;
if ($1)
while ($$.end->next)
$$.end = $$.end->next;
}
;
cmds_int: cmd_prep
| cmds_int cmd_prep {
if (!$1.begin)
$$ = $2;
else if (!$2.begin)
$$ = $1;
else {
$$.begin = $1.begin;
$$.end = $2.end;
$1.end->next = $2.begin;
}
| cmds_int cmd {
$$.begin = $1.begin;
$1.end->next = $2;
$$.end = $2;
while ($$.end->next)
$$.end = $$.end->next;
}
;

View file

@ -1178,6 +1178,10 @@ bt_test_suite(t_include, "Testing including another config file");
function t_if_else()
int i;
{
/* Empty blocks regression test */
if true then {}
else {}
if true then
bt_assert(true);
@ -1187,6 +1191,10 @@ int i;
bt_assert(true);
else
bt_assert(false);
/* Empty blocks regression test */
if true then {}
else {}
}
bt_test_suite(t_if_else, "Testing if-else statement");