Skip to content

Instantly share code, notes, and snippets.

@chanwit
Created June 21, 2009 21:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chanwit/133661 to your computer and use it in GitHub Desktop.
Save chanwit/133661 to your computer and use it in GitHub Desktop.
// Fib.groovy
package g7.tests.classgen
class Fib {
static fib(n) {
if(n < 2)
n
else
fib(n-1) + fib(n-2)
}
static void main(args){
println fib(5)
println fib(10)
println fib(15)
println fib(20)
println fib(25)
println fib(30)
println fib(35)
}
}
// run 'ant test' to make test cases generate some .class files
$ ant clean && ant test
// command to run on Cygwin
$ java -Xms512M -Xmx512M -cp ".;./target/classes" -Xint -XX:+EnableInvokeDynamic g7.tests.classgen.Fib
//
// Here's the disassemble of Fib.class
//
// class version 51.0 (51)
// access flags 1
public class g7/tests/classgen/Fib {
// compiled from: Fib.groovy
// access flags 9
public static fib(Ljava/lang/Object;)Ljava/lang/Object;
L0
ALOAD 0
ICONST_2
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.__lt__(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
CHECKCAST java/lang/Boolean
INVOKEVIRTUAL java/lang/Boolean.booleanValue()Z
IFEQ L1
ALOAD 0
GOTO L2
L1
ALOAD 0
ICONST_1
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.minus(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
ALOAD 0
ICONST_2
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.minus(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.plus(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
L2
ARETURN
L3
LOCALVARIABLE n Ljava/lang/Object; L0 L3 0
MAXSTACK = 3
MAXLOCALS = 1
// access flags 9
public static main([Ljava/lang/String;)V
L0
ACONST_NULL
ICONST_5
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 10
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 15
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 20
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 25
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 30
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
ACONST_NULL
BIPUSH 35
INVOKESTATIC java/lang/Integer.valueOf(I)Ljava/lang/Integer;
INVOKEDYNAMIC java/lang/dyn/Dynamic.static:g7|tests|classgen|Fib:fib(Ljava/lang/Object;)Ljava/lang/Object;
INVOKEDYNAMIC java/lang/dyn/Dynamic.println(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
POP
RETURN
L1
LOCALVARIABLE args [Ljava/lang/String; L0 L1 0
MAXSTACK = 2
MAXLOCALS = 1
// access flags 8
static <clinit>()V
LDC Lg7/tests/classgen/Fib;.class
INVOKESTATIC com/chanwit/g7/runtime/G7Bootstrap.registerBootstrap(Ljava/lang/Class;)V
RETURN
MAXSTACK = 1
MAXLOCALS = 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment