Commit dfe63ed8 authored by Maria Matejka's avatar Maria Matejka
Browse files

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

parent 70a4320b
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -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;
  if ($1)
    while ($$.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;
  $1.end->next = $2;
  $$.end = $2;
  while ($$.end->next)
    $$.end = $$.end->next;
    $$.end = $2.end;
    $1.end->next = $2.begin;
  }
 }
 ;

+8 −0
Original line number Diff line number Diff line
@@ -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");