Bytecode Analysis for script: ackermann

        /*
 * The Computer Language Shootout
 * http://shootout.alioth.debian.org/
 *
 * contributed by Jochen Hinrichsen
 */

class ackermann {
    static Integer A(Integer x, Integer y) {
        if (x == 0) return y + 1
        if (y == 0) return A(x - 1, 1)
        return A(x - 1, A(x, y - 1))
    }

    static void main(String[] args) {
        def n = args[0].toInteger()
        def result = A(3, n)
        println("Ack(3,${n}): ${result}")
    }
}

      
Groovyc Indy Static
Lines Removed 8 6 12
Total Lines - Before 657 350 488
Percentage of Lines Removed 1.2 1.7 2.5

Benchmarks

For parameter: 1

Groovyc Indy Static
Benchmark Average - Before 439 474 318
Benchmark Average - After 412 464 314
Benchmark Std Dev - Before 20.53 8.59 6.38
Benchmark Std Dev - After 4.31 8.63 7.59

For parameter: 2

Groovyc Indy Static
Benchmark Average - Before 423 471 324
Benchmark Average - After 410 468 315
Benchmark Std Dev - Before 4.57 7.57 8.01
Benchmark Std Dev - After 4.19 9.83 7.53

BEFORE

Groovyc (Legacy)

          Compiled from "ackermann.groovy"
public class ackermann implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public ackermann();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: invokestatic  #21                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       7: astore_1
       8: aload_0
       9: invokevirtual #25                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      12: astore_2
      13: aload_2
      14: aload_0
      15: swap
      16: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      19: aload_2
      20: pop
      21: return

  public static java.lang.Integer A(java.lang.Integer, java.lang.Integer);
    Code:
       0: invokestatic  #21                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_2
       4: aload_0
       5: iconst_0
       6: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: invokestatic  #43                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      12: ifeq          38
      15: aload_2
      16: ldc           #44                 // int 0
      18: aaload
      19: aload_1
      20: iconst_1
      21: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      24: invokeinterface #50,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      29: ldc           #33                 // class java/lang/Integer
      31: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      34: checkcast     #33                 // class java/lang/Integer
      37: areturn
      38: aload_1
      39: iconst_0
      40: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      43: invokestatic  #43                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      46: ifeq          87
      49: aload_2
      50: ldc           #55                 // int 1
      52: aaload
      53: ldc           #2                  // class ackermann
      55: aload_2
      56: ldc           #56                 // int 2
      58: aaload
      59: aload_0
      60: iconst_1
      61: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      64: invokeinterface #50,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      69: iconst_1
      70: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      73: invokeinterface #60,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      78: ldc           #33                 // class java/lang/Integer
      80: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      83: checkcast     #33                 // class java/lang/Integer
      86: areturn
      87: aload_2
      88: ldc           #61                 // int 3
      90: aaload
      91: ldc           #2                  // class ackermann
      93: aload_2
      94: ldc           #62                 // int 4
      96: aaload
      97: aload_0
      98: iconst_1
      99: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     102: invokeinterface #50,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     107: aload_2
     108: ldc           #63                 // int 5
     110: aaload
     111: ldc           #2                  // class ackermann
     113: aload_0
     114: aload_2
     115: ldc           #64                 // int 6
     117: aaload
     118: aload_1
     119: iconst_1
     120: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     123: invokeinterface #50,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     128: invokeinterface #60,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     133: invokeinterface #60,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     138: ldc           #33                 // class java/lang/Integer
     140: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     143: checkcast     #33                 // class java/lang/Integer
     146: areturn
     147: aconst_null
     148: areturn

  public static void main(java.lang.String...);
    Code:
       0: invokestatic  #21                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aconst_null
       5: astore_2
       6: invokestatic  #75                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigInt:()Z
       9: ifeq          27
      12: getstatic     #77                 // Field __$stMC:Z
      15: ifne          27
      18: invokestatic  #80                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
      21: ifne          27
      24: goto          58
      27: aload_1
      28: ldc           #81                 // int 7
      30: aaload
      31: aload_1
      32: ldc           #82                 // int 8
      34: aaload
      35: aload_0
      36: iconst_0
      37: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      40: invokeinterface #50,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      45: invokeinterface #85,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      50: astore_3
      51: aload_3
      52: astore_2
      53: aload_3
      54: pop
      55: goto          80
      58: aload_1
      59: ldc           #86                 // int 9
      61: aaload
      62: aload_0
      63: iconst_0
      64: invokestatic  #90                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
      67: invokeinterface #85,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      72: astore        4
      74: aload         4
      76: astore_2
      77: aload         4
      79: pop
      80: aload_1
      81: ldc           #91                 // int 10
      83: aaload
      84: ldc           #2                  // class ackermann
      86: iconst_3
      87: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      90: aload_2
      91: invokeinterface #60,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      96: astore        5
      98: aload         5
     100: pop
     101: aload_1
     102: ldc           #92                 // int 11
     104: aaload
     105: ldc           #2                  // class ackermann
     107: new           #94                 // class org/codehaus/groovy/runtime/GStringImpl
     110: dup
     111: iconst_2
     112: anewarray     #4                  // class java/lang/Object
     115: dup
     116: iconst_0
     117: aload_2
     118: aastore
     119: dup
     120: iconst_1
     121: aload         5
     123: aastore
     124: iconst_3
     125: anewarray     #96                 // class java/lang/String
     128: dup
     129: iconst_0
     130: ldc           #98                 // String Ack(3,
     132: aastore
     133: dup
     134: iconst_1
     135: ldc           #100                // String ):
     137: aastore
     138: dup
     139: iconst_2
     140: ldc           #102                // String
     142: aastore
     143: invokespecial #105                // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
     146: invokeinterface #108,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
     151: pop
     152: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #117                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class ackermann
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #121                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #123                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #117                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #129                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #123                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #132                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #25                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #137                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #142,  4          // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #137                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #147,  3          // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #137                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #152,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

          Compiled from "ackermann.groovy"
