+#else
+#define NR 100
+
+/*
+ * Deliberately avoids recursion -- use this version on machines with
+ * expensive procedure calls.
+ */
+walkf(t, f)
+ register NODE *t;
+ register int (*f)();
+{
+ register int i = 1;
+ register int opty = optype(t->in.op);
+ static NODE *at[NR];
+ static int ao[NR];
+
+#define PUSH(dir, state) \
+ (ao[i] = state, at[i++] = t, t = t->in.dir, opty = optype(t->in.op))
+#define POP() \
+ (opty = ao[--i], t = at[i])
+
+ do {
+ switch (opty) {
+ case LTYPE: (*f)(t); POP(); break;
+ case UTYPE: PUSH(left, LTYPE); break;
+ case BITYPE: PUSH(left, BITYPE+1); break;
+ case BITYPE+1: PUSH(right, LTYPE); break;
+ default:
+ cerror("bad op type in walkf");
+ }
+ if (i >= NR) {
+ walkf(t, f);
+ POP();
+ }
+ } while (i > 0);
+}
+#undef NR
+#undef PUSH
+#undef POP
+#endif