Bytecode Analysis for script: nsieve

        /*
 * The Computer Language Benchmarks Game
 * http://shootout.alioth.debian.org/
 *
 * contributed by Pilho Kim
 */

def countSieve(m, primes) {
    def i, k
    def count = 0

    i = 2
    while (i <= m) {
        primes[i] = true
        i++
    }

    i = 2
    while (i <= m) {
        if (primes[i]) {
            k = i + i
            while (k <= m) {
                primes[k] = false
                k += i
            }
            count++
        }
        i++
    }
    return count
}

def padNumber(number, fieldLen) {
    def bareNumber = "" + number
    def numSpaces = fieldLen - bareNumber.length()
    def sb = new StringBuffer(' ' * numSpaces)
    sb.append(bareNumber)
    return sb.toString()
}

def n = 2
if (args.length > 0)
    n = args[0].toInteger()
if (n < 2)
    n = 2

def m = (1 << n) * 10000
def flags = new boolean[m+1]

[n, n-1, n-2].each {
    def k = (1<<it) * 10000
    def s1 = padNumber(k, 8)
    def s2 = padNumber(countSieve(k, flags), 9)
    println("Primes up to $s1$s2")
}

      
Groovyc Indy Static
Lines Removed 54 54 0
Total Lines - Before 792 476 0
Percentage of Lines Removed 6.8 11.3 Error

Benchmarks

For parameter: 1

Groovyc Indy Static
Benchmark Average - Before 505 662 N/A
Benchmark Average - After 506 692 N/A
Benchmark Std Dev - Before 11.07 59.29 N/A
Benchmark Std Dev - After 16.85 51.6 N/A

For parameter: 2

Groovyc Indy Static
Benchmark Average - Before 524 633 N/A
Benchmark Average - After 491 673 N/A
Benchmark Std Dev - Before 27.04 21.86 N/A
Benchmark Std Dev - After 10.16 49.5 N/A

For parameter: 3

Groovyc Indy Static
Benchmark Average - Before 551 682 N/A
Benchmark Average - After 518 709 N/A
Benchmark Std Dev - Before 36.29 32.72 N/A
Benchmark Std Dev - After 13.45 40.09 N/A

For parameter: 4

Groovyc Indy Static
Benchmark Average - Before 521 754 N/A
Benchmark Average - After 534 784 N/A
Benchmark Std Dev - Before 16.39 19.51 N/A
Benchmark Std Dev - After 17.06 36.85 N/A

For parameter: 5

Groovyc Indy Static
Benchmark Average - Before 652 895 N/A
Benchmark Average - After 640 898 N/A
Benchmark Std Dev - Before 44.32 28.1 N/A
Benchmark Std Dev - After 31.62 19.88 N/A

BEFORE

Groovyc (Legacy)

          Compiled from "nsieve.groovy"
public class nsieve extends groovy.lang.Script {
  public static transient boolean __$stMC;

