Create syntax sugar for add/delete/prepend, so xyzzy.prepend(123) is
possible. That means that milestone 3 was reached.
This commit is contained in:
parent
77f37ae099
commit
7d6eebae3b
2 changed files with 30 additions and 0 deletions
|
@ -550,6 +550,13 @@ cmd:
|
||||||
$$->a1.p = $2;
|
$$->a1.p = $2;
|
||||||
$$->a2.p = build_tree( $4 );
|
$$->a2.p = build_tree( $4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
| rtadot dynamic_attr '.' EMPTY ';'
|
||||||
|
{ struct f_inst *i = f_new_inst(); i->code = 'E'; i->aux = T_CLIST; $$ = $2; $$->code = P('e','S'); $$->a1.p = i; }
|
||||||
|
| rtadot dynamic_attr '.' PREPEND '(' term ')' ';' { $$ = f_generate_complex( P('A','p'), 'x', $2, $6 ); }
|
||||||
|
| rtadot dynamic_attr '.' ADD '(' term ')' ';' { $$ = f_generate_complex( P('C','a'), 'a', $2, $6 ); }
|
||||||
|
| rtadot dynamic_attr '.' DELETE '(' term ')' ';' { $$ = f_generate_complex( P('C','a'), 'd', $2, $6 ); }
|
||||||
;
|
;
|
||||||
|
|
||||||
CF_END
|
CF_END
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#include "conf/conf.h"
|
#include "conf/conf.h"
|
||||||
#include "filter/filter.h"
|
#include "filter/filter.h"
|
||||||
|
|
||||||
|
#define P(a,b) ((a<<8) | b)
|
||||||
|
|
||||||
struct f_inst *
|
struct f_inst *
|
||||||
f_new_inst(void)
|
f_new_inst(void)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +31,27 @@ f_new_dynamic_attr(int type, int f_type, int code)
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate set_dynamic( operation( get_dynamic(), argument ) )
|
||||||
|
*/
|
||||||
|
struct f_inst *
|
||||||
|
f_generate_complex(int operation, int operation_aux, struct f_inst *dyn, struct f_inst *argument)
|
||||||
|
{
|
||||||
|
struct f_inst *set_dyn = f_new_inst(),
|
||||||
|
*oper = f_new_inst(),
|
||||||
|
*get_dyn = dyn;
|
||||||
|
|
||||||
|
*set_dyn = *get_dyn;
|
||||||
|
get_dyn->code = P('e','a');
|
||||||
|
oper->code = operation;
|
||||||
|
oper->aux = operation_aux;
|
||||||
|
oper->a1.p = get_dyn;
|
||||||
|
oper->a2.p = argument;
|
||||||
|
set_dyn->code = P('e','S');
|
||||||
|
set_dyn->a1.p = oper;
|
||||||
|
return set_dyn;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
filter_name(struct filter *filter)
|
filter_name(struct filter *filter)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue