Bytecode Analysis for script: regexdna

        /*
 * The Computer Language Benchmark Games
 * http://shootout.alioth.debian.org/
 *
 * contributed by James Durbin
 * based very closely on Ruby version by jose fco. gonzalez
 */

def seq = new StringBuffer()
seq = System.in.readLines().join("\n") + "\n"

initialLength = seq.length()
seq = (seq =~">.*\n|\n").replaceAll('')
codeLength = seq.length()

[
        'agggtaaa|tttaccct',
        '[cgt]gggtaaa|tttaccc[acg]',
        'a[act]ggtaaa|tttacc[agt]t',
        'ag[act]gtaaa|tttac[agt]ct',
        'agg[act]taaa|ttta[agt]cct',
        'aggg[acg]aaa|ttt[cgt]ccct',
        'agggt[cgt]aa|tt[acg]accct',
        'agggta[cgt]a|t[acg]taccct',
        'agggtaa[cgt]|[acg]ttaccct'
].each{
    println "$it " + (seq =~ it).getCount()
}

[
        B: '(c|g|t)',
        D: '(a|g|t)',
        H: '(a|c|t)',
        K: '(g|t)',
        M: '(a|c)',
        N: '(a|c|g|t)',
        R: '(a|g)',
        S: '(c|t)',
        V: '(a|c|g)',
        W: '(a|t)',
        Y: '(c|t)'
].each { f, r ->
    seq = (seq =~ f).replaceAll(r)
}

println ''
println initialLength
println codeLength
println seq.length()

      
Groovyc Indy Static
Lines Removed 14 14 0
Total Lines - Before 740 468 0
Percentage of Lines Removed 1.9 3.0 Error

Benchmarks

For parameter: 1

Groovyc Indy Static
Benchmark Average - Before 6017 6022 N/A
Benchmark Average - After 6017 6022 N/A
Benchmark Std Dev - Before 2.33 5.46 N/A
Benchmark Std Dev - After 1.92 6.2 N/A

BEFORE

