--- /dev/null
+#include "loopDetector.hh"
+#include "ppbox.hh"
+
+bool loopDetector::detect(Tree t)
+{
+ fPhase++;
+ int w = fPhase%fBuffersize;
+ fBuffer[w] = t;
+ if ((fPhase%fCheckperiod) == 0) {
+ // time to check for a cycle
+ for (int i=1; i<fBuffersize; i++) {
+ int r = w-i; if (r < 0) { r += fBuffersize; }
+ assert(r>=0);
+ assert(r<fBuffersize);
+ assert(r != w);
+ if (fBuffer[r] == t) {
+ cerr << "ERROR : after "
+ << fPhase
+ << " evaluation steps, the compiler has detected an endless evaluation cycle of "
+ << i
+ << " steps"
+ << endl;
+ exit(1);
+ }
+ }
+ }
+ return false;
+}