• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/src/router/config/

Lines Matching refs:expr

13 struct expr *expr_alloc_symbol(struct symbol *sym)
15 struct expr *e = malloc(sizeof(*e));
22 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
24 struct expr *e = malloc(sizeof(*e));
27 e->left.expr = ce;
31 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
33 struct expr *e = malloc(sizeof(*e));
36 e->left.expr = e1;
37 e->right.expr = e2;
41 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
43 struct expr *e = malloc(sizeof(*e));
51 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
58 struct expr *expr_copy(struct expr *org)
60 struct expr *e;
72 e->left.expr = expr_copy(org->left.expr);
82 e->left.expr = expr_copy(org->left.expr);
83 e->right.expr = expr_copy(org->right.expr);
95 void expr_free(struct expr *e)
104 expr_free(e->left.expr);
111 expr_free(e->left.expr);
112 expr_free(e->right.expr);
126 static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
129 __expr_eliminate_eq(type, &e1->left.expr, &e2);
130 __expr_eliminate_eq(type, &e1->right.expr, &e2);
134 __expr_eliminate_eq(type, &e1, &e2->left.expr);
135 __expr_eliminate_eq(type, &e1, &e2->right.expr);
159 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
171 int expr_eq(struct expr *e1, struct expr *e2)
184 return expr_eq(e1->left.expr, e2->left.expr);
210 struct expr *expr_eliminate_yn(struct expr *e)
212 struct expr *tmp;
216 e->left.expr = expr_eliminate_yn(e->left.expr);
217 e->right.expr = expr_eliminate_yn(e->right.expr);
218 if (e->left.expr->type == E_SYMBOL) {
219 if (e->left.expr->left.sym == &symbol_no) {
220 expr_free(e->left.expr);
221 expr_free(e->right.expr);
224 e->right.expr = NULL;
226 } else if (e->left.expr->left.sym == &symbol_yes) {
227 free(e->left.expr);
228 tmp = e->right.expr;
229 *e = *(e->right.expr);
234 if (e->right.expr->type == E_SYMBOL) {
235 if (e->right.expr->left.sym == &symbol_no) {
236 expr_free(e->left.expr);
237 expr_free(e->right.expr);
240 e->right.expr = NULL;
242 } else if (e->right.expr->left.sym == &symbol_yes) {
243 free(e->right.expr);
244 tmp = e->left.expr;
245 *e = *(e->left.expr);
252 e->left.expr = expr_eliminate_yn(e->left.expr);
253 e->right.expr = expr_eliminate_yn(e->right.expr);
254 if (e->left.expr->type == E_SYMBOL) {
255 if (e->left.expr->left.sym == &symbol_no) {
256 free(e->left.expr);
257 tmp = e->right.expr;
258 *e = *(e->right.expr);
261 } else if (e->left.expr->left.sym == &symbol_yes) {
262 expr_free(e->left.expr);
263 expr_free(e->right.expr);
266 e->right.expr = NULL;
270 if (e->right.expr->type == E_SYMBOL) {
271 if (e->right.expr->left.sym == &symbol_no) {
272 free(e->right.expr);
273 tmp = e->left.expr;
274 *e = *(e->left.expr);
277 } else if (e->right.expr->left.sym == &symbol_yes) {
278 expr_free(e->left.expr);
279 expr_free(e->right.expr);
282 e->right.expr = NULL;
296 struct expr *expr_trans_bool(struct expr *e)
304 e->left.expr = expr_trans_bool(e->left.expr);
305 e->right.expr = expr_trans_bool(e->right.expr);
325 struct expr *expr_join_or(struct expr *e1, struct expr *e2)
327 struct expr *tmp;
337 tmp = e1->left.expr;
344 if (e2->left.expr->type != E_SYMBOL)
346 sym2 = e2->left.expr->left.sym;
374 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
375 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
387 struct expr *expr_join_and(struct expr *e1, struct expr *e2)
389 struct expr *tmp;
399 tmp = e1->left.expr;
406 if (e2->left.expr->type != E_SYMBOL)
408 sym2 = e2->left.expr->left.sym;
473 static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
477 struct expr *tmp;
480 expr_eliminate_dups1(type, &e1->left.expr, &e2);
481 expr_eliminate_dups1(type, &e1->right.expr, &e2);
485 expr_eliminate_dups1(type, &e1, &e2->left.expr);
486 expr_eliminate_dups1(type, &e1, &e2->right.expr);
525 static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2)
529 struct expr *tmp, *tmp1, *tmp2;
532 expr_eliminate_dups2(type, &e1->left.expr, &e2);
533 expr_eliminate_dups2(type, &e1->right.expr, &e2);
537 expr_eliminate_dups2(type, &e1, &e2->left.expr);
538 expr_eliminate_dups2(type, &e1, &e2->right.expr);
581 struct expr *expr_eliminate_dups(struct expr *e)
605 struct expr *expr_transform(struct expr *e)
607 struct expr *tmp;
618 e->left.expr = expr_transform(e->left.expr);
619 e->right.expr = expr_transform(e->right.expr);
628 e->left.expr = expr_alloc_symbol(e->left.sym);
662 e->left.expr = expr_alloc_symbol(e->left.sym);
668 switch (e->left.expr->type) {
671 tmp = e->left.expr->left.expr;
672 free(e->left.expr);
680 tmp = e->left.expr;
687 tmp = e->left.expr;
689 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
691 tmp->right.expr = NULL;
696 tmp = e->left.expr;
698 e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
700 tmp->right.expr = NULL;
704 if (e->left.expr->left.sym == &symbol_yes) {
706 tmp = e->left.expr;
713 if (e->left.expr->left.sym == &symbol_mod) {
715 tmp = e->left.expr;
722 if (e->left.expr->left.sym == &symbol_no) {
724 tmp = e->left.expr;
742 int expr_contains_symbol(struct expr *dep, struct symbol *sym)
750 return expr_contains_symbol(dep->left.expr, sym) ||
751 expr_contains_symbol(dep->right.expr, sym);
759 return expr_contains_symbol(dep->left.expr, sym);
766 bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
773 return expr_depends_symbol(dep->left.expr, sym) ||
774 expr_depends_symbol(dep->right.expr, sym);
795 struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2)
797 struct expr *tmp = NULL;
806 struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2)
808 struct expr *tmp = NULL;
817 void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2)
822 expr_extract_eq(type, ep, &e1->left.expr, &e2);
823 expr_extract_eq(type, ep, &e1->right.expr, &e2);
827 expr_extract_eq(type, ep, ep1, &e2->left.expr);
828 expr_extract_eq(type, ep, ep1, &e2->right.expr);
846 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym)
848 struct expr *e1, *e2;
858 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
859 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
868 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
869 e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
878 return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym);
906 tristate expr_calc_value(struct expr *e)
919 val1 = expr_calc_value(e->left.expr);
920 val2 = expr_calc_value(e->right.expr);
923 val1 = expr_calc_value(e->left.expr);
924 val2 = expr_calc_value(e->right.expr);
927 val1 = expr_calc_value(e->left.expr);
975 void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken)
993 expr_print(e->left.expr, fn, data, E_NOT);
1006 expr_print(e->left.expr, fn, data, E_OR);
1008 expr_print(e->right.expr, fn, data, E_OR);
1011 expr_print(e->left.expr, fn, data, E_AND);
1013 expr_print(e->right.expr, fn, data, E_AND);
1016 if (e->left.expr) {
1017 expr_print(e->left.expr, fn, data, E_CHOICE);
1039 void expr_fprint(struct expr *e, FILE *out)
1044 void print_expr(int mask, struct expr *e, int prevtoken)