Groovyc (Legacy)

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

  public regexdna();
    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 regexdna(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 regexdna
      12: aload_0
      13: invokeinterface #35,  4           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      18: pop
      19: return

  public java.lang.Object run();
    Code:
       0: invokestatic  #17                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aload_1
       5: ldc           #40                 // int 1
       7: aaload
       8: ldc           #42                 // class java/lang/StringBuffer
      10: invokeinterface #46,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callConstructor:(Ljava/lang/Object;)Ljava/lang/Object;
      15: new           #48                 // class groovy/lang/Reference
      18: dup_x1
      19: swap
      20: invokespecial #51                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      23: astore_2
      24: aload_2
      25: pop
      26: aload_1
      27: ldc           #52                 // int 2
      29: aaload
      30: aload_1
      31: ldc           #53                 // int 3
      33: aaload
      34: aload_1
      35: ldc           #54                 // int 4
      37: aaload
      38: aload_1
      39: ldc           #55                 // int 5
      41: aaload
      42: ldc           #57                 // class java/lang/System
      44: invokeinterface #60,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
      49: invokeinterface #62,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      54: ldc           #64                 // String \n
      56: invokeinterface #67,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      61: ldc           #64                 // String \n
      63: invokeinterface #67,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      68: astore_3
      69: aload_3
      70: aload_2
      71: checkcast     #48                 // class groovy/lang/Reference
      74: swap
      75: invokevirtual #70                 // Method groovy/lang/Reference.set:(Ljava/lang/Object;)V
      78: aload_3
      79: pop
      80: aload_1
      81: ldc           #71                 // int 6
      83: aaload
      84: aload_2
      85: invokevirtual #74                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      88: invokeinterface #62,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      93: astore        4
      95: aload         4
      97: ldc           #2                  // class regexdna
      99: aload_0
     100: ldc           #76                 // String initialLength
     102: checkcast     #78                 // class java/lang/String
     105: invokestatic  #84                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setGroovyObjectProperty:(Ljava/lang/Object;Ljava/lang/Class;Lgroovy/lang/GroovyObject;Ljava/lang/String;)V
     108: aload         4
     110: pop
     111: aload_1
     112: ldc           #85                 // int 7
     114: aaload
     115: aload_2
     116: invokevirtual #74                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     119: ldc           #87                 // String >.*\n|\n
     121: invokestatic  #91                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.findRegex:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/regex/Matcher;
     124: ldc           #93                 // String
     126: invokeinterface #67,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     131: astore        5
     133: aload         5
     135: aload_2
     136: checkcast     #48                 // class groovy/lang/Reference
     139: swap
     140: invokevirtual #70                 // Method groovy/lang/Reference.set:(Ljava/lang/Object;)V
     143: aload         5
     145: pop
     146: aload_1
     147: ldc           #94                 // int 8
     149: aaload
     150: aload_2
     151: invokevirtual #74                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     154: invokeinterface #62,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     159: astore        6
     161: aload         6
     163: ldc           #2                  // class regexdna
     165: aload_0
     166: ldc           #96                 // String codeLength
     168: checkcast     #78                 // class java/lang/String
     171: invokestatic  #84                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setGroovyObjectProperty:(Ljava/lang/Object;Ljava/lang/Class;Lgroovy/lang/GroovyObject;Ljava/lang/String;)V
     174: aload         6
     176: pop
     177: aload_1
     178: ldc           #97                 // int 9
     180: aaload
     181: bipush        9
     183: anewarray     #99                 // class java/lang/Object
     186: dup
     187: iconst_0
     188: ldc           #101                // String agggtaaa|tttaccct
     190: aastore
     191: dup
     192: iconst_1
     193: ldc           #103                // String [cgt]gggtaaa|tttaccc[acg]
     195: aastore
     196: dup
     197: iconst_2
     198: ldc           #105                // String a[act]ggtaaa|tttacc[agt]t
     200: aastore
     201: dup
     202: iconst_3
     203: ldc           #107                // String ag[act]gtaaa|tttac[agt]ct
     205: aastore
     206: dup
     207: iconst_4
     208: ldc           #109                // String agg[act]taaa|ttta[agt]cct
     210: aastore
     211: dup
     212: iconst_5
     213: ldc           #111                // String aggg[acg]aaa|ttt[cgt]ccct
     215: aastore
     216: dup
     217: bipush        6
     219: ldc           #113                // String agggt[cgt]aa|tt[acg]accct
     221: aastore
     222: dup
     223: bipush        7
     225: ldc           #115                // String agggta[cgt]a|t[acg]taccct
     227: aastore
     228: dup
     229: bipush        8
     231: ldc           #117                // String agggtaa[cgt]|[acg]ttaccct
     233: aastore
     234: invokestatic  #121                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
     237: new           #123                // class regexdna$_run_closure1
     240: dup
     241: aload_0
     242: aload_0
     243: aload_2
     244: invokespecial #126                // Method regexdna$_run_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     247: invokeinterface #67,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     252: pop
     253: aload_1
     254: ldc           #127                // int 10
     256: aaload
     257: bipush        22
     259: anewarray     #99                 // class java/lang/Object
     262: dup
     263: iconst_0
     264: ldc           #129                // String B
     266: aastore
     267: dup
     268: iconst_1
     269: ldc           #131                // String (c|g|t)
     271: aastore
     272: dup
     273: iconst_2
     274: ldc           #133                // String D
     276: aastore
     277: dup
     278: iconst_3
     279: ldc           #135                // String (a|g|t)
     281: aastore
     282: dup
     283: iconst_4
     284: ldc           #137                // String H
     286: aastore
     287: dup
     288: iconst_5
     289: ldc           #139                // String (a|c|t)
     291: aastore
     292: dup
     293: bipush        6
     295: ldc           #141                // String K
     297: aastore
     298: dup
     299: bipush        7
     301: ldc           #143                // String (g|t)
     303: aastore
     304: dup
     305: bipush        8
     307: ldc           #145                // String M
     309: aastore
     310: dup
     311: bipush        9
     313: ldc           #147                // String (a|c)
     315: aastore
     316: dup
     317: bipush        10
     319: ldc           #149                // String N
     321: aastore
     322: dup
     323: bipush        11
     325: ldc           #151                // String (a|c|g|t)
     327: aastore
     328: dup
     329: bipush        12
     331: ldc           #153                // String R
     333: aastore
     334: dup
     335: bipush        13
     337: ldc           #155                // String (a|g)
     339: aastore
     340: dup
     341: bipush        14
     343: ldc           #157                // String S
     345: aastore
     346: dup
     347: bipush        15
     349: ldc           #159                // String (c|t)
     351: aastore
     352: dup
     353: bipush        16
     355: ldc           #161                // String V
     357: aastore
     358: dup
     359: bipush        17
     361: ldc           #163                // String (a|c|g)
     363: aastore
     364: dup
     365: bipush        18
     367: ldc           #165                // String W
     369: aastore
     370: dup
     371: bipush        19
     373: ldc           #167                // String (a|t)
     375: aastore
     376: dup
     377: bipush        20
     379: ldc           #169                // String Y
     381: aastore
     382: dup
     383: bipush        21
     385: ldc           #159                // String (c|t)
     387: aastore
     388: invokestatic  #173                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createMap:([Ljava/lang/Object;)Ljava/util/Map;
     391: new           #175                // class regexdna$_run_closure2
     394: dup
     395: aload_0
     396: aload_0
     397: aload_2
     398: invokespecial #176                // Method regexdna$_run_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     401: invokeinterface #67,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     406: pop
     407: aload_1
     408: ldc           #177                // int 11
     410: aaload
     411: aload_0
     412: ldc           #93                 // String
     414: invokeinterface #181,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
     419: pop
     420: aload_1
     421: ldc           #182                // int 12
     423: aaload
     424: aload_0
     425: aload_1
     426: ldc           #183                // int 13
     428: aaload
     429: aload_0
     430: invokeinterface #186,  2          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
     435: invokeinterface #181,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
     440: pop
     441: aload_1
     442: ldc           #187                // int 14
     444: aaload
     445: aload_0
     446: aload_1
     447: ldc           #188                // int 15
     449: aaload
     450: aload_0
     451: invokeinterface #186,  2          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callGroovyObjectGetProperty:(Ljava/lang/Object;)Ljava/lang/Object;
     456: invokeinterface #181,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
     461: pop
     462: aload_1
     463: ldc           #189                // int 16
     465: aaload
     466: aload_0
     467: aload_1
     468: ldc           #190                // int 17
     470: aaload
     471: aload_2
     472: invokevirtual #74                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     475: invokeinterface #62,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     480: invokeinterface #181,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
     485: areturn
     486: aconst_null
     487: areturn

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

        

Invoke Dynamic

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

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

  public regexdna(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 regexdna
       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: ldc           #44                 // class java/lang/StringBuffer
       2: invokedynamic #49,  0             // InvokeDynamic #1:init:(Ljava/lang/Class;)Ljava/lang/Object;
       7: new           #51                 // class groovy/lang/Reference
      10: dup_x1
      11: swap
      12: invokespecial #54                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      15: astore_1
      16: aload_1
      17: pop
      18: ldc           #56                 // class java/lang/System
      20: invokedynamic #61,  0             // InvokeDynamic #2:getProperty:(Ljava/lang/Class;)Ljava/lang/Object;
      25: invokedynamic #66,  0             // InvokeDynamic #3:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      30: ldc           #68                 // String \n
      32: invokedynamic #73,  0             // InvokeDynamic #4:invoke:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      37: ldc           #68                 // String \n
      39: invokedynamic #76,  0             // InvokeDynamic #5:invoke:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      44: astore_2
      45: aload_2
      46: aload_1
      47: checkcast     #51                 // class groovy/lang/Reference
      50: swap
      51: invokevirtual #79                 // Method groovy/lang/Reference.set:(Ljava/lang/Object;)V
      54: aload_2
      55: pop
      56: aload_1
      57: invokevirtual #82                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      60: invokedynamic #85,  0             // InvokeDynamic #6:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      65: astore_3
      66: aload_3
      67: ldc           #2                  // class regexdna
      69: aload_0
      70: ldc           #87                 // String initialLength
      72: checkcast     #89                 // class java/lang/String
      75: invokestatic  #95                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setGroovyObjectProperty:(Ljava/lang/Object;Ljava/lang/Class;Lgroovy/lang/GroovyObject;Ljava/lang/String;)V
      78: aload_3
      79: pop
      80: aload_1
      81: invokevirtual #82                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      84: ldc           #97                 // String >.*\n|\n
      86: invokestatic  #101                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.findRegex:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/regex/Matcher;
      89: ldc           #103                // String
      91: invokedynamic #106,  0            // InvokeDynamic #7:invoke:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      96: astore        4
      98: aload         4
     100: aload_1
     101: checkcast     #51                 // class groovy/lang/Reference
     104: swap
     105: invokevirtual #79                 // Method groovy/lang/Reference.set:(Ljava/lang/Object;)V
     108: aload         4
     110: pop
     111: aload_1
     112: invokevirtual #82                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     115: invokedynamic #85,  0             // InvokeDynamic #6:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
     120: astore        5
     122: aload         5
     124: ldc           #2                  // class regexdna
     126: aload_0
     127: ldc           #108                // String codeLength
     129: checkcast     #89                 // class java/lang/String
     132: invokestatic  #95                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setGroovyObjectProperty:(Ljava/lang/Object;Ljava/lang/Class;Lgroovy/lang/GroovyObject;Ljava/lang/String;)V
     135: aload         5
     137: pop
     138: bipush        9
     140: anewarray     #110                // class java/lang/Object
     143: dup
     144: iconst_0
     145: ldc           #112                // String agggtaaa|tttaccct
     147: aastore
     148: dup
     149: iconst_1
     150: ldc           #114                // String [cgt]gggtaaa|tttaccc[acg]
     152: aastore
     153: dup
     154: iconst_2
     155: ldc           #116                // String a[act]ggtaaa|tttacc[agt]t
     157: aastore
     158: dup
     159: iconst_3
     160: ldc           #118                // String ag[act]gtaaa|tttac[agt]ct
     162: aastore
     163: dup
     164: iconst_4
     165: ldc           #120                // String agg[act]taaa|ttta[agt]cct
     167: aastore
     168: dup
     169: iconst_5
     170: ldc           #122                // String aggg[acg]aaa|ttt[cgt]ccct
     172: aastore
     173: dup
     174: bipush        6
     176: ldc           #124                // String agggt[cgt]aa|tt[acg]accct
     178: aastore
     179: dup
     180: bipush        7
     182: ldc           #126                // String agggta[cgt]a|t[acg]taccct
     184: aastore
     185: dup
     186: bipush        8
     188: ldc           #128                // String agggtaa[cgt]|[acg]ttaccct
     190: aastore
     191: invokestatic  #132                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList:([Ljava/lang/Object;)Ljava/util/List;
     194: new           #134                // class regexdna$_run_closure1
     197: dup
     198: aload_0
     199: aload_0
     200: aload_1
     201: invokespecial #137                // Method regexdna$_run_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     204: invokedynamic #142,  0            // InvokeDynamic #8:invoke:(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/lang/Object;
     209: pop
     210: bipush        22
     212: anewarray     #110                // class java/lang/Object
     215: dup
     216: iconst_0
     217: ldc           #144                // String B
     219: aastore
     220: dup
     221: iconst_1
     222: ldc           #146                // String (c|g|t)
     224: aastore
     225: dup
     226: iconst_2
     227: ldc           #148                // String D
     229: aastore
     230: dup
     231: iconst_3
     232: ldc           #150                // String (a|g|t)
     234: aastore
     235: dup
     236: iconst_4
     237: ldc           #152                // String H
     239: aastore
     240: dup
     241: iconst_5
     242: ldc           #154                // String (a|c|t)
     244: aastore
     245: dup
     246: bipush        6
     248: ldc           #156                // String K
     250: aastore
     251: dup
     252: bipush        7
     254: ldc           #158                // String (g|t)
     256: aastore
     257: dup
     258: bipush        8
     260: ldc           #160                // String M
     262: aastore
     263: dup
     264: bipush        9
     266: ldc           #162                // String (a|c)
     268: aastore
     269: dup
     270: bipush        10
     272: ldc           #164                // String N
     274: aastore
     275: dup
     276: bipush        11
     278: ldc           #166                // String (a|c|g|t)
     280: aastore
     281: dup
     282: bipush        12
     284: ldc           #168                // String R
     286: aastore
     287: dup
     288: bipush        13
     290: ldc           #170                // String (a|g)
     292: aastore
     293: dup
     294: bipush        14
     296: ldc           #172                // String S
     298: aastore
     299: dup
     300: bipush        15
     302: ldc           #174                // String (c|t)
     304: aastore
     305: dup
     306: bipush        16
     308: ldc           #176                // String V
     310: aastore
     311: dup
     312: bipush        17
     314: ldc           #178                // String (a|c|g)
     316: aastore
     317: dup
     318: bipush        18
     320: ldc           #180                // String W
     322: aastore
     323: dup
     324: bipush        19
     326: ldc           #182                // String (a|t)
     328: aastore
     329: dup
     330: bipush        20
     332: ldc           #184                // String Y
     334: aastore
     335: dup
     336: bipush        21
     338: ldc           #174                // String (c|t)
     340: aastore
     341: invokestatic  #188                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createMap:([Ljava/lang/Object;)Ljava/util/Map;
     344: new           #190                // class regexdna$_run_closure2
     347: dup
     348: aload_0
     349: aload_0
     350: aload_1
     351: invokespecial #191                // Method regexdna$_run_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     354: invokedynamic #194,  0            // InvokeDynamic #8:invoke:(Ljava/util/Map;Lgroovy/lang/Closure;)Ljava/lang/Object;
     359: pop
     360: aload_0
     361: ldc           #103                // String
     363: invokedynamic #200,  0            // InvokeDynamic #9:invoke:(Lregexdna;Ljava/lang/String;)Ljava/lang/Object;
     368: pop
     369: aload_0
     370: aload_0
     371: invokedynamic #204,  0            // InvokeDynamic #10:getProperty:(Lregexdna;)Ljava/lang/Object;
     376: invokedynamic #207,  0            // InvokeDynamic #9:invoke:(Lregexdna;Ljava/lang/Object;)Ljava/lang/Object;
     381: pop
     382: aload_0
     383: aload_0
     384: invokedynamic #208,  0            // InvokeDynamic #11:getProperty:(Lregexdna;)Ljava/lang/Object;
     389: invokedynamic #207,  0            // InvokeDynamic #9:invoke:(Lregexdna;Ljava/lang/Object;)Ljava/lang/Object;
     394: pop
     395: aload_0
     396: aload_1
     397: invokevirtual #82                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     400: invokedynamic #85,  0             // InvokeDynamic #6:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
     405: invokedynamic #207,  0            // InvokeDynamic #9:invoke:(Lregexdna;Ljava/lang/Object;)Ljava/lang/Object;
     410: areturn
     411: nop
     412: athrow

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

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/regexdna.groovy: 14: [Static type checking] - The variable [codeLength] is undeclared.
 @ line 14, column 1.
   codeLength = seq.length()
   ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/regexdna.groovy: 47: [Static type checking] - The variable [initialLength] is undeclared.
 @ line 47, column 9.
   println initialLength
           ^

/Users/jstrater/Documents/dev/groovy-compiler-project/build/resources/test/scripts/regexdna.groovy: 48: [Static type checking] - The variable [codeLength] is undeclared.
 @ line 48, column 9.
   println codeLength
           ^

4 errors


        

AFTER

Groovyc (Legacy)

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

  public regexdna$_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 seq: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_0
       9: aload_2
      10: ldc           #41                 // int 1
      12: aaload
      13: new           #43                 // class org/codehaus/groovy/runtime/GStringImpl
      16: dup
      17: iconst_1
      18: anewarray     #45                 // class java/lang/Object
      21: dup
      22: iconst_0
      23: aload_1
      24: aastore
      25: iconst_2
      26: anewarray     #47                 // class java/lang/String
      29: dup
      30: iconst_0
      31: ldc           #49                 // String
      33: aastore
      34: dup
      35: iconst_1
      36: ldc           #51                 // String
      38: aastore
      39: invokespecial #54                 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      42: aload_2
      43: ldc           #55                 // int 2
      45: aaload
      46: aload_0
      47: getfield      #32                 // Field seq:Lgroovy/lang/Reference;
      50: invokevirtual #60                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      53: aload_1
      54: invokestatic  #66                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.findRegex:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/regex/Matcher;
      57: invokeinterface #71,  2           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
      62: invokeinterface #74,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      67: invokeinterface #78,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
      72: areturn
      73: aconst_null
      74: areturn

  public java.lang.Object getSeq();
    Code:
       0: invokestatic  #27                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: aload_0
       5: getfield      #32                 // Field seq:Lgroovy/lang/Reference;
       8: invokevirtual #60                 // 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 #82                 // 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 #88                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class regexdna$_run_closure1
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #92                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #94                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #88                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #100                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #94                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #103                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn
}

        

Invoke Dynamic

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

  public regexdna$_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 seq:Lgroovy/lang/Reference;
      16: return

  public java.lang.Object doCall(java.lang.Object);
    Code:
       0: aload_0
       1: new           #35                 // class org/codehaus/groovy/runtime/GStringImpl
       4: dup
       5: iconst_1
       6: anewarray     #37                 // class java/lang/Object
       9: dup
      10: iconst_0
      11: aload_1
      12: aastore
      13: iconst_2
      14: anewarray     #39                 // class java/lang/String
      17: dup
      18: iconst_0
      19: ldc           #41                 // String
      21: aastore
      22: dup
      23: iconst_1
      24: ldc           #43                 // String
      26: aastore
      27: invokespecial #46                 // Method org/codehaus/groovy/runtime/GStringImpl."<init>":([Ljava/lang/Object;[Ljava/lang/String;)V
      30: aload_0
      31: getfield      #26                 // Field seq:Lgroovy/lang/Reference;
      34: invokevirtual #51                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      37: aload_1
      38: invokestatic  #57                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.findRegex:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/regex/Matcher;
      41: invokedynamic #70,  0             // InvokeDynamic #0:invoke:(Ljava/lang/Object;)Ljava/lang/Object;
      46: invokedynamic #75,  0             // InvokeDynamic #1:invoke:(Lgroovy/lang/GString;Ljava/lang/Object;)Ljava/lang/Object;
      51: invokedynamic #81,  0             // InvokeDynamic #2:invoke:(Lregexdna$_run_closure1;Ljava/lang/Object;)Ljava/lang/Object;
      56: areturn
      57: nop
      58: athrow

  public java.lang.Object getSeq();
    Code:
       0: aload_0
       1: getfield      #26                 // Field seq:Lgroovy/lang/Reference;
       4: invokevirtual #51                 // 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 #87                 // 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 #93                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class regexdna$_run_closure1
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #97                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #99                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #93                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #105                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #99                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #108                // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn
}

        

Static Compilation