Bytecode Analysis for script: TestExampleMultiAssignment

        class TestExampleMultiAssignment {
    public static void main(String[] args) {
        def test, other
        test = other = 'Hello World'
    }
}

      
Groovyc Indy Static
Lines Removed 8 8 8
Total Lines - Before 134 103 100
Percentage of Lines Removed 6.0 7.8 8.0

Benchmarks

For parameter: null

Groovyc Indy Static
Benchmark Average - Before 105 104 102
Benchmark Average - After 105 100 100
Benchmark Std Dev - Before 2.24 2.1 3.27
Benchmark Std Dev - After 2.58 1.99 2.42

BEFORE

Groovyc (Legacy)

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

  public TestExampleMultiAssignment();
    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 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: aload_2
       7: pop
       8: aconst_null
       9: astore_3
      10: aload_3
      11: pop
      12: ldc           #33                 // String Hello World
      14: astore        4
      16: aload         4
      18: astore_3
      19: aload         4
      21: astore        5
      23: aload         5
      25: astore_2
      26: aload         5
      28: pop
      29: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #42                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #48                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #50                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #42                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #56                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #50                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #59                 // 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 #64                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #69,  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 #64                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #74,  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 #64                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #79,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

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

  public TestExampleMultiAssignment();
    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 void main(java.lang.String...);
    Code:
       0: aconst_null
       1: astore_1
       2: aload_1
       3: pop
       4: aconst_null
       5: astore_2
       6: aload_2
       7: pop
       8: ldc           #29                 // String Hello World
      10: astore_3
      11: aload_3
      12: astore_2
      13: aload_3
      14: astore        4
      16: aload         4
      18: astore_1
      19: aload         4
      21: pop
      22: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #44                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #55                 // 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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #65,  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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #70,  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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #75,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

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

  public TestExampleMultiAssignment();
    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 void main(java.lang.String...);
    Code:
       0: aconst_null
       1: astore_1
       2: aload_1
       3: pop
       4: aconst_null
       5: astore_2
       6: aload_2
       7: pop
       8: ldc           #29                 // String Hello World
      10: astore_3
      11: aload_3
      12: astore_2
      13: aload_3
      14: astore        4
      16: aload         4
      18: astore_1
      19: aload         4
      21: pop
      22: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #44                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #55                 // 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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #65,  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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #70,  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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #75,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

AFTER

Groovyc (Legacy)

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

  public TestExampleMultiAssignment();
    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 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: aconst_null
       7: astore_3
       8: ldc           #35                 // String Hello World
      10: astore        4
      12: aload         4
      14: astore_3
      15: aload         4
      17: astore        5
      19: aload         5
      21: astore_2
      22: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #44                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #50                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #52                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #44                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #58                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #52                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #61                 // 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 #66                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #71,  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 #66                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #76,  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 #66                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #81,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

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

  public TestExampleMultiAssignment();
    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 void main(java.lang.String...);
    Code:
       0: aconst_null
       1: astore_1
       2: aconst_null
       3: astore_2
       4: ldc           #29                 // String Hello World
       6: astore_3
       7: aload_3
       8: astore_2
       9: aload_3
      10: astore        4
      12: aload         4
      14: astore_1
      15: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #44                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #55                 // 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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #65,  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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #70,  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 #62                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #75,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

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

  public TestExampleMultiAssignment();
    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 void main(java.lang.String...);
    Code:
       0: aconst_null
       1: astore_1
       2: aconst_null
       3: astore_2
       4: ldc           #29                 // String Hello World
       6: astore_3
       7: aload_3
       8: astore_2
       9: aload_3
      10: astore        4
      12: aload         4
      14: astore_1
      15: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExampleMultiAssignment
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #44                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #38                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #46                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #55                 // 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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #65,  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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #70,  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 #60                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #75,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}