Commit f76025f4 authored by Jan Maria Matejka's avatar Jan Maria Matejka
Browse files

Filter: Make the IF instruction three-args

Dropping another old quirk.
parent 13c0be19
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -996,12 +996,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" );
+5 −6
Original line number Diff line number Diff line
@@ -898,14 +898,13 @@ interpret(struct f_inst *what)
    ARG_ANY(1);
    val_format(v1, &f_buf);
    break;
  case FI_CONDITION:	/* ? has really strange error value, so we can implement if ... else nicely :-) */
  case FI_CONDITION:
    ARG(1, T_BOOL);
    if (v1.val.i) {
      ARG_ANY(2);
      res.val.i = 0;
    } else
      res.val.i = 1;
    res.type = T_BOOL;
    } else {
      ARG_ANY(3);
    }
    break;
  case FI_NOP:
    debug( "No operation\n" );
@@ -1670,7 +1669,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: