0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-11-08 12:18:42 +00:00
This commit is contained in:
Maria Matejka 2023-07-02 15:10:08 +02:00
parent d648c6b602
commit 0fbd598a9c
3 changed files with 20 additions and 14 deletions

View File

@ -128,8 +128,7 @@ struct symbol {
struct ea_class *attribute; /* For SYM_ATTRIBUTE */ struct ea_class *attribute; /* For SYM_ATTRIBUTE */
struct f_val *val; /* For SYM_CONSTANT */ struct f_val *val; /* For SYM_CONSTANT */
uint offset; /* For SYM_VARIABLE */ uint offset; /* For SYM_VARIABLE */
struct channel_config *ch_config; /* For SYM_COUNTER */ struct volatile_config *volat; /* For SYM_VOLATILE */
struct stats_term_config *term; /* For SYM_COUNTER_TERM */
}; };
char name[0]; char name[0];
@ -164,8 +163,6 @@ struct bytestring {
#define SYM_FILTER 4 #define SYM_FILTER 4
#define SYM_TABLE 5 #define SYM_TABLE 5
#define SYM_ATTRIBUTE 6 #define SYM_ATTRIBUTE 6
#define SYM_COUNTER 7
#define SYM_COUNTER_TERM 8
#define SYM_VARIABLE 0x100 /* 0x100-0x1ff are variable types */ #define SYM_VARIABLE 0x100 /* 0x100-0x1ff are variable types */
#define SYM_VARIABLE_RANGE SYM_VARIABLE ... (SYM_VARIABLE | 0xff) #define SYM_VARIABLE_RANGE SYM_VARIABLE ... (SYM_VARIABLE | 0xff)

View File

@ -153,16 +153,6 @@ conf: ';' ;
/* Constant expressions */ /* Constant expressions */
conf: definition ;
definition:
DEFINE symbol '=' term ';' {
struct f_val val;
if (f_eval(f_linearize($4, 1), &val) > F_RETURN) cf_error("Runtime error");
cf_define_symbol($2, SYM_CONSTANT | val.type, val, lp_val_copy(cfg_mem, &val));
}
;
expr: expr:
NUM NUM
| '(' term ')' { $$ = f_eval_int(f_linearize($2, 1)); } | '(' term ')' { $$ = f_eval_int(f_linearize($2, 1)); }

View File

@ -361,6 +361,25 @@ conf: FILTER STACKS expr expr ';' {
} }
; ;
conf: definition ;
definition:
DEFINE symbol '=' term ';' {
struct f_line *line = f_linearize($4, 1);
struct filter_iterator fit;
FILTER_ITERATE_INIT(&fit,
if
struct f_val val;
if (f_eval(, &val) > F_RETURN) cf_error("Runtime error");
cf_define_symbol($2, SYM_CONSTANT | val.type, val, lp_val_copy(cfg_mem, &val));
}
| DEFINE symbol '=' COUNT ROUTE r_args ';' {
cf_define_symbol($2, SYM_VOLATILE, volat, f_volatile_counter($6));
}
;
conf: filter_def ; conf: filter_def ;
filter_def: filter_def:
FILTER symbol { $2 = cf_define_symbol($2, SYM_FILTER, filter, NULL); cf_push_scope( $2 ); } FILTER symbol { $2 = cf_define_symbol($2, SYM_FILTER, filter, NULL); cf_push_scope( $2 ); }