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)
)
)
);