mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Filter: further split of print & die to FI_PRINT, FI_FLUSH and FI_DIE
This commit is contained in:
parent
3782454e8d
commit
efd7c87b5b
@ -966,8 +966,6 @@ break_command:
|
|||||||
| ACCEPT { $$ = F_ACCEPT; }
|
| ACCEPT { $$ = F_ACCEPT; }
|
||||||
| REJECT { $$ = F_REJECT; }
|
| REJECT { $$ = F_REJECT; }
|
||||||
| ERROR { $$ = F_ERROR; }
|
| ERROR { $$ = F_ERROR; }
|
||||||
| PRINT { $$ = F_NOP; }
|
|
||||||
| PRINTN { $$ = F_NONL; }
|
|
||||||
;
|
;
|
||||||
|
|
||||||
print_list: /* EMPTY */ { $$ = NULL; }
|
print_list: /* EMPTY */ { $$ = NULL; }
|
||||||
@ -1018,21 +1016,23 @@ cmd:
|
|||||||
$$ = f_new_inst(FI_EA_UNSET, $3);
|
$$ = f_new_inst(FI_EA_UNSET, $3);
|
||||||
}
|
}
|
||||||
| break_command print_list ';' {
|
| break_command print_list ';' {
|
||||||
struct f_inst *breaker = NULL;
|
struct f_inst *breaker = f_new_inst(FI_DIE, $1);
|
||||||
struct f_inst *printer = NULL;
|
if ($2) {
|
||||||
if ($2)
|
struct f_inst *printer = f_new_inst(FI_PRINT, $2);
|
||||||
printer = f_new_inst(FI_PRINT, $2);
|
struct f_inst *flusher = f_new_inst(FI_FLUSH);
|
||||||
if ($1 != F_NONL)
|
printer->next = flusher;
|
||||||
breaker = f_new_inst(FI_DIE, $1);
|
flusher->next = breaker;
|
||||||
|
|
||||||
if (printer && breaker)
|
|
||||||
printer->next = breaker;
|
|
||||||
|
|
||||||
if (printer)
|
|
||||||
$$ = printer;
|
$$ = printer;
|
||||||
else
|
} else
|
||||||
$$ = breaker;
|
$$ = breaker;
|
||||||
}
|
}
|
||||||
|
| PRINT print_list ';' {
|
||||||
|
$$ = f_new_inst(FI_PRINT, $2);
|
||||||
|
$$->next = f_new_inst(FI_FLUSH);
|
||||||
|
}
|
||||||
|
| PRINTN print_list ';' {
|
||||||
|
$$ = f_new_inst(FI_PRINT, $2);
|
||||||
|
}
|
||||||
| function_call ';' { $$ = f_new_inst(FI_DROP_RESULT, $1); }
|
| function_call ';' { $$ = f_new_inst(FI_DROP_RESULT, $1); }
|
||||||
| CASE term '{' switch_body '}' {
|
| CASE term '{' switch_body '}' {
|
||||||
$$ = f_new_inst(FI_SWITCH, $2, build_tree($4));
|
$$ = f_new_inst(FI_SWITCH, $2, build_tree($4));
|
||||||
|
@ -455,23 +455,24 @@
|
|||||||
val_format(&(vv(i)), &fs->buf);
|
val_format(&(vv(i)), &fs->buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INST(FI_FLUSH, 0, 0) {
|
||||||
|
NEVER_CONSTANT;
|
||||||
|
if (!(fs->flags & FF_SILENT))
|
||||||
|
/* After log_commit, the buffer is reset */
|
||||||
|
log_commit(*L_INFO, &fs->buf);
|
||||||
|
}
|
||||||
|
|
||||||
INST(FI_DIE, 0, 0) {
|
INST(FI_DIE, 0, 0) {
|
||||||
NEVER_CONSTANT;
|
NEVER_CONSTANT;
|
||||||
FID_MEMBER(enum filter_return, fret, f1->fret != f2->fret, "%s", filter_return_str(item->fret));
|
FID_MEMBER(enum filter_return, fret, f1->fret != f2->fret, "%s", filter_return_str(item->fret));
|
||||||
|
|
||||||
if (fs->buf.start < fs->buf.pos)
|
|
||||||
log_commit(*L_INFO, &fs->buf);
|
|
||||||
|
|
||||||
switch (whati->fret) {
|
switch (whati->fret) {
|
||||||
case F_QUITBIRD:
|
case F_QUITBIRD:
|
||||||
die( "Filter asked me to die" );
|
die( "Filter asked me to die" );
|
||||||
case F_ACCEPT:
|
case F_ACCEPT: /* Should take care about turning ACCEPT into MODIFY */
|
||||||
/* Should take care about turning ACCEPT into MODIFY */
|
|
||||||
case F_ERROR:
|
case F_ERROR:
|
||||||
case F_REJECT: /* FIXME (noncritical) Should print complete route along with reason to reject route */
|
case F_REJECT: /* Maybe print complete route along with reason to reject route? */
|
||||||
return fret; /* We have to return now, no more processing. */
|
return fret; /* We have to return now, no more processing. */
|
||||||
case F_NOP:
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
bug( "unknown return type: Can't happen");
|
bug( "unknown return type: Can't happen");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user