MCPcopy Create free account
hub / github.com/Entware/Entware / expr_transform

Function expr_transform

scripts/config/expr.c:694–849  ·  view source on GitHub ↗

* Performs various simplifications involving logical operators and * comparisons. * * Allocates and returns a new expression. */

Source from the content-addressed store, hash-verified

692 * Allocates and returns a new expression.
693 */
694struct expr *expr_transform(struct expr *e)
695{
696 struct expr *tmp;
697
698 if (!e)
699 return NULL;
700 switch (e->type) {
701 case E_EQUAL:
702 case E_GEQ:
703 case E_GTH:
704 case E_LEQ:
705 case E_LTH:
706 case E_UNEQUAL:
707 case E_SYMBOL:
708 case E_LIST:
709 break;
710 default:
711 e->left.expr = expr_transform(e->left.expr);
712 e->right.expr = expr_transform(e->right.expr);
713 }
714
715 switch (e->type) {
716 case E_EQUAL:
717 if (e->left.sym->type != S_BOOLEAN)
718 break;
719 if (e->right.sym == &symbol_no) {
720 e->type = E_NOT;
721 e->left.expr = expr_alloc_symbol(e->left.sym);
722 e->right.sym = NULL;
723 break;
724 }
725 if (e->right.sym == &symbol_mod) {
726 printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name);
727 e->type = E_SYMBOL;
728 e->left.sym = &symbol_no;
729 e->right.sym = NULL;
730 break;
731 }
732 if (e->right.sym == &symbol_yes) {
733 e->type = E_SYMBOL;
734 e->right.sym = NULL;
735 break;
736 }
737 break;
738 case E_UNEQUAL:
739 if (e->left.sym->type != S_BOOLEAN)
740 break;
741 if (e->right.sym == &symbol_no) {
742 e->type = E_SYMBOL;
743 e->right.sym = NULL;
744 break;
745 }
746 if (e->right.sym == &symbol_mod) {
747 printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name);
748 e->type = E_SYMBOL;
749 e->left.sym = &symbol_yes;
750 e->right.sym = NULL;
751 break;

Callers 1

menu_finalizeFunction · 0.85

Calls 2

expr_alloc_symbolFunction · 0.85
expr_alloc_oneFunction · 0.85

Tested by

no test coverage detected