Commit 369efe5b authored by Maria Matejka's avatar Maria Matejka
Browse files

Filter refactoring: Converted condition to three-args instruction

parent d9da5884
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -559,7 +559,7 @@ filter:

where_filter:
   WHERE term {
     /* Construct 'IF term THEN ACCEPT; REJECT;' */
     /* Construct 'IF term THEN { ACCEPT; } ELSE { REJECT; }' */
     struct filter *f = cfg_alloc(sizeof(struct filter));
     struct f_inst *i, *acc, *rej;
     acc = f_new_inst(FI_PRINT_AND_DIE);	/* ACCEPT */
@@ -571,7 +571,7 @@ where_filter:
     i = f_new_inst(FI_CONDITION);			/* IF */
     i->a1.p = $2;
     i->a2.p = acc;
     i->next = rej;
     i->a3.p = rej;
     f->name = NULL;
     f->root = i;
     $$ = f;
@@ -1005,12 +1005,10 @@ cmd:
     $$->a2.p = $4;
   }
 | IF term THEN block ELSE block {
     struct f_inst *i = f_new_inst(FI_CONDITION);
     i->a1.p = $2;
     i->a2.p = $4;
     $$ = f_new_inst(FI_CONDITION);
     $$->a1.p = i;
     $$->a2.p = $6;
     $$->a1.p = $2;
     $$->a2.p = $4;
     $$->a3.p = $6;
   }
 | SYM '=' term ';' {
     DBG( "Ook, we'll set value\n" );
+6 −8
Original line number Diff line number Diff line
@@ -259,14 +259,12 @@
    ARG_ANY(1);
    val_format(v1, &fs->buf);
    break;
  case FI_CONDITION:	/* ? has really strange error value, so we can implement if ... else nicely :-) */
    ARG(1, T_BOOL);
    if (v1.val.i) {
      ARG_ANY(2);
      res.val.i = 0;
    } else
      res.val.i = 1;
    res.type = T_BOOL;
  case FI_CONDITION:
    ARG_T(1, 0, T_BOOL);
    if (res.val.i)
      ARG_ANY_T(2,0);
    else
      ARG_ANY_T(3,0);
    break;
  case FI_NOP:
    debug( "No operation\n" );
+1 −1
Original line number Diff line number Diff line
@@ -793,7 +793,7 @@ i_same(struct f_inst *f1, struct f_inst *f2)
      return 0;
    break;
  case FI_PRINT: case FI_LENGTH: ONEARG; break;
  case FI_CONDITION: TWOARGS; break;
  case FI_CONDITION: THREEARGS; break;
  case FI_NOP: case FI_EMPTY: break;
  case FI_PRINT_AND_DIE: ONEARG; A2_SAME; break;
  case FI_PREF_GET: