#include "fix-expr.hh" #include "expr.hh" ATerm bottomupRewrite(TermFun & f, ATerm e) { e = f(e); if (ATgetType(e) == AT_APPL) { AFun fun = ATgetAFun(e); int arity = ATgetArity(fun); ATermList args = ATempty; for (int i = arity - 1; i >= 0; i--) args = ATinsert(args, bottomupRewrite(f, ATgetArgument(e, i))); return (ATerm) ATmakeApplList(fun, args); } if (ATgetType(e) == AT_LIST) { ATermList in = (ATermList) e; ATermList out = ATempty; while (!ATisEmpty(in)) { out = ATinsert(out, bottomupRewrite(f, ATgetFirst(in))); in = ATgetNext(in); } return (ATerm) ATreverse(out); } return e; }