Skip to content

keiSunagawa/jvm-lang-example

Repository files navigation

sample code

(defun f (x y)
  (plus x (plus 1 y)))

(let z (f 1 2))
(printN (f z 1))

JVM byte code

.class public JispCode
.super java/lang/Object
.method public <init>()V
    aload_0
    invokenonvirtual java/lang/Object/<init>()V
    return
.end method
.method public static plus(JJ)J
    .limit stack 10
    .limit locals 10
    lload 0
    lload 2
    ladd 
    lreturn
.end method
.method public static printN(J)V
    .limit stack 10
    .limit locals 10
    getstatic java/lang/System/out Ljava/io/PrintStream;
    lload 0
    invokevirtual java/io/PrintStream/println(J)V
    return
.end method
.method public static f(JJ)J
    .limit stack 10
    .limit locals 10
    lload 0
    ldc2_w 1
    lload 2
    invokestatic JispCode/plus(JJ)J
    invokestatic JispCode/plus(JJ)J
    lreturn
.end method
.method public static main([Ljava/lang/String;)V
    .limit stack 10
    .limit locals 10
    ldc2_w 1
    ldc2_w 2
    invokestatic JispCode/f(JJ)J
    lstore 0
    lload 0
    ldc2_w 1
    invokestatic JispCode/f(JJ)J
    invokestatic JispCode/printN(J)V
    return
.end method