148      l"$loop_end", env1)  | 
   148      l"$loop_end", env1)  | 
   149   }  | 
   149   }  | 
   150   case Write(x) =>   | 
   150   case Write(x) =>   | 
   151     (i"iload ${env(x)} \t\t; $x" ++  | 
   151     (i"iload ${env(x)} \t\t; $x" ++  | 
   152      i"invokestatic XXX/XXX/write(I)V", env)  | 
   152      i"invokestatic XXX/XXX/write(I)V", env)  | 
   153   case Read(x) => { | 
   153   //case Read(x) => { | 
   154     val index = env.getOrElse(x, env.keys.size)   | 
   154   //  val index = env.getOrElse(x, env.keys.size)   | 
   155     (i"invokestatic XXX/XXX/read()I" ++   | 
   155   //  (i"invokestatic XXX/XXX/read()I" ++   | 
   156      i"istore $index \t\t; $x", env + (x -> index))  | 
   156   //   i"istore $index \t\t; $x", env + (x -> index))  | 
   157   }  | 
   157   //}  | 
   158 }  | 
   158 }  | 
   159   | 
   159   | 
   160 // compilation of a block (i.e. list of instructions)  | 
   160 // compilation of a block (i.e. list of instructions)  | 
   161 def compile_block(bl: Block, env: Env) : (String, Env) = bl match { | 
   161 def compile_block(bl: Block, env: Env) : (String, Env) = bl match { | 
   162   case Nil => ("", env) | 
   162   case Nil => ("", env) | 
   177   | 
   177   | 
   178   | 
   178   | 
   179   | 
   179   | 
   180 // Fibonacci numbers as a bare-bone test-case  | 
   180 // Fibonacci numbers as a bare-bone test-case  | 
   181 val fib_test =   | 
   181 val fib_test =   | 
   182   List(Assign("n", Num(9)),            //  n := 10;                      | 
   182   List(Assign("n", Num(9)),            //  n := 9;                      | 
   183        Assign("minus1",Num(0)),         //  minus1 := 0; | 
   183        Assign("minus1",Num(0)),         //  minus1 := 0; | 
   184        Assign("minus2",Num(1)),         //  minus2 := 1; | 
   184        Assign("minus2",Num(1)),         //  minus2 := 1; | 
   185        Assign("temp",Num(0)),           //  temp := 0; | 
   185        Assign("temp",Num(0)),           //  temp := 0; | 
   186        While(Bop("<",Num(0),Var("n")),  //  while n > 0 do  { | 
   186        While(Bop("<",Num(0),Var("n")),  //  while 0 < n do  { | 
   187           List(Assign("temp",Var("minus2")), //  temp := minus2; | 
   187           List(Assign("temp",Var("minus2")), //  temp := minus2; | 
   188                Assign("minus2",Aop("+",Var("minus1"),Var("minus2"))),  | 
   188                Assign("minus2",Aop("+",Var("minus1"),Var("minus2"))),  | 
   189                                         //  minus2 := minus1 + minus2;  | 
   189                                         //  minus2 := minus1 + minus2;  | 
   190                Assign("minus1",Var("temp")), //  minus1 := temp; | 
   190                Assign("minus1",Var("temp")), //  minus1 := temp; | 
   191                Assign("n",Aop("-",Var("n"),Num(1))))), //  n := n - 1 }; | 
   191                Assign("n",Aop("-",Var("n"),Num(1))))), //  n := n - 1 }; |