Created
June 21, 2009 21:45
-
-
Save chanwit/133661 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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