  public nsieve();
    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 nsieve(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 nsieve
      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: iconst_2
       5: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       8: astore_2
       9: aload_2
      10: pop
      11: aload_1
      12: ldc           #46                 // int 1
      14: aaload
      15: aload_1
      16: ldc           #47                 // int 2
      18: aaload
      19: aload_0
      20: invokeinterface #51,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
      25: invokeinterface #54,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
      30: iconst_0
      31: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      34: invokestatic  #60                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareGreaterThan:(Ljava/lang/Object;Ljava/lang/Object;)Z
      37: ifeq          77
      40: aload_1
      41: ldc           #61                 // int 3
      43: aaload
      44: aload_1
      45: ldc           #62                 // int 4
      47: aaload
      48: aload_1
      49: ldc           #63                 // int 5
      51: aaload
      52: aload_0
      53: invokeinterface #51,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
      58: iconst_0
      59: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      62: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      67: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      72: astore_3
      73: aload_3
      74: astore_2
      75: aload_3
      76: pop
      77: aload_2
      78: iconst_2
      79: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      82: invokestatic  #71                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThan:(Ljava/lang/Object;Ljava/lang/Object;)Z
      85: ifeq          100
      88: iconst_2
      89: istore        4
      91: iload         4
      93: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      96: astore_2
      97: iload         4
      99: pop
     100: aload_1
     101: ldc           #72                 // int 6
     103: aaload
     104: aload_1
     105: ldc           #73                 // int 7
     107: aaload
     108: iconst_1
     109: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     112: aload_2
     113: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     118: sipush        10000
     121: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     124: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     129: astore        5
     131: aload         5
     133: pop
     134: aload_1
     135: ldc           #74                 // int 8
     137: aaload
     138: aload         5
     140: iconst_1
     141: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     144: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     149: invokestatic  #80                 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I
     152: multianewarray #82,  1            // class "[Z"
     156: new           #84                 // class groovy/lang/Reference
     159: dup_x1
     160: swap
     161: invokespecial #87                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     164: astore        6
     166: aload         6
     168: pop
     169: aload_1
     170: ldc           #88                 // int 9
     172: aaload
     173: iconst_3
     174: anewarray     #90                 // class java/lang/Object
     177: dup
     178: iconst_0
     179: aload_2
     180: aastore
     181: dup
     182: iconst_1
     183: aload_1
     184: ldc           #91                 // int 10
     186: aaload
     187: aload_2
     188: iconst_1
     189: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     192: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     197: aastore
     198: dup
     199: iconst_2
     200: aload_1
     201: ldc           #92                 // int 11
     203: aaload
     204: aload_2
     205: iconst_2
     206: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     209: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     214: aastore
     215: invokestatic  #96                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
     218: new           #98                 // class nsieve$_run_closure1
     221: dup
     222: aload_0
     223: aload_0
     224: aload         6
     226: invokespecial #101                // Method nsieve$_run_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     229: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     234: areturn
     235: aconst_null
     236: areturn

  public java.lang.Object countSieve(java.lang.Object, java.lang.Object);
    Code:
       0: invokestatic  #17                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_3
       4: aconst_null
       5: astore        4
       7: aload         4
       9: pop
      10: aconst_null
      11: astore        5
      13: aload         5
      15: pop
      16: iconst_0
      17: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      20: astore        6
      22: aload         6
      24: pop
      25: iconst_2
      26: istore        7
      28: iload         7
      30: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      33: astore        4
      35: iload         7
      37: pop
      38: aload         4
      40: aload_1
      41: invokestatic  #110                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      44: ifeq          96
      47: iconst_1
      48: istore        8
      50: aload_3
      51: ldc           #111                // int 12
      53: aaload
      54: aload_2
      55: aload         4
      57: iload         8
      59: invokestatic  #116                // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
      62: invokeinterface #35,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      67: pop
      68: iload         8
      70: pop
      71: aload         4
      73: dup
      74: astore        9
      76: aload_3
      77: ldc           #117                // int 13
      79: aaload
      80: swap
      81: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      86: dup
      87: astore        4
      89: pop
      90: aload         9
      92: pop
      93: goto          38
      96: iconst_2
      97: istore        10
      99: iload         10
     101: invokestatic  #45                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     104: astore        4
     106: iload         10
     108: pop
     109: aload         4
     111: aload_1
     112: invokestatic  #110                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     115: ifeq          258
     118: aload_3
     119: ldc           #118                // int 14
     121: aaload
     122: aload_2
     123: aload         4
     125: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     130: invokestatic  #122                // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.booleanUnbox:(Ljava/lang/Object;)Z
     133: ifeq          233
     136: aload_3
     137: ldc           #123                // int 15
     139: aaload
     140: aload         4
     142: aload         4
     144: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     149: astore        11
     151: aload         11
     153: astore        5
     155: aload         11
     157: pop
     158: aload         5
     160: aload_1
     161: invokestatic  #110                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     164: ifeq          211
     167: iconst_0
     168: istore        12
     170: aload_3
     171: ldc           #124                // int 16
     173: aaload
     174: aload_2
     175: aload         5
     177: iload         12
     179: invokestatic  #116                // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
     182: invokeinterface #35,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     187: pop
     188: iload         12
     190: pop
     191: aload_3
     192: ldc           #125                // int 17
     194: aaload
     195: aload         5
     197: aload         4
     199: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     204: dup
     205: astore        5
     207: pop
     208: goto          158
     211: aload         6
     213: dup
     214: astore        13
     216: aload_3
     217: ldc           #126                // int 18
     219: aaload
     220: swap
     221: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     226: dup
     227: astore        6
     229: pop
     230: aload         13
     232: pop
     233: aload         4
     235: dup
     236: astore        14
     238: aload_3
     239: ldc           #127                // int 19
     241: aaload
     242: swap
     243: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     248: dup
     249: astore        4
     251: pop
     252: aload         14
     254: pop
     255: goto          109
     258: aload         6
     260: areturn
     261: aconst_null
     262: areturn

  public java.lang.Object padNumber(java.lang.Object, java.lang.Object);
    Code:
       0: invokestatic  #17                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_3
       4: aload_3
       5: ldc           #133                // int 20
       7: aaload
       8: ldc           #135                // String
      10: aload_1
      11: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      16: astore        4
      18: aload         4
      20: pop
      21: aload_3
      22: ldc           #136                // int 21
      24: aaload
      25: aload_2
      26: aload_3
      27: ldc           #137                // int 22
      29: aaload
      30: aload         4
      32: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      37: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      42: astore        5
      44: aload         5
      46: pop
      47: aload_3
      48: ldc           #138                // int 23
      50: aaload
      51: ldc           #140                // class java/lang/StringBuffer
      53: aload_3
      54: ldc           #141                // int 24
      56: aaload
      57: ldc           #143                // String
      59: aload         5
      61: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      66: invokeinterface #146,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callConstructor:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      71: astore        6
      73: aload         6
      75: pop
      76: aload_3
      77: ldc           #147                // int 25
      79: aaload
      80: aload         6
      82: aload         4
      84: invokeinterface #66,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      89: pop
      90: aload_3
      91: ldc           #148                // int 26
      93: aaload
      94: aload         6
      96: invokeinterface #68,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     101: areturn
     102: aconst_null
     103: areturn

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

        

Invoke Dynamic

          Compiled from "nsieve.groovy"
public class nsieve extends groovy.lang.Script {
  public static transient boolean __$stMC;

  public nsieve();
    Code:
       0: aload_0
       1: invokespecial #13                 // Method groovy/lang/Script."<init>":()V
       4: return

  public nsieve(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 nsieve
       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: iconst_2
       1: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: aload_1
       6: pop
       7: aload_0
       8: invokedynamic #54,  0             // InvokeDynamic #1:getProperty:(Lnsieve;)Ljava/lang/Object;
      13: invokedynamic #59,  0             // InvokeDynamic #2:getProperty:(Ljava/lang/Object;)Ljava/lang/Object;
      18: iconst_0
      19: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      22: invokestatic  #65                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareGreaterThan:(Ljava/lang/Object;Ljava/lang/Object;)Z
      25: ifeq          50
      28: aload_0
      29: invokedynamic #54,  0             // InvokeDynamic #1:getProperty:(Lnsieve;)Ljava/lang/Object;
      34: iconst_0
      35: invokedynamic #70,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
      40: invokedynamic #74,  0             // InvokeDynamic #4:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      45: astore_2
      46: aload_2
      47: astore_1
      48: aload_2
      49: pop
      50: aload_1
      51: iconst_2
      52: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      55: invokestatic  #77                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThan:(Ljava/lang/Object;Ljava/lang/Object;)Z
      58: ifeq          70
      61: iconst_2
      62: istore_3
      63: iload_3
      64: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      67: astore_1
      68: iload_3
      69: pop
      70: iconst_1
      71: aload_1
      72: invokedynamic #82,  0             // InvokeDynamic #5:invoke:(ILjava/lang/Object;)Ljava/lang/Object;
      77: sipush        10000
      80: invokedynamic #85,  0             // InvokeDynamic #6:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
      85: astore        4
      87: aload         4
      89: pop
      90: aload         4
      92: iconst_1
      93: invokedynamic #88,  0             // InvokeDynamic #7:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
      98: invokestatic  #94                 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I
     101: multianewarray #96,  1            // class "[Z"
     105: new           #98                 // class groovy/lang/Reference
     108: dup_x1
     109: swap
     110: invokespecial #101                // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     113: astore        5
     115: aload         5
     117: pop
     118: iconst_3
     119: anewarray     #103                // class java/lang/Object
     122: dup
     123: iconst_0
     124: aload_1
     125: aastore
     126: dup
     127: iconst_1
     128: aload_1
     129: iconst_1
     130: invokedynamic #106,  0            // InvokeDynamic #8:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
     135: aastore
     136: dup
     137: iconst_2
     138: aload_1
     139: iconst_2
     140: invokedynamic #106,  0            // InvokeDynamic #8:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
     145: aastore
     146: invokestatic  #110                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
     149: new           #112                // class nsieve$_run_closure1
     152: dup
     153: aload_0
     154: aload_0
     155: aload         5
     157: invokespecial #115                // Method nsieve$_run_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     160: invokedynamic #120,  0            // InvokeDynamic #9:invoke:(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/lang/Object;
     165: areturn
     166: nop
     167: athrow

  public java.lang.Object countSieve(java.lang.Object, java.lang.Object);
    Code:
       0: aconst_null
       1: astore_3
       2: aload_3
       3: pop
       4: aconst_null
       5: astore        4
       7: aload         4
       9: pop
      10: iconst_0
      11: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      14: astore        5
      16: aload         5
      18: pop
      19: iconst_2
      20: istore        6
      22: iload         6
      24: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      27: astore_3
      28: iload         6
      30: pop
      31: aload_3
      32: aload_1
      33: invokestatic  #132                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      36: ifeq          73
      39: iconst_1
      40: istore        7
      42: aload_2
      43: aload_3
      44: iload         7
      46: invokedynamic #137,  0            // InvokeDynamic #10:invoke:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
      51: pop
      52: iload         7
      54: pop
      55: aload_3
      56: dup
      57: astore        8
      59: invokedynamic #140,  0            // InvokeDynamic #11:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      64: dup
      65: astore_3
      66: pop
      67: aload         8
      69: pop
      70: goto          31
      73: iconst_2
      74: istore        9
      76: iload         9
      78: invokestatic  #48                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      81: astore_3
      82: iload         9
      84: pop
      85: aload_3
      86: aload_1
      87: invokestatic  #132                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      90: ifeq          200
      93: aload_2
      94: aload_3
      95: invokedynamic #142,  0            // InvokeDynamic #3:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     100: invokedynamic #148,  0            // InvokeDynamic #12:cast:(Ljava/lang/Object;)Z
     105: ifeq          182
     108: aload_3
     109: aload_3
     110: invokedynamic #149,  0            // InvokeDynamic #7:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     115: astore        10
     117: aload         10
     119: astore        4
     121: aload         10
     123: pop
     124: aload         4
     126: aload_1
     127: invokestatic  #132                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareLessThanEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     130: ifeq          165
     133: iconst_0
     134: istore        11
     136: aload_2
     137: aload         4
     139: iload         11
     141: invokedynamic #137,  0            // InvokeDynamic #10:invoke:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
     146: pop
     147: iload         11
     149: pop
     150: aload         4
     152: aload_3
     153: invokedynamic #149,  0            // InvokeDynamic #7:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     158: dup
     159: astore        4
     161: pop
     162: goto          124
     165: aload         5
     167: dup
     168: astore        12
     170: invokedynamic #140,  0            // InvokeDynamic #11:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
     175: dup
     176: astore        5
     178: pop
     179: aload         12
     181: pop
     182: aload_3
     183: dup
     184: astore        13
     186: invokedynamic #140,  0            // InvokeDynamic #11:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
     191: dup
     192: astore_3
     193: pop
     194: aload         13
     196: pop
     197: goto          85
     200: aload         5
     202: areturn
     203: nop
     204: athrow

  public java.lang.Object padNumber(java.lang.Object, java.lang.Object);
    Code:
       0: ldc           #156                // String
       2: aload_1
       3: invokedynamic #159,  0            // InvokeDynamic #7:invoke:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
       8: astore_3
       9: aload_3
      10: pop
      11: aload_2
      12: aload_3
      13: invokedynamic #160,  0            // InvokeDynamic #2:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      18: invokedynamic #161,  0            // InvokeDynamic #8:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      23: astore        4
      25: aload         4
      27: pop
      28: ldc           #163                // class java/lang/StringBuffer
      30: ldc           #165                // String
      32: aload         4
      34: invokedynamic #166,  0            // InvokeDynamic #6:invoke:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      39: invokedynamic #171,  0            // InvokeDynamic #13:init:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
      44: astore        5
      46: aload         5
      48: pop
      49: aload         5
      51: aload_3
      52: invokedynamic #174,  0            // InvokeDynamic #14:invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      57: pop
      58: aload         5
      60: invokedynamic #177,  0            // InvokeDynamic #15:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      65: areturn
      66: nop
      67: athrow

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #188                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class nsieve
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #192                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #194                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #188                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #200                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #194                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #203                // 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/nsieve.groovy: 42: [Static type checking] - The variable [args] is undeclared.
 @ line 42, column 5.
   if (args.length > 0)
       ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 43: [Static type checking] - The variable [args] is undeclared.
 @ line 43, column 9.
       n = args[0].toInteger()
           ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 44: [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 44, column 5.
   if (n < 2)
       ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 47: [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 47, column 9.
   def m = (1 << n) * 10000
           ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 50: [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 50, column 5.
   [n, n-1, n-2].each {
       ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 50: [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 50, column 10.
   [n, n-1, n-2].each {
            ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 51: [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 51, column 13.
       def k = (1<<it) * 10000
               ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 13: [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 13, column 12.
       while (i <= m) {
              ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 14: [Static type checking] - Cannot find matching method java.lang.Object#getAt(int). Please check if the declared type is right and if the method exists.
 @ line 14, column 9.
           primes[i] = true
           ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 19: [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 19, column 12.
       while (i <= m) {
              ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 20: [Static type checking] - Cannot find matching method java.lang.Object#getAt(int). Please check if the declared type is right and if the method exists.
 @ line 20, column 13.
           if (primes[i]) {
               ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 22: [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 22, column 20.
               while (k <= m) {
                      ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 23: [Static type checking] - Cannot find matching method java.lang.Object#getAt(int). Please check if the declared type is right and if the method exists.
 @ line 23, column 17.
                   primes[k] = false
                   ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 35: [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 35, column 30.
       def numSpaces = fieldLen - bareNumber.length()
                                ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/nsieve.groovy: 36: [Static type checking] - Cannot find matching method java.lang.String#multiply(java.lang.Object). Please check if the declared type is right and if the method exists.
 @ line 36, column 31.
       def sb = new StringBuffer(' ' * numSpaces)
                                 ^

15 errors


        

AFTER

Groovyc (Legacy)

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

  public nsieve$_run_closure1(java.lang.Object, java.lang.Object, groovy.lang.Reference);
    Code:
       0: invokestatic  #27                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore        4
       5: aload_0
       6: aload_1
       7: aload_2
       8: invokespecial #30                 // Method groovy/lang/Closure."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
      11: aload_3
      12: astore        5
      14: aload         5
      16: aload_0
      17: swap
      18: putfield      #32                 // Field flags:Lgroovy/lang/Reference;
      21: return

  public java.lang.Object doCall(java.lang.Object);
    Code:
       0: invokestatic  #27                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_2
       4: aload_2
       5: ldc           #40                 // int 0
       7: aaload
       8: aload_2
       9: ldc           #41                 // int 1
      11: aaload
      12: iconst_1
      13: invokestatic  #47                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      16: aload_1
      17: invokeinterface #53,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      22: sipush        10000
      25: invokestatic  #47                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      28: invokeinterface #53,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      33: astore_3
      34: aload_2
      35: ldc           #54                 // int 2
      37: aaload
      38: aload_0
      39: aload_3
      40: bipush        8
      42: invokestatic  #47                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      45: invokeinterface #58,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      50: astore        4
      52: aload_2
      53: ldc           #59                 // int 3
      55: aaload
      56: aload_0
      57: aload_2
      58: ldc           #60                 // int 4
      60: aaload
      61: aload_0
      62: aload_3
      63: aload_0
      64: getfield      #32                 // Field flags:Lgroovy/lang/Reference;
      67: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      70: invokeinterface #58,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      75: bipush        9
      77: invokestatic  #47                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      80: invokeinterface #58,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      85: astore        5
      87: aload_2
      88: ldc           #66                 // int 5
      90: aaload
      91: aload_0
      92: new           #68                 // class org/codehaus/groovy/runtime/GStringImpl
      95: dup
      96: iconst_2
      97: anewarray     #70                 // class java/lang/Object
     100: dup
     101: iconst_0
     102: aload         4
     104: aastore
     105: dup
     106: iconst_1
     107: aload         5
     109: aastore
     110: iconst_3
     111: anewarray     #72                 // class java/lang/String
     114: dup
     115: iconst_0
     116: ldc           #74                 // String Primes up to
     118: aastore
     119: dup
     120: iconst_1
     121: ldc           #76                 // String
     123: aastore
     124: dup
     125: iconst_2
     126: ldc           #76                 // String
     128: aastore
     129: invokespecial #79                 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
     132: invokeinterface #82,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
     137: areturn
     138: aconst_null
     139: areturn

  public java.lang.Object getFlags();
    Code:
       0: invokestatic  #27                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aload_0
       5: getfield      #32                 // Field flags:Lgroovy/lang/Reference;
       8: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      11: areturn
      12: aconst_null
      13: areturn

  public java.lang.Object doCall();
    Code:
       0: invokestatic  #27                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aload_0
       5: aconst_null
       6: invokevirtual #89                 // Method doCall:(Ljava/lang/Object;)Ljava/lang/Object;
       9: areturn
      10: aconst_null
      11: areturn

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

        

Invoke Dynamic

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

  public nsieve$_run_closure1(java.lang.Object, java.lang.Object, groovy.lang.Reference);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokespecial #24                 // Method groovy/lang/Closure."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
       6: aload_3
       7: astore        4
       9: aload         4
      11: aload_0
      12: swap
      13: putfield      #26                 // Field flags:Lgroovy/lang/Reference;
      16: return

  public java.lang.Object doCall(java.lang.Object);
    Code:
       0: iconst_1
       1: aload_1
       2: invokedynamic #47,  0             // InvokeDynamic #0:invoke:(ILjava/lang/Object;)Ljava/lang/Object;
       7: sipush        10000
      10: invokedynamic #52,  0             // InvokeDynamic #1:invoke:(Ljava/lang/Object;I)Ljava/lang/Object;
      15: astore_2
      16: aload_0
      17: aload_2
      18: bipush        8
      20: invokedynamic #58,  0             // InvokeDynamic #2:invoke:(Lnsieve$_run_closure1;Ljava/lang/Object;I)Ljava/lang/Object;
      25: astore_3
      26: aload_0
      27: aload_0
      28: aload_2
      29: aload_0
      30: getfield      #26                 // Field flags:Lgroovy/lang/Reference;
      33: invokevirtual #63                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      36: invokedynamic #68,  0             // InvokeDynamic #3:invoke:(Lnsieve$_run_closure1;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      41: bipush        9
      43: invokedynamic #58,  0             // InvokeDynamic #2:invoke:(Lnsieve$_run_closure1;Ljava/lang/Object;I)Ljava/lang/Object;
      48: astore        4
      50: aload_0
      51: new           #70                 // class org/codehaus/groovy/runtime/GStringImpl
      54: dup
      55: iconst_2
      56: anewarray     #72                 // class java/lang/Object
      59: dup
      60: iconst_0
      61: aload_3
      62: aastore
      63: dup
      64: iconst_1
      65: aload         4
      67: aastore
      68: iconst_3
      69: anewarray     #74                 // class java/lang/String
      72: dup
      73: iconst_0
      74: ldc           #76                 // String Primes up to
      76: aastore
      77: dup
      78: iconst_1
      79: ldc           #78                 // String
      81: aastore
      82: dup
      83: iconst_2
      84: ldc           #78                 // String
      86: aastore
      87: invokespecial #81                 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      90: invokedynamic #86,  0             // InvokeDynamic #4:invoke:(Lnsieve$_run_closure1;Lgroovy/lang/GString;)Ljava/lang/Object;
      95: areturn
      96: nop
      97: athrow

  public java.lang.Object getFlags();
    Code:
       0: aload_0
       1: getfield      #26                 // Field flags:Lgroovy/lang/Reference;
       4: invokevirtual #63                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
       7: areturn
       8: nop
       9: athrow

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

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

        

Static Compilation