Bytecode Analysis for script: binarytrees

        /*
 * 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 Indy Static
Lines Removed 36 36 0
Total Lines - Before 908 546 0
Percentage of Lines Removed 4.0 6.6 Error

Benchmarks

For parameter: 1

Groovyc Indy Static
Benchmark Average - Before 452 549 N/A
Benchmark Average - After 466 548 N/A
Benchmark Std Dev - Before 14.12 16.58 N/A
Benchmark Std Dev - After 9.81 19.2 N/A

BEFORE

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


        

AFTER

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
}

        

Static Compilation