Filter: Fixing empty block and never-executed-statement bug
This commit is contained in:
parent
70a4320bdd
commit
dfe63ed84d
2 changed files with 26 additions and 10 deletions
|
@ -446,7 +446,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, UNSET, RETURN,
|
||||||
%nonassoc THEN
|
%nonassoc THEN
|
||||||
%nonassoc ELSE
|
%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 <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 <fda> dynamic_attr
|
||||||
%type <fsa> static_attr
|
%type <fsa> static_attr
|
||||||
|
@ -624,17 +624,25 @@ cmds: /* EMPTY */ { $$ = NULL; }
|
||||||
| cmds_int { $$ = $1.begin; }
|
| cmds_int { $$ = $1.begin; }
|
||||||
;
|
;
|
||||||
|
|
||||||
cmds_int: cmd {
|
cmd_prep: cmd {
|
||||||
$$.begin = $$.end = $1;
|
$$.begin = $$.end = $1;
|
||||||
|
if ($1)
|
||||||
while ($$.end->next)
|
while ($$.end->next)
|
||||||
$$.end = $$.end->next;
|
$$.end = $$.end->next;
|
||||||
}
|
}
|
||||||
| cmds_int cmd {
|
;
|
||||||
|
|
||||||
|
cmds_int: cmd_prep
|
||||||
|
| cmds_int cmd_prep {
|
||||||
|
if (!$1.begin)
|
||||||
|
$$ = $2;
|
||||||
|
else if (!$2.begin)
|
||||||
|
$$ = $1;
|
||||||
|
else {
|
||||||
$$.begin = $1.begin;
|
$$.begin = $1.begin;
|
||||||
$1.end->next = $2;
|
$$.end = $2.end;
|
||||||
$$.end = $2;
|
$1.end->next = $2.begin;
|
||||||
while ($$.end->next)
|
}
|
||||||
$$.end = $$.end->next;
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -1178,6 +1178,10 @@ bt_test_suite(t_include, "Testing including another config file");
|
||||||
function t_if_else()
|
function t_if_else()
|
||||||
int i;
|
int i;
|
||||||
{
|
{
|
||||||
|
/* Empty blocks regression test */
|
||||||
|
if true then {}
|
||||||
|
else {}
|
||||||
|
|
||||||
if true then
|
if true then
|
||||||
bt_assert(true);
|
bt_assert(true);
|
||||||
|
|
||||||
|
@ -1187,6 +1191,10 @@ int i;
|
||||||
bt_assert(true);
|
bt_assert(true);
|
||||||
else
|
else
|
||||||
bt_assert(false);
|
bt_assert(false);
|
||||||
|
|
||||||
|
/* Empty blocks regression test */
|
||||||
|
if true then {}
|
||||||
|
else {}
|
||||||
}
|
}
|
||||||
|
|
||||||
bt_test_suite(t_if_else, "Testing if-else statement");
|
bt_test_suite(t_if_else, "Testing if-else statement");
|
||||||
|
|
Loading…
Reference in a new issue