mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-09 12:48:43 +00:00
Conf: Fixed symbol redefinition
This commit is contained in:
parent
48addc88be
commit
2de1e2062e
@ -109,7 +109,6 @@ CF_DECLS
|
|||||||
%type <net> net_ip4_ net_ip6_ net_ip6 net_ip_ net_ip net_or_ipa
|
%type <net> net_ip4_ net_ip6_ net_ip6 net_ip_ net_ip net_or_ipa
|
||||||
%type <net_ptr> net_ net_any net_vpn4_ net_vpn6_ net_vpn_ net_roa4_ net_roa6_ net_roa_ net_ip6_sadr_ net_mpls_
|
%type <net_ptr> net_ net_any net_vpn4_ net_vpn6_ net_vpn_ net_roa4_ net_roa6_ net_roa_ net_ip6_sadr_ net_mpls_
|
||||||
%type <mls> label_stack_start label_stack
|
%type <mls> label_stack_start label_stack
|
||||||
%type <s> CF_SYM_VOID
|
|
||||||
|
|
||||||
%type <t> text opttext
|
%type <t> text opttext
|
||||||
%type <s> symbol
|
%type <s> symbol
|
||||||
@ -147,7 +146,7 @@ conf: ';' ;
|
|||||||
conf: definition ;
|
conf: definition ;
|
||||||
|
|
||||||
definition:
|
definition:
|
||||||
DEFINE CF_SYM_VOID '=' term ';' {
|
DEFINE symbol '=' term ';' {
|
||||||
struct f_val *val = cfg_alloc(sizeof(struct f_val));
|
struct f_val *val = cfg_alloc(sizeof(struct f_val));
|
||||||
if (f_eval(f_linearize($4), cfg_mem, val) > F_RETURN) cf_error("Runtime error");
|
if (f_eval(f_linearize($4), cfg_mem, val) > F_RETURN) cf_error("Runtime error");
|
||||||
cf_define_symbol($2, SYM_CONSTANT | val->type, val, val);
|
cf_define_symbol($2, SYM_CONSTANT | val->type, val, val);
|
||||||
@ -168,9 +167,7 @@ expr_us:
|
|||||||
| expr US { $$ = $1 US_; }
|
| expr US { $$ = $1 US_; }
|
||||||
;
|
;
|
||||||
|
|
||||||
CF_SYM_VOID: CF_SYM_UNDEFINED ;
|
symbol: CF_SYM_UNDEFINED | CF_SYM_KNOWN ;
|
||||||
|
|
||||||
symbol: CF_SYM_VOID | CF_SYM_KNOWN ;
|
|
||||||
|
|
||||||
/* Switches */
|
/* Switches */
|
||||||
|
|
||||||
|
@ -467,7 +467,7 @@ CF_GRAMMAR
|
|||||||
|
|
||||||
conf: filter_def ;
|
conf: filter_def ;
|
||||||
filter_def:
|
filter_def:
|
||||||
FILTER CF_SYM_VOID { $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 ); }
|
||||||
filter_body {
|
filter_body {
|
||||||
struct filter *f = cfg_alloc(sizeof(struct filter));
|
struct filter *f = cfg_alloc(sizeof(struct filter));
|
||||||
*f = (struct filter) { .sym = $2, .root = $4 };
|
*f = (struct filter) { .sym = $2, .root = $4 };
|
||||||
@ -483,7 +483,7 @@ filter_eval:
|
|||||||
;
|
;
|
||||||
|
|
||||||
conf: custom_attr ;
|
conf: custom_attr ;
|
||||||
custom_attr: ATTRIBUTE type CF_SYM_VOID ';' {
|
custom_attr: ATTRIBUTE type symbol ';' {
|
||||||
cf_define_symbol($3, SYM_ATTRIBUTE, attribute, ca_lookup(new_config->pool, $3->name, $2)->fda);
|
cf_define_symbol($3, SYM_ATTRIBUTE, attribute, ca_lookup(new_config->pool, $3->name, $2)->fda);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -555,7 +555,7 @@ type:
|
|||||||
|
|
||||||
function_argsn:
|
function_argsn:
|
||||||
/* EMPTY */
|
/* EMPTY */
|
||||||
| function_argsn type CF_SYM_VOID ';' {
|
| function_argsn type symbol ';' {
|
||||||
if ($3->scope->slots >= 0xfe) cf_error("Too many declarations, at most 255 allowed");
|
if ($3->scope->slots >= 0xfe) cf_error("Too many declarations, at most 255 allowed");
|
||||||
cf_define_symbol($3, SYM_VARIABLE | $2, offset, $3->scope->slots++);
|
cf_define_symbol($3, SYM_VARIABLE | $2, offset, $3->scope->slots++);
|
||||||
}
|
}
|
||||||
@ -563,7 +563,7 @@ function_argsn:
|
|||||||
|
|
||||||
function_args:
|
function_args:
|
||||||
'(' ')' { $$ = 0; }
|
'(' ')' { $$ = 0; }
|
||||||
| '(' function_argsn type CF_SYM_VOID ')' {
|
| '(' function_argsn type symbol ')' {
|
||||||
cf_define_symbol($4, SYM_VARIABLE | $3, offset, $4->scope->slots++);
|
cf_define_symbol($4, SYM_VARIABLE | $3, offset, $4->scope->slots++);
|
||||||
$$ = $4->scope->slots;
|
$$ = $4->scope->slots;
|
||||||
}
|
}
|
||||||
@ -571,7 +571,7 @@ function_args:
|
|||||||
|
|
||||||
function_vars:
|
function_vars:
|
||||||
/* EMPTY */ { $$ = 0; }
|
/* EMPTY */ { $$ = 0; }
|
||||||
| function_vars type CF_SYM_VOID ';' {
|
| function_vars type symbol ';' {
|
||||||
cf_define_symbol($3, SYM_VARIABLE | $2, offset, $3->scope->slots++);
|
cf_define_symbol($3, SYM_VARIABLE | $2, offset, $3->scope->slots++);
|
||||||
$$ = $1 + 1;
|
$$ = $1 + 1;
|
||||||
}
|
}
|
||||||
@ -607,7 +607,7 @@ function_body:
|
|||||||
|
|
||||||
conf: function_def ;
|
conf: function_def ;
|
||||||
function_def:
|
function_def:
|
||||||
FUNCTION CF_SYM_VOID { DBG( "Beginning of function %s\n", $2->name );
|
FUNCTION symbol { DBG( "Beginning of function %s\n", $2->name );
|
||||||
$2 = cf_define_symbol($2, SYM_FUNCTION, function, NULL);
|
$2 = cf_define_symbol($2, SYM_FUNCTION, function, NULL);
|
||||||
cf_push_scope($2);
|
cf_push_scope($2);
|
||||||
} function_args function_body {
|
} function_args function_body {
|
||||||
|
@ -156,7 +156,7 @@ table_sorted:
|
|||||||
| SORTED { $$ = 1; }
|
| SORTED { $$ = 1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
table: net_type TABLE CF_SYM_VOID table_sorted {
|
table: net_type TABLE symbol table_sorted {
|
||||||
struct rtable_config *cf;
|
struct rtable_config *cf;
|
||||||
cf = rt_new_table($3, $1);
|
cf = rt_new_table($3, $1);
|
||||||
cf->sorted = $4;
|
cf->sorted = $4;
|
||||||
@ -180,7 +180,7 @@ proto_name:
|
|||||||
s->proto = this_proto;
|
s->proto = this_proto;
|
||||||
this_proto->name = s->name;
|
this_proto->name = s->name;
|
||||||
}
|
}
|
||||||
| CF_SYM_VOID {
|
| symbol {
|
||||||
cf_define_symbol($1, this_proto->class, proto, this_proto);
|
cf_define_symbol($1, this_proto->class, proto, this_proto);
|
||||||
this_proto->name = $1->name;
|
this_proto->name = $1->name;
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ proto_name:
|
|||||||
|
|
||||||
proto_copy_config(this_proto, $2->proto);
|
proto_copy_config(this_proto, $2->proto);
|
||||||
}
|
}
|
||||||
| CF_SYM_VOID FROM CF_SYM_KNOWN {
|
| symbol FROM CF_SYM_KNOWN {
|
||||||
if (($3->class != SYM_TEMPLATE) && ($3->class != SYM_PROTO)) cf_error("Template or protocol name expected");
|
if (($3->class != SYM_TEMPLATE) && ($3->class != SYM_PROTO)) cf_error("Template or protocol name expected");
|
||||||
|
|
||||||
cf_define_symbol($1, this_proto->class, proto, this_proto);
|
cf_define_symbol($1, this_proto->class, proto, this_proto);
|
||||||
|
Loading…
Reference in New Issue
Block a user