public class ackermann implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public ackermann();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: aload_1
      16: pop
      17: return

  public static java.lang.Integer A(java.lang.Integer, java.lang.Integer);
    Code:
       0: aload_0
       1: iconst_0
       2: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       8: ifeq          24
      11: aload_1
      12: iconst_1
      13: invokedynamic #53,  0             // InvokeDynamic #0:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      18: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      23: areturn
      24: aload_1
      25: iconst_0
      26: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      29: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifeq          56
      35: ldc           #2                  // class ackermann
      37: aload_0
      38: iconst_1
      39: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      44: iconst_1
      45: invokedynamic #66,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Object;I)Ljava/lang/Object;
      50: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      55: areturn
      56: ldc           #2                  // class ackermann
      58: aload_0
      59: iconst_1
      60: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      65: ldc           #2                  // class ackermann
      67: aload_0
      68: aload_1
      69: iconst_1
      70: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      75: invokedynamic #69,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Integer;Ljava/lang/Object;)Ljava/lang/Object;
      80: invokedynamic #72,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      85: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      90: areturn
      91: nop
      92: athrow

  public static void main(java.lang.String...);
    Code:
       0: aload_0
       1: iconst_0
       2: invokedynamic #84,  0             // InvokeDynamic #4:invoke:([Ljava/lang/String;I)Ljava/lang/Object;
       7: invokedynamic #89,  0             // InvokeDynamic #5:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      12: astore_1
      13: aload_1
      14: pop
      15: ldc           #2                  // class ackermann
      17: iconst_3
      18: aload_1
      19: invokedynamic #92,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
      24: astore_2
      25: aload_2
      26: pop
      27: ldc           #2                  // class ackermann
      29: new           #94                 // class org/codehaus/groovy/runtime/GStringImpl
      32: dup
      33: iconst_2
      34: anewarray     #4                  // class java/lang/Object
      37: dup
      38: iconst_0
      39: aload_1
      40: aastore
      41: dup
      42: iconst_1
      43: aload_2
      44: aastore
      45: iconst_3
      46: anewarray     #96                 // class java/lang/String
      49: dup
      50: iconst_0
      51: ldc           #98                 // String Ack(3,
      53: aastore
      54: dup
      55: iconst_1
      56: ldc           #100                // String ):
      58: aastore
      59: dup
      60: iconst_2
      61: ldc           #102                // String
      63: aastore
      64: invokespecial #105                // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      67: invokedynamic #110,  0            // InvokeDynamic #6:invoke:(Ljava/lang/Class;Lgroovy/lang/GString;)Ljava/lang/Object;
      72: pop
      73: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class ackermann
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #123                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #131                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #134                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #144,  4          // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #149,  3          // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #154,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

          Compiled from "ackermann.groovy"
