chanwit (owner)

Revisions

  • 252ca2 chanwit Mon Jun 22 09:32:01 -0700 2009
  • e726ba chanwit Sun Jun 21 14:45:36 -0700 2009
gist: 133661 Download_button fork
public
Public Clone URL: git://gist.github.com/133661.git
Embed All Files: show embed
Text only #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// 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
}