/*
* The Computer Language Benchmarks Game
* http://shootout.alioth.debian.org/
*
* contributed by Jochen Hinrichsen
* modified by Marko Kocic
*/
final class TreeNode {
private final left, right, item
TreeNode(item) {
this.item = item
}
private static bottomUpTree(item, depth) {
if (depth > 0) {
return new TreeNode(
bottomUpTree(2*item-1, depth-1),
bottomUpTree(2*item, depth-1),
item
)
} else {
return new TreeNode(item)
}
}
TreeNode(left, right, item) {
this.left = left
this.right = right
this.item = item
}
private itemCheck() {
// if necessary deallocate here
if (left == null) return item
else return item + left.itemCheck() - right.itemCheck()
}
}
def n = (args.length == 0) ? 10 : args[0].toInteger()
def minDepth = 4
def maxDepth = [minDepth + 2, n].max()
def stretchDepth = maxDepth + 1
def check = (TreeNode.bottomUpTree(0, stretchDepth)).itemCheck()
println "stretch tree of depth ${stretchDepth}\t check: ${check}"
def longLivedTree = TreeNode.bottomUpTree(0, maxDepth)
def depth = minDepth
while (depth <= maxDepth) {
def iterations = 1 << (maxDepth - depth + minDepth)
check = 0
for (i in 1..iterations) {
check += (TreeNode.bottomUpTree(i, depth)).itemCheck()
check += (TreeNode.bottomUpTree(-i,depth)).itemCheck()
}
println "${iterations*2}\t trees of depth ${depth}\t check: ${check}"
depth += 2
}
println "long lived tree of depth ${maxDepth}\t check: ${longLivedTree.itemCheck()}"
Groovyc (Legacy)
Compiled from "binarytrees.groovy"
public class binarytrees extends groovy.lang.Script {
public static transient boolean __$stMC;
public binarytrees();
Code:
0: aload_0
1: invokespecial #13 // Method groovy/lang/Script."<init>":()V
4: invokestatic #17 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
7: astore_1
8: return
public binarytrees(groovy.lang.Binding);
Code:
0: invokestatic #17 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_2
4: aload_0
5: aload_1
6: invokespecial #22 // Method groovy/lang/Script."<init>":(Lgroovy/lang/Binding;)V
9: return
public static void main(java.lang.String...);
Code:
0: invokestatic #17 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: aload_1
5: ldc #27 // int 0
7: aaload
8: ldc #29 // class org/codehaus/groovy/runtime/InvokerHelper
10: ldc #2 // class binarytrees
12: aload_0
13: invokeinterface #35, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
18: pop
19: return
public java.lang.Object run();
Code:
0: invokestatic #17 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: aload_1
5: ldc #40 // int 1
7: aaload
8: aload_1
9: ldc #41 // int 2
11: aaload
12: aload_0
13: invokeinterface #45, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
18: invokeinterface #48, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
23: iconst_0
24: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
27: invokestatic #60 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
30: ifeq 41
33: bipush 10
35: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
38: goto 73
41: aload_1
42: ldc #61 // int 3
44: aaload
45: aload_1
46: ldc #62 // int 4
48: aaload
49: aload_1
50: ldc #63 // int 5
52: aaload
53: aload_0
54: invokeinterface #45, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
59: iconst_0
60: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
63: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
68: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
73: astore_2
74: aload_2
75: pop
76: iconst_4
77: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
80: astore_3
81: aload_3
82: pop
83: aload_1
84: ldc #69 // int 6
86: aaload
87: iconst_2
88: anewarray #71 // class java/lang/Object
91: dup
92: iconst_0
93: aload_1
94: ldc #72 // int 7
96: aaload
97: aload_3
98: iconst_2
99: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
102: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
107: aastore
108: dup
109: iconst_1
110: aload_2
111: aastore
112: invokestatic #76 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
115: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
120: astore 4
122: aload 4
124: pop
125: aload_1
126: ldc #77 // int 8
128: aaload
129: aload 4
131: iconst_1
132: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
135: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
140: astore 5
142: aload 5
144: pop
145: aload_1
146: ldc #78 // int 9
148: aaload
149: aload_1
150: ldc #79 // int 10
152: aaload
153: ldc #81 // class TreeNode
155: iconst_0
156: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
159: aload 5
161: invokeinterface #35, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
166: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
171: astore 6
173: aload 6
175: pop
176: aload_1
177: ldc #82 // int 11
179: aaload
180: aload_0
181: new #84 // class org/codehaus/groovy/runtime/GStringImpl
184: dup
185: iconst_2
186: anewarray #71 // class java/lang/Object
189: dup
190: iconst_0
191: aload 5
193: aastore
194: dup
195: iconst_1
196: aload 6
198: aastore
199: iconst_3
200: anewarray #86 // class java/lang/String
203: dup
204: iconst_0
205: ldc #88 // String stretch tree of depth
207: aastore
208: dup
209: iconst_1
210: ldc #90 // String \t check:
212: aastore
213: dup
214: iconst_2
215: ldc #92 // String
217: aastore
218: invokespecial #95 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
221: invokeinterface #99, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
226: pop
227: aload_1
228: ldc #100 // int 12
230: aaload
231: ldc #81 // class TreeNode
233: iconst_0
234: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
237: aload 4
239: invokeinterface #35, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
244: astore 7
246: aload 7
248: pop
249: aload_3
250: astore 8
252: aload 8
254: pop
255: aload 8
257: aload 4
259: invokestatic #103 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
262: ifeq 551
265: aload_1
266: ldc #104 // int 13
268: aaload
269: iconst_1
270: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
273: aload_1
274: ldc #105 // int 14
276: aaload
277: aload_1
278: ldc #106 // int 15
280: aaload
281: aload 4
283: aload 8
285: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
290: aload_3
291: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
296: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
301: astore 9
303: aload 9
305: pop
306: iconst_0
307: istore 10
309: iload 10
311: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
314: astore 6
316: iload 10
318: pop
319: aconst_null
320: astore 11
322: aload_1
323: ldc #107 // int 16
325: aaload
326: iconst_1
327: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
330: aload 9
332: ldc #40 // int 1
334: invokestatic #111 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
337: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
342: ldc #113 // class java/util/Iterator
344: invokestatic #117 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
347: checkcast #113 // class java/util/Iterator
350: astore 12
352: aload 12
354: invokeinterface #121, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
359: ifeq 455
362: aload 12
364: invokeinterface #124, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
369: astore 11
371: aload_1
372: ldc #125 // int 17
374: aaload
375: aload 6
377: aload_1
378: ldc #126 // int 18
380: aaload
381: aload_1
382: ldc #127 // int 19
384: aaload
385: ldc #81 // class TreeNode
387: aload 11
389: aload 8
391: invokeinterface #35, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
396: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
401: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
406: dup
407: astore 6
409: pop
410: aload_1
411: ldc #128 // int 20
413: aaload
414: aload 6
416: aload_1
417: ldc #129 // int 21
419: aaload
420: aload_1
421: ldc #130 // int 22
423: aaload
424: ldc #81 // class TreeNode
426: aload 11
428: invokestatic #133 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.unaryMinus:(Ljava/lang/Object;)Ljava/lang/Object;
431: aload 8
433: invokeinterface #35, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
438: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
443: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
448: dup
449: astore 6
451: pop
452: goto 352
455: aload_1
456: ldc #134 // int 23
458: aaload
459: aload_0
460: new #84 // class org/codehaus/groovy/runtime/GStringImpl
463: dup
464: iconst_3
465: anewarray #71 // class java/lang/Object
468: dup
469: iconst_0
470: aload_1
471: ldc #135 // int 24
473: aaload
474: aload 9
476: iconst_2
477: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
480: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
485: aastore
486: dup
487: iconst_1
488: aload 8
490: aastore
491: dup
492: iconst_2
493: aload 6
495: aastore
496: iconst_4
497: anewarray #86 // class java/lang/String
500: dup
501: iconst_0
502: ldc #92 // String
504: aastore
505: dup
506: iconst_1
507: ldc #137 // String \t trees of depth
509: aastore
510: dup
511: iconst_2
512: ldc #90 // String \t check:
514: aastore
515: dup
516: iconst_3
517: ldc #92 // String
519: aastore
520: invokespecial #95 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
523: invokeinterface #99, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
528: pop
529: aload_1
530: ldc #138 // int 25
532: aaload
533: aload 8
535: iconst_2
536: invokestatic #54 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
539: invokeinterface #66, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
544: dup
545: astore 8
547: pop
548: goto 255
551: aload_1
552: ldc #139 // int 26
554: aaload
555: aload_0
556: new #84 // class org/codehaus/groovy/runtime/GStringImpl
559: dup
560: iconst_2
561: anewarray #71 // class java/lang/Object
564: dup
565: iconst_0
566: aload 4
568: aastore
569: dup
570: iconst_1
571: aload_1
572: ldc #140 // int 27
574: aaload
575: aload 7
577: invokeinterface #68, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
582: aastore
583: iconst_3
584: anewarray #86 // class java/lang/String
587: dup
588: iconst_0
589: ldc #142 // String long lived tree of depth
591: aastore
592: dup
593: iconst_1
594: ldc #90 // String \t check:
596: aastore
597: dup
598: iconst_2
599: ldc #92 // String
601: aastore
602: invokespecial #95 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
605: invokeinterface #99, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
610: areturn
611: aconst_null
612: areturn
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #158 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class binarytrees
6: if_acmpeq 14
9: aload_0
10: invokestatic #162 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #164 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #158 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #170 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #164 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #173 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
}
Invoke Dynamic
Compiled from "binarytrees.groovy"
public class binarytrees extends groovy.lang.Script {
public static transient boolean __$stMC;
public binarytrees();
Code:
0: aload_0
1: invokespecial #13 // Method groovy/lang/Script."<init>":()V
4: return
public binarytrees(groovy.lang.Binding);
Code:
0: aload_0
1: aload_1
2: invokespecial #18 // Method groovy/lang/Script."<init>":(Lgroovy/lang/Binding;)V
5: return
public static void main(java.lang.String...);
Code:
0: ldc #24 // class org/codehaus/groovy/runtime/InvokerHelper
2: ldc #2 // class binarytrees
4: aload_0
5: invokedynamic #38, 0 // InvokeDynamic #0:invoke:(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/String;)Ljava/lang/Object;
10: pop
11: return
public java.lang.Object run();
Code:
0: aload_0
1: invokedynamic #48, 0 // InvokeDynamic #1:getProperty:(Lbinarytrees;)Ljava/lang/Object;
6: invokedynamic #53, 0 // InvokeDynamic #2:getProperty:(Ljava/lang/Object;)Ljava/lang/Object;
11: iconst_0
12: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
15: invokestatic #65 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
18: ifeq 29
21: bipush 10
23: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
26: goto 46
29: aload_0
30: invokedynamic #48, 0 // InvokeDynamic #1:getProperty:(Lbinarytrees;)Ljava/lang/Object;
35: iconst_0
36: invokedynamic #70, 0 // InvokeDynamic #3:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
41: invokedynamic #74, 0 // InvokeDynamic #4:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
46: astore_1
47: aload_1
48: pop
49: iconst_4
50: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
53: astore_2
54: aload_2
55: pop
56: iconst_2
57: anewarray #76 // class java/lang/Object
60: dup
61: iconst_0
62: aload_2
63: iconst_2
64: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
69: aastore
70: dup
71: iconst_1
72: aload_1
73: aastore
74: invokestatic #83 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
77: invokedynamic #88, 0 // InvokeDynamic #6:invoke:(Ljava/util/List;)Ljava/lang/Object;
82: astore_3
83: aload_3
84: pop
85: aload_3
86: iconst_1
87: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
92: astore 4
94: aload 4
96: pop
97: ldc #90 // class TreeNode
99: iconst_0
100: aload 4
102: invokedynamic #95, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
107: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
112: astore 5
114: aload 5
116: pop
117: aload_0
118: new #100 // class org/codehaus/groovy/runtime/GStringImpl
121: dup
122: iconst_2
123: anewarray #76 // class java/lang/Object
126: dup
127: iconst_0
128: aload 4
130: aastore
131: dup
132: iconst_1
133: aload 5
135: aastore
136: iconst_3
137: anewarray #102 // class java/lang/String
140: dup
141: iconst_0
142: ldc #104 // String stretch tree of depth
144: aastore
145: dup
146: iconst_1
147: ldc #106 // String \t check:
149: aastore
150: dup
151: iconst_2
152: ldc #108 // String
154: aastore
155: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
158: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
163: pop
164: ldc #90 // class TreeNode
166: iconst_0
167: aload_3
168: invokedynamic #95, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
173: astore 6
175: aload 6
177: pop
178: aload_2
179: astore 7
181: aload 7
183: pop
184: aload 7
186: aload_3
187: invokestatic #120 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
190: ifeq 414
193: iconst_1
194: aload_3
195: aload 7
197: invokedynamic #125, 0 // InvokeDynamic #10:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
202: aload_2
203: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
208: invokedynamic #131, 0 // InvokeDynamic #11:invoke:(ILjava/lang/Object;)Ljava/lang/Object;
213: astore 8
215: aload 8
217: pop
218: iconst_0
219: istore 9
221: iload 9
223: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
226: astore 5
228: iload 9
230: pop
231: aconst_null
232: astore 10
234: iconst_1
235: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
238: aload 8
240: ldc #132 // int 1
242: invokestatic #136 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
245: invokedynamic #141, 0 // InvokeDynamic #12:invoke:(Lgroovy/lang/Range;)Ljava/lang/Object;
250: invokedynamic #147, 0 // InvokeDynamic #13:cast:(Ljava/lang/Object;)Ljava/util/Iterator;
255: astore 11
257: aload 11
259: invokeinterface #153, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
264: ifeq 336
267: aload 11
269: invokeinterface #156, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
274: astore 10
276: aload 5
278: ldc #90 // class TreeNode
280: aload 10
282: aload 7
284: invokedynamic #159, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
289: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
294: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
299: dup
300: astore 5
302: pop
303: aload 5
305: ldc #90 // class TreeNode
307: aload 10
309: invokestatic #162 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.unaryMinus:(Ljava/lang/Object;)Ljava/lang/Object;
312: aload 7
314: invokedynamic #159, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
319: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
324: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
329: dup
330: astore 5
332: pop
333: goto 257
336: aload_0
337: new #100 // class org/codehaus/groovy/runtime/GStringImpl
340: dup
341: iconst_3
342: anewarray #76 // class java/lang/Object
345: dup
346: iconst_0
347: aload 8
349: iconst_2
350: invokedynamic #165, 0 // InvokeDynamic #14:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
355: aastore
356: dup
357: iconst_1
358: aload 7
360: aastore
361: dup
362: iconst_2
363: aload 5
365: aastore
366: iconst_4
367: anewarray #102 // class java/lang/String
370: dup
371: iconst_0
372: ldc #108 // String
374: aastore
375: dup
376: iconst_1
377: ldc #167 // String \t trees of depth
379: aastore
380: dup
381: iconst_2
382: ldc #106 // String \t check:
384: aastore
385: dup
386: iconst_3
387: ldc #108 // String
389: aastore
390: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
393: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
398: pop
399: aload 7
401: iconst_2
402: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
407: dup
408: astore 7
410: pop
411: goto 184
414: aload_0
415: new #100 // class org/codehaus/groovy/runtime/GStringImpl
418: dup
419: iconst_2
420: anewarray #76 // class java/lang/Object
423: dup
424: iconst_0
425: aload_3
426: aastore
427: dup
428: iconst_1
429: aload 6
431: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
436: aastore
437: iconst_3
438: anewarray #102 // class java/lang/String
441: dup
442: iconst_0
443: ldc #169 // String long lived tree of depth
445: aastore
446: dup
447: iconst_1
448: ldc #106 // String \t check:
450: aastore
451: dup
452: iconst_2
453: ldc #108 // String
455: aastore
456: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
459: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
464: areturn
465: nop
466: athrow
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #187 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class binarytrees
6: if_acmpeq 14
9: aload_0
10: invokestatic #191 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #193 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #187 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #199 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #193 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #202 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
}
Static Compilation
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 41: [Static type checking] - The variable [args] is undeclared.
@ line 41, column 10.
def n = (args.length == 0) ? 10 : args[0].toInteger()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 41: [Static type checking] - The variable [args] is undeclared.
@ line 41, column 35.
def n = (args.length == 0) ? 10 : args[0].toInteger()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 44: [Static type checking] - Cannot find matching method java.lang.Object#plus(int). Please check if the declared type is right and if the method exists.
@ line 44, column 29.
def stretchDepth = maxDepth + 1
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 46: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 46, column 13.
def check = (TreeNode.bottomUpTree(0, stretchDepth)).itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 52: [Static type checking] - Cannot find matching method int#compareTo(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 52, column 8.
while (depth <= maxDepth) {
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 53: [Static type checking] - Cannot find matching method java.lang.Object#minus(int). Please check if the declared type is right and if the method exists.
@ line 53, column 37.
def iterations = 1 << (maxDepth - depth + minDepth)
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 53: [Static type checking] - Cannot find matching method java.lang.Object#plus(int). Please check if the declared type is right and if the method exists.
@ line 53, column 27.
def iterations = 1 << (maxDepth - depth + minDepth)
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 53: [Static type checking] - Cannot find matching method int#leftShift(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 53, column 24.
def iterations = 1 << (maxDepth - depth + minDepth)
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 56: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 56, column 18.
check += (TreeNode.bottomUpTree(i, depth)).itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 56: [Static type checking] - Cannot find matching method int#plus(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 56, column 9.
check += (TreeNode.bottomUpTree(i, depth)).itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 57: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 57, column 18.
check += (TreeNode.bottomUpTree(-i,depth)).itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 57: [Static type checking] - Cannot find matching method int#plus(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 57, column 9.
check += (TreeNode.bottomUpTree(-i,depth)).itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 64: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 64, column 57.
f depth ${maxDepth}\t check: ${longLived
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 17: [Static type checking] - Cannot find matching method java.lang.Object#compareTo(int). Please check if the declared type is right and if the method exists.
@ line 17, column 13.
if (depth > 0) {
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 19: [Static type checking] - Cannot find matching method int#multiply(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 19, column 35.
bottomUpTree(2*item-1, depth-1),
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 19: [Static type checking] - Cannot find matching method java.lang.Object#minus(int). Please check if the declared type is right and if the method exists.
@ line 19, column 44.
bottomUpTree(2*item-1, depth-1),
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 20: [Static type checking] - Cannot find matching method int#multiply(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 20, column 34.
bottomUpTree(2*item, depth-1),
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 20: [Static type checking] - Cannot find matching method java.lang.Object#minus(int). Please check if the declared type is right and if the method exists.
@ line 20, column 44.
bottomUpTree(2*item, depth-1),
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 37: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 37, column 28.
else return item + left.itemCheck() - right.itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 37: [Static type checking] - Cannot find matching method java.lang.Object#plus(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 37, column 26.
else return item + left.itemCheck() - right.itemCheck()
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 37: [Static type checking] - Cannot find matching method java.lang.Object#itemCheck(). Please check if the declared type is right and if the method exists.
@ line 37, column 47.
urn item + left.itemCheck() - right.item
^
/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/binarytrees.groovy: 37: [Static type checking] - Cannot find matching method java.lang.Object#minus(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 37, column 45.
eturn item + left.itemCheck() - right.it
^
22 errors
Groovyc (Legacy)
Compiled from "binarytrees.groovy"
public class binarytrees extends groovy.lang.Script {
public static transient boolean __$stMC;
public binarytrees();
Code:
0: aload_0
1: invokespecial #15 // Method groovy/lang/Script."<init>":()V
4: invokestatic #19 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
7: astore_1
8: return
public binarytrees(groovy.lang.Binding);
Code:
0: invokestatic #19 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_2
4: aload_0
5: aload_1
6: invokespecial #24 // Method groovy/lang/Script."<init>":(Lgroovy/lang/Binding;)V
9: return
public static void main(java.lang.String...);
Code:
0: invokestatic #19 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: aload_1
5: ldc #29 // int 0
7: aaload
8: ldc #31 // class org/codehaus/groovy/runtime/InvokerHelper
10: ldc #2 // class binarytrees
12: aload_0
13: invokeinterface #37, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
18: pop
19: return
public java.lang.Object run();
Code:
0: invokestatic #19 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: aload_1
5: ldc #42 // int 1
7: aaload
8: aload_1
9: ldc #43 // int 2
11: aaload
12: aload_0
13: invokeinterface #47, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
18: invokeinterface #50, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
23: iconst_0
24: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
27: invokestatic #62 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
30: ifeq 41
33: bipush 10
35: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
38: goto 73
41: aload_1
42: ldc #63 // int 3
44: aaload
45: aload_1
46: ldc #64 // int 4
48: aaload
49: aload_1
50: ldc #65 // int 5
52: aaload
53: aload_0
54: invokeinterface #47, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
59: iconst_0
60: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
63: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
68: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
73: astore_2
74: iconst_4
75: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
78: astore_3
79: aload_1
80: ldc #71 // int 6
82: aaload
83: iconst_2
84: anewarray #73 // class java/lang/Object
87: dup
88: iconst_0
89: aload_1
90: ldc #74 // int 7
92: aaload
93: aload_3
94: iconst_2
95: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
98: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
103: aastore
104: dup
105: iconst_1
106: aload_2
107: aastore
108: invokestatic #78 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
111: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
116: astore 4
118: aload_1
119: ldc #79 // int 8
121: aaload
122: aload 4
124: iconst_1
125: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
128: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
133: astore 5
135: aload_1
136: ldc #80 // int 9
138: aaload
139: aload_1
140: ldc #81 // int 10
142: aaload
143: ldc #83 // class TreeNode
145: iconst_0
146: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
149: aload 5
151: invokeinterface #37, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
156: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
161: astore 6
163: aload_1
164: ldc #84 // int 11
166: aaload
167: aload_0
168: new #86 // class org/codehaus/groovy/runtime/GStringImpl
171: dup
172: iconst_2
173: anewarray #73 // class java/lang/Object
176: dup
177: iconst_0
178: aload 5
180: aastore
181: dup
182: iconst_1
183: aload 6
185: aastore
186: iconst_3
187: anewarray #88 // class java/lang/String
190: dup
191: iconst_0
192: ldc #90 // String stretch tree of depth
194: aastore
195: dup
196: iconst_1
197: ldc #92 // String \t check:
199: aastore
200: dup
201: iconst_2
202: ldc #94 // String
204: aastore
205: invokespecial #97 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
208: invokeinterface #101, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
213: pop
214: aload_1
215: ldc #102 // int 12
217: aaload
218: ldc #83 // class TreeNode
220: iconst_0
221: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
224: aload 4
226: invokeinterface #37, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
231: astore 7
233: aload_3
234: astore 8
236: aload 8
238: aload 4
240: invokestatic #105 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
243: ifeq 520
246: aload_1
247: ldc #106 // int 13
249: aaload
250: iconst_1
251: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
254: aload_1
255: ldc #107 // int 14
257: aaload
258: aload_1
259: ldc #108 // int 15
261: aaload
262: aload 4
264: aload 8
266: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
271: aload_3
272: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
277: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
282: astore 9
284: iconst_0
285: istore 10
287: iload 10
289: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
292: astore 6
294: aconst_null
295: astore 11
297: aload_1
298: ldc #109 // int 16
300: aaload
301: iconst_1
302: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
305: aload 9
307: ldc #42 // int 1
309: invokestatic #113 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
312: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
317: ldc #115 // class java/util/Iterator
319: invokestatic #119 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
322: checkcast #115 // class java/util/Iterator
325: astore 12
327: aload 12
329: invokeinterface #123, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
334: ifeq 426
337: aload 12
339: invokeinterface #126, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
344: astore 11
346: aload_1
347: ldc #127 // int 17
349: aaload
350: aload 6
352: aload_1
353: ldc #128 // int 18
355: aaload
356: aload_1
357: ldc #129 // int 19
359: aaload
360: ldc #83 // class TreeNode
362: aload 11
364: aload 8
366: invokeinterface #37, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
371: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
376: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
381: astore 6
383: aload_1
384: ldc #130 // int 20
386: aaload
387: aload 6
389: aload_1
390: ldc #131 // int 21
392: aaload
393: aload_1
394: ldc #132 // int 22
396: aaload
397: ldc #83 // class TreeNode
399: aload 11
401: invokestatic #135 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.unaryMinus:(Ljava/lang/Object;)Ljava/lang/Object;
404: aload 8
406: invokeinterface #37, 4 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
411: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
416: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
421: astore 6
423: goto 327
426: aload_1
427: ldc #136 // int 23
429: aaload
430: aload_0
431: new #86 // class org/codehaus/groovy/runtime/GStringImpl
434: dup
435: iconst_3
436: anewarray #73 // class java/lang/Object
439: dup
440: iconst_0
441: aload_1
442: ldc #137 // int 24
444: aaload
445: aload 9
447: iconst_2
448: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
451: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
456: aastore
457: dup
458: iconst_1
459: aload 8
461: aastore
462: dup
463: iconst_2
464: aload 6
466: aastore
467: iconst_4
468: anewarray #88 // class java/lang/String
471: dup
472: iconst_0
473: ldc #94 // String
475: aastore
476: dup
477: iconst_1
478: ldc #139 // String \t trees of depth
480: aastore
481: dup
482: iconst_2
483: ldc #92 // String \t check:
485: aastore
486: dup
487: iconst_3
488: ldc #94 // String
490: aastore
491: invokespecial #97 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
494: invokeinterface #101, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
499: pop
500: aload_1
501: ldc #140 // int 25
503: aaload
504: aload 8
506: iconst_2
507: invokestatic #56 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
510: invokeinterface #68, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
515: astore 8
517: goto 236
520: aload_1
521: ldc #141 // int 26
523: aaload
524: aload_0
525: new #86 // class org/codehaus/groovy/runtime/GStringImpl
528: dup
529: iconst_2
530: anewarray #73 // class java/lang/Object
533: dup
534: iconst_0
535: aload 4
537: aastore
538: dup
539: iconst_1
540: aload_1
541: ldc #142 // int 27
543: aaload
544: aload 7
546: invokeinterface #70, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
551: aastore
552: iconst_3
553: anewarray #88 // class java/lang/String
556: dup
557: iconst_0
558: ldc #144 // String long lived tree of depth
560: aastore
561: dup
562: iconst_1
563: ldc #92 // String \t check:
565: aastore
566: dup
567: iconst_2
568: ldc #94 // String
570: aastore
571: invokespecial #97 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
574: invokeinterface #101, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
579: areturn
580: aconst_null
581: areturn
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #160 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class binarytrees
6: if_acmpeq 14
9: aload_0
10: invokestatic #164 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #166 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #160 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #172 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #166 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #175 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
}
Invoke Dynamic
Compiled from "binarytrees.groovy"
public class binarytrees extends groovy.lang.Script {
public static transient boolean __$stMC;
public binarytrees();
Code:
0: aload_0
1: invokespecial #13 // Method groovy/lang/Script."<init>":()V
4: return
public binarytrees(groovy.lang.Binding);
Code:
0: aload_0
1: aload_1
2: invokespecial #18 // Method groovy/lang/Script."<init>":(Lgroovy/lang/Binding;)V
5: return
public static void main(java.lang.String...);
Code:
0: ldc #24 // class org/codehaus/groovy/runtime/InvokerHelper
2: ldc #2 // class binarytrees
4: aload_0
5: invokedynamic #38, 0 // InvokeDynamic #0:invoke:(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/String;)Ljava/lang/Object;
10: pop
11: return
public java.lang.Object run();
Code:
0: aload_0
1: invokedynamic #48, 0 // InvokeDynamic #1:getProperty:(Lbinarytrees;)Ljava/lang/Object;
6: invokedynamic #53, 0 // InvokeDynamic #2:getProperty:(Ljava/lang/Object;)Ljava/lang/Object;
11: iconst_0
12: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
15: invokestatic #65 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
18: ifeq 29
21: bipush 10
23: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
26: goto 46
29: aload_0
30: invokedynamic #48, 0 // InvokeDynamic #1:getProperty:(Lbinarytrees;)Ljava/lang/Object;
35: iconst_0
36: invokedynamic #70, 0 // InvokeDynamic #3:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
41: invokedynamic #74, 0 // InvokeDynamic #4:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
46: astore_1
47: iconst_4
48: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
51: astore_2
52: iconst_2
53: anewarray #76 // class java/lang/Object
56: dup
57: iconst_0
58: aload_2
59: iconst_2
60: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
65: aastore
66: dup
67: iconst_1
68: aload_1
69: aastore
70: invokestatic #83 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
73: invokedynamic #88, 0 // InvokeDynamic #6:invoke:(Ljava/util/List;)Ljava/lang/Object;
78: astore_3
79: aload_3
80: iconst_1
81: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
86: astore 4
88: ldc #90 // class TreeNode
90: iconst_0
91: aload 4
93: invokedynamic #95, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
98: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
103: astore 5
105: aload_0
106: new #100 // class org/codehaus/groovy/runtime/GStringImpl
109: dup
110: iconst_2
111: anewarray #76 // class java/lang/Object
114: dup
115: iconst_0
116: aload 4
118: aastore
119: dup
120: iconst_1
121: aload 5
123: aastore
124: iconst_3
125: anewarray #102 // class java/lang/String
128: dup
129: iconst_0
130: ldc #104 // String stretch tree of depth
132: aastore
133: dup
134: iconst_1
135: ldc #106 // String \t check:
137: aastore
138: dup
139: iconst_2
140: ldc #108 // String
142: aastore
143: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
146: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
151: pop
152: ldc #90 // class TreeNode
154: iconst_0
155: aload_3
156: invokedynamic #95, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
161: astore 6
163: aload_2
164: astore 7
166: aload 7
168: aload_3
169: invokestatic #120 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
172: ifeq 384
175: iconst_1
176: aload_3
177: aload 7
179: invokedynamic #125, 0 // InvokeDynamic #10:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
184: aload_2
185: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
190: invokedynamic #131, 0 // InvokeDynamic #11:invoke:(ILjava/lang/Object;)Ljava/lang/Object;
195: astore 8
197: iconst_0
198: istore 9
200: iload 9
202: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
205: astore 5
207: aconst_null
208: astore 10
210: iconst_1
211: invokestatic #59 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
214: aload 8
216: ldc #132 // int 1
218: invokestatic #136 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
221: invokedynamic #141, 0 // InvokeDynamic #12:invoke:(Lgroovy/lang/Range;)Ljava/lang/Object;
226: invokedynamic #147, 0 // InvokeDynamic #13:cast:(Ljava/lang/Object;)Ljava/util/Iterator;
231: astore 11
233: aload 11
235: invokeinterface #153, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
240: ifeq 308
243: aload 11
245: invokeinterface #156, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
250: astore 10
252: aload 5
254: ldc #90 // class TreeNode
256: aload 10
258: aload 7
260: invokedynamic #159, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
265: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
270: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
275: astore 5
277: aload 5
279: ldc #90 // class TreeNode
281: aload 10
283: invokestatic #162 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.unaryMinus:(Ljava/lang/Object;)Ljava/lang/Object;
286: aload 7
288: invokedynamic #159, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
293: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
298: invokedynamic #126, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
303: astore 5
305: goto 233
308: aload_0
309: new #100 // class org/codehaus/groovy/runtime/GStringImpl
312: dup
313: iconst_3
314: anewarray #76 // class java/lang/Object
317: dup
318: iconst_0
319: aload 8
321: iconst_2
322: invokedynamic #165, 0 // InvokeDynamic #14:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
327: aastore
328: dup
329: iconst_1
330: aload 7
332: aastore
333: dup
334: iconst_2
335: aload 5
337: aastore
338: iconst_4
339: anewarray #102 // class java/lang/String
342: dup
343: iconst_0
344: ldc #108 // String
346: aastore
347: dup
348: iconst_1
349: ldc #167 // String \t trees of depth
351: aastore
352: dup
353: iconst_2
354: ldc #106 // String \t check:
356: aastore
357: dup
358: iconst_3
359: ldc #108 // String
361: aastore
362: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
365: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
370: pop
371: aload 7
373: iconst_2
374: invokedynamic #79, 0 // InvokeDynamic #5:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
379: astore 7
381: goto 166
384: aload_0
385: new #100 // class org/codehaus/groovy/runtime/GStringImpl
388: dup
389: iconst_2
390: anewarray #76 // class java/lang/Object
393: dup
394: iconst_0
395: aload_3
396: aastore
397: dup
398: iconst_1
399: aload 6
401: invokedynamic #98, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
406: aastore
407: iconst_3
408: anewarray #102 // class java/lang/String
411: dup
412: iconst_0
413: ldc #169 // String long lived tree of depth
415: aastore
416: dup
417: iconst_1
418: ldc #106 // String \t check:
420: aastore
421: dup
422: iconst_2
423: ldc #108 // String
425: aastore
426: invokespecial #111 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
429: invokedynamic #117, 0 // InvokeDynamic #9:invoke:(Lbinarytrees;Lgroovy/lang/GString;)Ljava/lang/Object;
434: areturn
435: nop
436: athrow
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #187 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class binarytrees
6: if_acmpeq 14
9: aload_0
10: invokestatic #191 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #193 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #187 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #199 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #193 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #202 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
}