public class ackermann implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public ackermann();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: aload_1
      16: pop
      17: return

  public static java.lang.Integer A(java.lang.Integer, java.lang.Integer);
    Code:
       0: aload_0
       1: iconst_0
       2: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       8: ifeq          28
      11: aload_1
      12: iconst_1
      13: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      16: invokestatic  #45                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.plus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      19: ldc           #29                 // class java/lang/Integer
      21: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      24: checkcast     #29                 // class java/lang/Integer
      27: areturn
      28: aload_1
      29: iconst_0
      30: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      33: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      36: ifeq          63
      39: aload_0
      40: iconst_1
      41: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      44: invokestatic  #54                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.minus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      47: ldc           #29                 // class java/lang/Integer
      49: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      52: checkcast     #29                 // class java/lang/Integer
      55: iconst_1
      56: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      59: invokestatic  #56                 // Method A:(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
      62: areturn
      63: aload_0
      64: iconst_1
      65: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      68: invokestatic  #54                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.minus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      71: ldc           #29                 // class java/lang/Integer
      73: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      76: checkcast     #29                 // class java/lang/Integer
      79: aload_0
      80: aload_1
      81: iconst_1
      82: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      85: invokestatic  #54                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.minus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      88: ldc           #29                 // class java/lang/Integer
      90: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      93: checkcast     #29                 // class java/lang/Integer
      96: invokestatic  #56                 // Method A:(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
      99: invokestatic  #56                 // Method A:(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
     102: areturn
     103: aconst_null
     104: areturn

  public static void main(java.lang.String...);
    Code:
       0: aload_0
       1: iconst_0
       2: invokestatic  #67                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
       5: ldc           #69                 // class java/lang/CharSequence
       7: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      10: checkcast     #69                 // class java/lang/CharSequence
      13: invokestatic  #75                 // Method org/codehaus/groovy/runtime/StringGroovyMethods.toInteger:(Ljava/lang/CharSequence;)Ljava/lang/Integer;
      16: astore_1
      17: aload_1
      18: pop
      19: iconst_3
      20: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      23: aload_1
      24: invokestatic  #56                 // Method A:(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
      27: astore_2
      28: aload_2
      29: pop
      30: ldc           #2                  // class ackermann
      32: new           #77                 // class org/codehaus/groovy/runtime/GStringImpl
      35: dup
      36: iconst_2
      37: anewarray     #4                  // class java/lang/Object
      40: dup
      41: iconst_0
      42: aload_1
      43: aastore
      44: dup
      45: iconst_1
      46: aload_2
      47: aastore
      48: iconst_3
      49: anewarray     #79                 // class java/lang/String
      52: dup
      53: iconst_0
      54: ldc           #81                 // String Ack(3,
      56: aastore
      57: dup
      58: iconst_1
      59: ldc           #83                 // String ):
      61: aastore
      62: dup
      63: iconst_2
      64: ldc           #85                 // String
      66: aastore
      67: invokespecial #88                 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      70: invokestatic  #94                 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.println:(Ljava/lang/Object;Ljava/lang/Object;)V
      73: aconst_null
      74: pop
      75: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #102                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class ackermann
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #106                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #108                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #102                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #114                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #108                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #117                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #122                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #127,  4          // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #122                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #132,  3          // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #122                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #137,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

AFTER

Groovyc (Legacy)

          Compiled from "ackermann.groovy"
