// Despite much work, this is still such garbage.
class Fibonacci(Print,Input,Stop,FibLhs,FibRhs) extends Program {
FibLhs fl;
Print p;
Input i;
method continue(Passive accumulator) {
p = new Print(Continuation);
p.next = new Stop();
fl = new FibLhs(FibLhs,FibRhs);
fl.next = p
i = new Input(Continuation);
i.next = fl;
goto i.continue(accumulator);
}
}
class FibLhs(FibLhs,FibRhs) extends Continuation {
Continuation next;
FibLhs fl;
FibRhs fr;
method continue(Passive accumulator) {
i = new IfOneOrZero()
cw = new ContinueWithOne()
cw.next = next
i.trueBranch = cw
i.falseBranch =
fl = new FibLhs(FibLhs,FibRhs)
fr = new FibRhs(FibLhs,FibRhs)
fr.value = n - 2
fr.next = next
fl.next = fr
goto f.continue(n - 1)
}
}
class FibRhs(Continuation,Passive,Add,Fib) extends Continuation {
Continuation next;
Passive arg;
method continue(Passive accumulator) {
a = new Add(~,~)
a.next = next
a.lhs = accumulator
f = new Fib(~,~,~,~)
f.next = a
goto f.continue(arg);
}
}
class ContinueWithOne() extends Continuation {
Continuation next;
method continue(Passive accumulator) {
goto next.continue(1);
}
}