/* tests nested method calls */
public class secretB {

   public static void outStr(java.lang.String s) {
     java.io.PrintStream ps;
     ps = java.lang.System::out : java.io.PrintStream;
     (ps)->print : void (s);
   }
   public static void outStrln(java.lang.String s) {
     java.io.PrintStream ps;
     ps = java.lang.System::out : java.io.PrintStream;
     (ps)->println : void (s);
   }
   public static void outInt(int n) {
     java.io.PrintStream ps;
     ps = java.lang.System::out : java.io.PrintStream;
     (ps)->print : void (n);
   }

   public static int computeFib(int x) {
      secretB::outStr : void ("Computing fib of ");
      secretB::outInt : void (x);
      int ans;
      ans = secretB::fib : int (x);
      secretB::outStr : void (" is ");
      secretB::outInt : void (ans);
      secretB::outStrln : void ("");
      return ans;
   }
   public static int fib(int x) {
      if (x==0) return 0;
      else if (x==1) return 1;
      else return 
         secretB::fib : int (x-1) +
         secretB::fib : int (x-2);
   }
   public static void main431() {
     int i;
     i = 1;
     secretB::outStrln : void ("CS431 nested method call test");
     while ( i < 6) {
        int gobble;
        gobble = secretB::computeFib : int 
          (
           1 + secretB::computeFib : int (i-1) + 
               secretB::computeFib : int (i+2)
          );
          secretB::outStr : void ("gobble ");
          secretB::outInt : void (gobble);
          secretB::outStrln : void ("");
        i = i + 1;
     }
   }
}