public class ackermann implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public ackermann();
    Code:
       0: aload_0
       1: invokespecial #19                 // Method java/lang/Object."<init>":()V
       4: invokestatic  #23                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       7: astore_1
       8: aload_0
       9: invokevirtual #27                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      12: astore_2
      13: aload_2
      14: aload_0
      15: swap
      16: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      19: return

  public static java.lang.Integer A(java.lang.Integer, java.lang.Integer);
    Code:
       0: invokestatic  #23                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_2
       4: aload_0
       5: iconst_0
       6: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: invokestatic  #45                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      12: ifeq          38
      15: aload_2
      16: ldc           #46                 // int 0
      18: aaload
      19: aload_1
      20: iconst_1
      21: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      24: invokeinterface #52,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      29: ldc           #35                 // class java/lang/Integer
      31: invokestatic  #56                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      34: checkcast     #35                 // class java/lang/Integer
      37: areturn
      38: aload_1
      39: iconst_0
      40: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      43: invokestatic  #45                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      46: ifeq          87
      49: aload_2
      50: ldc           #57                 // int 1
      52: aaload
      53: ldc           #2                  // class ackermann
      55: aload_2
      56: ldc           #58                 // int 2
      58: aaload
      59: aload_0
      60: iconst_1
      61: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      64: invokeinterface #52,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      69: iconst_1
      70: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      73: invokeinterface #62,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      78: ldc           #35                 // class java/lang/Integer
      80: invokestatic  #56                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      83: checkcast     #35                 // class java/lang/Integer
      86: areturn
      87: aload_2
      88: ldc           #63                 // int 3
      90: aaload
      91: ldc           #2                  // class ackermann
      93: aload_2
      94: ldc           #64                 // int 4
      96: aaload
      97: aload_0
      98: iconst_1
      99: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     102: invokeinterface #52,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     107: aload_2
     108: ldc           #65                 // int 5
     110: aaload
     111: ldc           #2                  // class ackermann
     113: aload_0
     114: aload_2
     115: ldc           #66                 // int 6
     117: aaload
     118: aload_1
     119: iconst_1
     120: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     123: invokeinterface #52,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     128: invokeinterface #62,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     133: invokeinterface #62,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     138: ldc           #35                 // class java/lang/Integer
     140: invokestatic  #56                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     143: checkcast     #35                 // class java/lang/Integer
     146: areturn
     147: aconst_null
     148: areturn

  public static void main(java.lang.String...);
    Code:
       0: invokestatic  #23                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aconst_null
       5: astore_2
       6: invokestatic  #77                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigInt:()Z
       9: ifeq          27
      12: getstatic     #79                 // Field __$stMC:Z
      15: ifne          27
      18: invokestatic  #82                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
      21: ifne          27
      24: goto          56
      27: aload_1
      28: ldc           #83                 // int 7
      30: aaload
      31: aload_1
      32: ldc           #84                 // int 8
      34: aaload
      35: aload_0
      36: iconst_0
      37: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      40: invokeinterface #52,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      45: invokeinterface #87,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      50: astore_3
      51: aload_3
      52: astore_2
      53: goto          75
      56: aload_1
      57: ldc           #88                 // int 9
      59: aaload
      60: aload_0
      61: iconst_0
      62: invokestatic  #92                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
      65: invokeinterface #87,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      70: astore        4
      72: aload         4
      74: astore_2
      75: aload_1
      76: ldc           #93                 // int 10
      78: aaload
      79: ldc           #2                  // class ackermann
      81: iconst_3
      82: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      85: aload_2
      86: invokeinterface #62,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      91: astore        5
      93: aload_1
      94: ldc           #94                 // int 11
      96: aaload
      97: ldc           #2                  // class ackermann
      99: new           #96                 // class org/codehaus/groovy/runtime/GStringImpl
     102: dup
     103: iconst_2
     104: anewarray     #4                  // class java/lang/Object
     107: dup
     108: iconst_0
     109: aload_2
     110: aastore
     111: dup
     112: iconst_1
     113: aload         5
     115: aastore
     116: iconst_3
     117: anewarray     #98                 // class java/lang/String
     120: dup
     121: iconst_0
     122: ldc           #100                // String Ack(3,
     124: aastore
     125: dup
     126: iconst_1
     127: ldc           #102                // String ):
     129: aastore
     130: dup
     131: iconst_2
     132: ldc           #104                // String
     134: aastore
     135: invokespecial #107                // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
     138: invokeinterface #110,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callStatic:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
     143: pop
     144: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class ackermann
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #123                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #131                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #134                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #27                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #139                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #144,  4          // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #139                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #149,  3          // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #139                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #154,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

          Compiled from "ackermann.groovy"
