Commit 7c601e6b authored by Jan Maria Matejka's avatar Jan Maria Matejka
Browse files

Filter: recursion to loop

It was supposed to do tail-recursion in interpret() but it didn't
compile as such. Converting it to loop makes a significant filter
performance improvement for flat filters.
parent 5a14df39
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -633,15 +633,13 @@ static struct f_val
interpret(struct f_inst *what)
{
  struct symbol *sym;
  struct f_val v1, v2, res, *vp;
  struct f_val v1, v2, res = { .type = T_VOID }, *vp;
  unsigned u1, u2;
  int i;
  u32 as;

  for ( ; what; what = what->next) {
  res.type = T_VOID;
  if (!what)
    return res;

  switch(what->fi_code) {
  case FI_COMMA:
    TWOARGS;
@@ -1510,9 +1508,7 @@ interpret(struct f_inst *what)

  default:
    bug( "Unknown instruction %d (%c)", what->fi_code, what->fi_code & 0xff);
  }
  if (what->next)
    return interpret(what->next);
  }}
  return res;
}