mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Filter: Removing the third argument hack
Just to make the code a bit more clean and easier to maintain.
This commit is contained in:
parent
cff9e937fd
commit
478f9babed
@ -304,12 +304,10 @@ f_generate_lc(struct f_inst *t1, struct f_inst *t2, struct f_inst *t3)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rv = cfg_allocz(sizeof(struct f_inst3));
|
rv = f_new_inst(FI_LC_CONSTRUCT);
|
||||||
rv->lineno = ifs->lino;
|
|
||||||
rv->fi_code = FI_LC_CONSTRUCT;
|
|
||||||
rv->a1.p = t1;
|
rv->a1.p = t1;
|
||||||
rv->a2.p = t2;
|
rv->a2.p = t2;
|
||||||
INST3(rv).p = t3;
|
rv->a3.p = t3;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -601,6 +601,8 @@ static struct tbf rl_runtime_err = TBF_DEFAULT_LOG_LIMITS;
|
|||||||
#define TWOARGS_C TWOARGS \
|
#define TWOARGS_C TWOARGS \
|
||||||
if (v1.type != v2.type) \
|
if (v1.type != v2.type) \
|
||||||
runtime( "Can't operate with values of incompatible types" );
|
runtime( "Can't operate with values of incompatible types" );
|
||||||
|
#define THREEARGS TWOARGS \
|
||||||
|
ARG(v3, a3.p)
|
||||||
#define ACCESS_RTE \
|
#define ACCESS_RTE \
|
||||||
do { if (!f_rte) runtime("No route to access"); } while (0)
|
do { if (!f_rte) runtime("No route to access"); } while (0)
|
||||||
|
|
||||||
@ -628,7 +630,7 @@ static struct f_val
|
|||||||
interpret(struct f_inst *what)
|
interpret(struct f_inst *what)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct f_val v1, v2, res = { .type = T_VOID }, *vp;
|
struct f_val v1, v2, v3, res = { .type = T_VOID }, *vp;
|
||||||
unsigned u1, u2;
|
unsigned u1, u2;
|
||||||
int i;
|
int i;
|
||||||
u32 as;
|
u32 as;
|
||||||
@ -749,12 +751,7 @@ interpret(struct f_inst *what)
|
|||||||
|
|
||||||
case FI_LC_CONSTRUCT:
|
case FI_LC_CONSTRUCT:
|
||||||
{
|
{
|
||||||
TWOARGS;
|
THREEARGS;
|
||||||
|
|
||||||
/* Third argument hack */
|
|
||||||
struct f_val v3 = interpret(INST3(what).p);
|
|
||||||
if (v3.type & T_RETURN)
|
|
||||||
return v3;
|
|
||||||
|
|
||||||
if ((v1.type != T_INT) || (v2.type != T_INT) || (v3.type != T_INT))
|
if ((v1.type != T_INT) || (v2.type != T_INT) || (v3.type != T_INT))
|
||||||
runtime( "Can't operate with value of non-integer type in LC constructor" );
|
runtime( "Can't operate with value of non-integer type in LC constructor" );
|
||||||
@ -1664,9 +1661,7 @@ i_same(struct f_inst *f1, struct f_inst *f2)
|
|||||||
case FI_TYPE: ONEARG; break;
|
case FI_TYPE: ONEARG; break;
|
||||||
|
|
||||||
case FI_LC_CONSTRUCT:
|
case FI_LC_CONSTRUCT:
|
||||||
TWOARGS;
|
THREEARGS;
|
||||||
if (!i_same(INST3(f1).p, INST3(f2).p))
|
|
||||||
return 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FI_SET:
|
case FI_SET:
|
||||||
|
@ -93,6 +93,10 @@ struct f_inst { /* Instruction */
|
|||||||
uint i;
|
uint i;
|
||||||
void *p;
|
void *p;
|
||||||
} a2; /* The second argument */
|
} a2; /* The second argument */
|
||||||
|
union {
|
||||||
|
int i;
|
||||||
|
void *p;
|
||||||
|
} a3; /* The third argument */
|
||||||
int lineno;
|
int lineno;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -105,17 +109,6 @@ struct f_inst_roa_check {
|
|||||||
struct rtable_config *rtc;
|
struct rtable_config *rtc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct f_inst3 {
|
|
||||||
struct f_inst i;
|
|
||||||
union {
|
|
||||||
int i;
|
|
||||||
void *p;
|
|
||||||
} a3;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define INST3(x) (((struct f_inst3 *) x)->a3)
|
|
||||||
|
|
||||||
|
|
||||||
struct f_prefix {
|
struct f_prefix {
|
||||||
net_addr net;
|
net_addr net;
|
||||||
u8 lo, hi;
|
u8 lo, hi;
|
||||||
|
Loading…
Reference in New Issue
Block a user