public class ackermann implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public ackermann();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: return

  public static java.lang.Integer A(java.lang.Integer, java.lang.Integer);
    Code:
       0: aload_0
       1: iconst_0
       2: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       8: ifeq          24
      11: aload_1
      12: iconst_1
      13: invokedynamic #53,  0             // InvokeDynamic #0:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      18: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      23: areturn
      24: aload_1
      25: iconst_0
      26: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      29: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifeq          56
      35: ldc           #2                  // class ackermann
      37: aload_0
      38: iconst_1
      39: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      44: iconst_1
      45: invokedynamic #66,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Object;I)Ljava/lang/Object;
      50: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      55: areturn
      56: ldc           #2                  // class ackermann
      58: aload_0
      59: iconst_1
      60: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      65: ldc           #2                  // class ackermann
      67: aload_0
      68: aload_1
      69: iconst_1
      70: invokedynamic #62,  0             // InvokeDynamic #2:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      75: invokedynamic #69,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Integer;Ljava/lang/Object;)Ljava/lang/Object;
      80: invokedynamic #72,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      85: invokedynamic #59,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      90: areturn
      91: nop
      92: athrow

  public static void main(java.lang.String...);
    Code:
       0: aload_0
       1: iconst_0
       2: invokedynamic #84,  0             // InvokeDynamic #4:invoke:([Ljava/lang/String;I)Ljava/lang/Object;
       7: invokedynamic #89,  0             // InvokeDynamic #5:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      12: astore_1
      13: ldc           #2                  // class ackermann
      15: iconst_3
      16: aload_1
      17: invokedynamic #92,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Class;ILjava/lang/Object;)Ljava/lang/Object;
      22: astore_2
      23: ldc           #2                  // class ackermann
      25: new           #94                 // class org/codehaus/groovy/runtime/GStringImpl
      28: dup
      29: iconst_2
      30: anewarray     #4                  // class java/lang/Object
      33: dup
      34: iconst_0
      35: aload_1
      36: aastore
      37: dup
      38: iconst_1
      39: aload_2
      40: aastore
      41: iconst_3
      42: anewarray     #96                 // class java/lang/String
      45: dup
      46: iconst_0
      47: ldc           #98                 // String Ack(3,
      49: aastore
      50: dup
      51: iconst_1
      52: ldc           #100                // String ):
      54: aastore
      55: dup
      56: iconst_2
      57: ldc           #102                // String
      59: aastore
      60: invokespecial #105                // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      63: invokedynamic #110,  0            // InvokeDynamic #6:invoke:(Ljava/lang/Class;Lgroovy/lang/GString;)Ljava/lang/Object;
      68: pop
      69: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class ackermann
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #123                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #119                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #131                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #125                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #134                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #144,  4          // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #149,  3          // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #141                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #154,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

          Compiled from "collectloop.groovy"
public class collectloop$_run_closure1 extends groovy.lang.Closure implements org.codehaus.groovy.runtime.GeneratedClosure {
  public static transient boolean __$stMC;

  public collectloop$_run_closure1(java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokespecial #21                 // Method groovy/lang/Closure."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
       6: return

  public java.lang.Object doCall(java.lang.Object);
    Code:
       0: aload_1
       1: ldc           #30                 // class java/lang/Number
       3: invokestatic  #36                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
       6: checkcast     #30                 // class java/lang/Number
       9: iconst_2
      10: invokestatic  #42                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      13: invokestatic  #48                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.multiply:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      16: areturn
      17: aconst_null
      18: areturn

  public java.lang.Object call(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: invokevirtual #52                 // Method doCall:(Ljava/lang/Object;)Ljava/lang/Object;
       5: areturn
       6: aconst_null
       7: areturn

  public java.lang.Object call();
    Code:
       0: aload_0
       1: aconst_null
       2: invokevirtual #52                 // Method doCall:(Ljava/lang/Object;)Ljava/lang/Object;
       5: areturn
       6: aconst_null
       7: areturn

  public java.lang.Object doCall();
    Code:
       0: aload_0
       1: aconst_null
       2: invokevirtual #52                 // Method doCall:(Ljava/lang/Object;)Ljava/lang/Object;
       5: areturn
       6: aconst_null
       7: areturn

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class collectloop$_run_closure1
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #65                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #67                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #61                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #73                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #67                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #76                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn
}