Section 42
Want more of a challenge? View in iconic form (experimental)



       # JAVA class translation 'COS_JavaTest'
       # Sun Jan 23 22:17:30 EST 2005
       # Produced by Fritzifier, based on JasminVisitor
       # Using BCEL library to read Java bytecode
       # Here is the original code:
       # public class COS_JavaTest {
       #     private int q = 0;
       #     public int add(int x, int y) {
       #         return x+y;
       #     }
       #     public int sub(int x, int y) {
       #         return x-y;
       #     }
       #     public int mult(int x, int y) {
       #         return x*y;
       #     }
       #     public int addmult(int x, int y, int z) {
       #         return add(x,mult(y,z));
       #     }
       #     public void set(int x) {
       #         q = x;
       #     }
       #     public int get() {
       #         return q;
       #     }
       #     public int fact(int x) {
       #         return (x>0)?(x*fact(sub(x,1))):1;
       #     }
       # }
       
[hear] (class COS_JavaTest ()
          (field super ((java lang Object) new))
          (method unknown (lambda (x) (super (x))))
          (field q ((int) new))
          (method <init>
            (lambda () /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm aload 0))
                ((= (x) 1) (jvm invokespecial <init> 0 0))
                ((= (x) 2) (jvm aload 0))
                ((= (x) 3) (jvm iconst 0))
                ((= (x) 4) (jvm putfield q (int)))
                ((= (x) 5) (jvm return))
                (jvm return))
          )
          (method add
            (lambda (arg0 arg1) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm iload 1))
                ((= (x) 1) (jvm iload 2))
                ((= (x) 2) (jvm iadd))
                ((= (x) 3) (jvm ireturn))
                (jvm return))
          )
          (method sub
            (lambda (arg0 arg1) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm iload 1))
                ((= (x) 1) (jvm iload 2))
                ((= (x) 2) (jvm isub))
                ((= (x) 3) (jvm ireturn))
                (jvm return))
          )
          (method mult
            (lambda (arg0 arg1) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm iload 1))
                ((= (x) 1) (jvm iload 2))
                ((= (x) 2) (jvm imul))
                ((= (x) 3) (jvm ireturn))
                (jvm return))
          )
          (method addmult
            (lambda (arg0 arg1 arg2) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)) (pair 3 (arg2)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm aload 0))
                ((= (x) 1) (jvm iload 1))
                ((= (x) 2) (jvm aload 0))
                ((= (x) 3) (jvm iload 2))
                ((= (x) 4) (jvm iload 3))
                ((= (x) 5) (jvm invokevirtual mult 2 1))
                ((= (x) 6) (jvm invokevirtual add 2 1))
                ((= (x) 7) (jvm ireturn))
                (jvm return))
          )
          (method set
            (lambda (arg0) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm aload 0))
                ((= (x) 1) (jvm iload 1))
                ((= (x) 2) (jvm putfield q (int)))
                ((= (x) 3) (jvm return))
                (jvm return))
          )
          (method get
            (lambda () /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm aload 0))
                ((= (x) 1) (jvm getfield q (int)))
                ((= (x) 2) (jvm ireturn))
                (jvm return))
          )
          (method fact
            (lambda (arg0) /
             let ((vars / cell new / make-hash / vector
                           (pair 0 (self)) (pair 1 (arg0)))
                  (stack / cell new / vector)) /
             state-machine (vars) (stack) / ? jvm / ? x / cond
                ((= (x) 0) (jvm iload 1))
                ((= (x) 1) (jvm ifle 11))
                ((= (x) 2) (jvm iload 1))
                ((= (x) 3) (jvm aload 0))
                ((= (x) 4) (jvm aload 0))
                ((= (x) 5) (jvm iload 1))
                ((= (x) 6) (jvm iconst 1))
                ((= (x) 7) (jvm invokevirtual sub 2 1))
                ((= (x) 8) (jvm invokevirtual fact 1 1))
                ((= (x) 9) (jvm imul))
                ((= (x) 10) (jvm goto 12))
                ((= (x) 11) (jvm iconst 1))
                ((= (x) 12) (jvm ireturn))
                (jvm return))
          )
        );