public class org.jruby.specialized.RubyObjectSpecializer
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.specialized.RubyObjectSpecializer
  super_class: java.lang.Object
{
  public static final java.lang.invoke.MethodHandles$Lookup LOOKUP;
    descriptor: Ljava/lang/invoke/MethodHandles$Lookup;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  private static final org.jruby.util.collections.NonBlockingHashMapLong<org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator> SPECIALIZED_CLASSES;
    descriptor: Lorg/jruby/util/collections/NonBlockingHashMapLong;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/jruby/util/collections/NonBlockingHashMapLong<Lorg/jruby/specialized/RubyObjectSpecializer$ClassAndAllocator;>;

  private static final org.jruby.util.ClassDefiningClassLoader LOADER;
    descriptor: Lorg/jruby/util/ClassDefiningClassLoader;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 61
            invokestatic java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup;
            putstatic org.jruby.specialized.RubyObjectSpecializer.LOOKUP:Ljava/lang/invoke/MethodHandles$Lookup;
         1: .line 67
            new org.jruby.util.collections.NonBlockingHashMapLong
            dup
            invokespecial org.jruby.util.collections.NonBlockingHashMapLong.<init>:()V
            putstatic org.jruby.specialized.RubyObjectSpecializer.SPECIALIZED_CLASSES:Lorg/jruby/util/collections/NonBlockingHashMapLong;
         2: .line 69
            new org.jruby.util.OneShotClassLoader
            dup
            invokestatic org.jruby.Ruby.getClassLoader:()Ljava/lang/ClassLoader;
            invokespecial org.jruby.util.OneShotClassLoader.<init>:(Ljava/lang/ClassLoader;)V
            putstatic org.jruby.specialized.RubyObjectSpecializer.LOADER:Lorg/jruby/util/ClassDefiningClassLoader;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.specialized.RubyObjectSpecializer this
         0: .line 59
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.jruby.specialized.RubyObjectSpecializer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/specialized/RubyObjectSpecializer;

  private static org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator getClassForSize(int);
    descriptor: (I)Lorg/jruby/specialized/RubyObjectSpecializer$ClassAndAllocator;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // int size
         0: .line 64
            getstatic org.jruby.specialized.RubyObjectSpecializer.SPECIALIZED_CLASSES:Lorg/jruby/util/collections/NonBlockingHashMapLong;
            iload 0 /* size */
            i2l
            invokevirtual org.jruby.util.collections.NonBlockingHashMapLong.get:(J)Ljava/lang/Object;
            checkcast org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator
            areturn
        end local 0 // int size
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  size  I
    MethodParameters:
      Name  Flags
      size  

  public static org.jruby.runtime.ObjectAllocator specializeForVariables(org.jruby.RubyClass, java.util.Set<java.lang.String>);
    descriptor: (Lorg/jruby/RubyClass;Ljava/util/Set;)Lorg/jruby/runtime/ObjectAllocator;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=9, args_size=2
        start local 0 // org.jruby.RubyClass klass
        start local 1 // java.util.Set foundVariables
         0: .line 82
            aload 1 /* foundVariables */
            invokeinterface java.util.Set.size:()I
            istore 2 /* size */
        start local 2 // int size
         1: .line 85
            iload 2 /* size */
            getstatic org.jruby.util.cli.Options.REIFY_VARIABLES_MAX:Lcom/headius/options/Option;
            invokevirtual com.headius.options.Option.load:()Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            invokestatic java.lang.Math.min:(II)I
            istore 2 /* size */
         2: .line 87
            aconst_null
            astore 3 /* cna */
        start local 3 // org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator cna
         3: .line 88
            aconst_null
            astore 4 /* className */
        start local 4 // java.lang.String className
         4: .line 90
            getstatic org.jruby.util.cli.Options.REIFY_VARIABLES_NAME:Lcom/headius/options/Option;
            invokevirtual com.headius.options.Option.load:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 11
         5: .line 91
            aload 0 /* klass */
            invokevirtual org.jruby.RubyClass.getName:()Ljava/lang/String;
            astore 4 /* className */
         6: .line 93
            aload 4 /* className */
            ldc "#"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 9
         7: .line 94
            new java.lang.StringBuilder
            dup
            ldc "Anonymous"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* klass */
            invokestatic java.lang.System.identityHashCode:(Ljava/lang/Object;)I
            invokestatic java.lang.Integer.toHexString:(I)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 4 /* className */
         8: .line 95
            goto 14
         9: .line 96
      StackMap locals: int org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator java.lang.String
      StackMap stack:
            aload 4 /* className */
            ldc "::"
            ldc "/"
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
            astore 4 /* className */
        10: .line 98
            goto 14
        11: .line 100
      StackMap locals:
      StackMap stack:
            iload 2 /* size */
            invokestatic org.jruby.specialized.RubyObjectSpecializer.getClassForSize:(I)Lorg/jruby/specialized/RubyObjectSpecializer$ClassAndAllocator;
            astore 3 /* cna */
        12: .line 102
            aload 3 /* cna */
            ifnonnull 14
        13: .line 103
            new java.lang.StringBuilder
            dup
            ldc "RubyObject"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 2 /* size */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 4 /* className */
        14: .line 108
      StackMap locals:
      StackMap stack:
            aload 4 /* className */
            ifnull 32
        15: .line 109
            new java.lang.StringBuilder
            dup
            ldc "org/jruby/gen/"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* className */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 5 /* clsPath */
        start local 5 // java.lang.String clsPath
        16: .line 111
            getstatic org.jruby.specialized.RubyObjectSpecializer.LOADER:Lorg/jruby/util/ClassDefiningClassLoader;
            dup
            astore 6
            monitorenter
        17: .line 115
            getstatic org.jruby.specialized.RubyObjectSpecializer.LOADER:Lorg/jruby/util/ClassDefiningClassLoader;
            aload 5 /* clsPath */
            bipush 47
            bipush 46
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            invokeinterface org.jruby.util.ClassDefiningClassLoader.loadClass:(Ljava/lang/String;)Ljava/lang/Class;
            astore 7 /* specialized */
        start local 7 // java.lang.Class specialized
        18: .line 116
            goto 21
        end local 7 // java.lang.Class specialized
      StackMap locals: org.jruby.RubyClass java.util.Set int org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator java.lang.String java.lang.String org.jruby.util.ClassDefiningClassLoader
      StackMap stack: java.lang.ClassNotFoundException
        19: pop
        20: .line 118
            iload 2 /* size */
            aload 5 /* clsPath */
            invokestatic org.jruby.specialized.RubyObjectSpecializer.generateInternal:(ILjava/lang/String;)Ljava/lang/Class;
            astore 7 /* specialized */
        start local 7 // java.lang.Class specialized
        21: .line 122
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 7 /* specialized */
            invokevirtual java.lang.Class.getDeclaredClasses:()[Ljava/lang/Class;
            iconst_0
            aaload
            invokevirtual java.lang.Class.newInstance:()Ljava/lang/Object;
            checkcast org.jruby.runtime.ObjectAllocator
            astore 8 /* allocator */
        start local 8 // org.jruby.runtime.ObjectAllocator allocator
        22: .line 124
            new org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator
            dup
            aload 7 /* specialized */
            aload 8 /* allocator */
            invokespecial org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.<init>:(Ljava/lang/Class;Lorg/jruby/runtime/ObjectAllocator;)V
            astore 3 /* cna */
        23: .line 126
            getstatic org.jruby.util.cli.Options.REIFY_VARIABLES_NAME:Lcom/headius/options/Option;
            invokevirtual com.headius.options.Option.load:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifne 28
        24: .line 127
            getstatic org.jruby.specialized.RubyObjectSpecializer.SPECIALIZED_CLASSES:Lorg/jruby/util/collections/NonBlockingHashMapLong;
            iload 2 /* size */
            i2l
            aload 3 /* cna */
            invokevirtual org.jruby.util.collections.NonBlockingHashMapLong.put:(JLjava/lang/Object;)Ljava/lang/Object;
            pop
        end local 8 // org.jruby.runtime.ObjectAllocator allocator
        25: .line 129
            goto 28
      StackMap locals:
      StackMap stack: java.lang.Throwable
        26: astore 8 /* t */
        start local 8 // java.lang.Throwable t
        27: .line 130
            new java.lang.RuntimeException
            dup
            aload 8 /* t */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 8 // java.lang.Throwable t
        end local 7 // java.lang.Class specialized
        28: .line 111
      StackMap locals:
      StackMap stack:
            aload 6
            monitorexit
        29: goto 32
      StackMap locals:
      StackMap stack: java.lang.Throwable
        30: aload 6
            monitorexit
        31: athrow
        end local 5 // java.lang.String clsPath
        32: .line 137
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 5 /* offset */
        start local 5 // int offset
        33: .line 140
            aload 1 /* foundVariables */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 42
      StackMap locals: org.jruby.RubyClass java.util.Set int org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator java.lang.String int top java.util.Iterator
      StackMap stack:
        34: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* name */
        start local 6 // java.lang.String name
        35: .line 141
            aload 0 /* klass */
            invokevirtual org.jruby.RubyClass.getVariableTableManager:()Lorg/jruby/runtime/ivars/VariableTableManager;
        36: .line 142
            aload 6 /* name */
        37: .line 143
            getstatic org.jruby.specialized.RubyObjectSpecializer.LOOKUP:Ljava/lang/invoke/MethodHandles$Lookup;
            aload 3 /* cna */
            getfield org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.cls:Ljava/lang/Class;
            new java.lang.StringBuilder
            dup
            ldc "var"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 5 /* offset */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc Ljava/lang/Object;
            invokevirtual java.lang.invoke.MethodHandles$Lookup.findGetter:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;
        38: .line 144
            getstatic org.jruby.specialized.RubyObjectSpecializer.LOOKUP:Ljava/lang/invoke/MethodHandles$Lookup;
            aload 3 /* cna */
            getfield org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.cls:Ljava/lang/Class;
            new java.lang.StringBuilder
            dup
            ldc "var"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 5 /* offset */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc Ljava/lang/Object;
            invokevirtual java.lang.invoke.MethodHandles$Lookup.findSetter:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;
        39: .line 141
            invokevirtual org.jruby.runtime.ivars.VariableTableManager.getVariableAccessorForVar:(Ljava/lang/String;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Lorg/jruby/runtime/ivars/VariableAccessor;
            pop
        40: .line 145
            iinc 5 /* offset */ 1
        41: .line 146
            iload 5 /* offset */
            iload 2 /* size */
            if_icmplt 42
            goto 46
        end local 6 // java.lang.String name
        42: .line 140
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 34
        end local 5 // int offset
        43: .line 148
            goto 46
      StackMap locals: org.jruby.RubyClass java.util.Set int org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator java.lang.String
      StackMap stack: java.lang.ReflectiveOperationException
        44: astore 5 /* e */
        start local 5 // java.lang.ReflectiveOperationException e
        45: .line 149
            new java.lang.RuntimeException
            dup
            aload 5 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.ReflectiveOperationException e
        46: .line 152
      StackMap locals:
      StackMap stack:
            aload 0 /* klass */
            aload 3 /* cna */
            getfield org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.cls:Ljava/lang/Class;
            invokevirtual org.jruby.RubyClass.setReifiedClass:(Ljava/lang/Class;)V
        47: .line 153
            aload 0 /* klass */
            aload 3 /* cna */
            getfield org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.allocator:Lorg/jruby/runtime/ObjectAllocator;
            invokevirtual org.jruby.RubyClass.setAllocator:(Lorg/jruby/runtime/ObjectAllocator;)V
        48: .line 155
            aload 3 /* cna */
            getfield org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator.allocator:Lorg/jruby/runtime/ObjectAllocator;
            areturn
        end local 4 // java.lang.String className
        end local 3 // org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator cna
        end local 2 // int size
        end local 1 // java.util.Set foundVariables
        end local 0 // org.jruby.RubyClass klass
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   49     0           klass  Lorg/jruby/RubyClass;
            0   49     1  foundVariables  Ljava/util/Set<Ljava/lang/String;>;
            1   49     2            size  I
            3   49     3             cna  Lorg/jruby/specialized/RubyObjectSpecializer$ClassAndAllocator;
            4   49     4       className  Ljava/lang/String;
           16   32     5         clsPath  Ljava/lang/String;
           18   19     7     specialized  Ljava/lang/Class;
           21   28     7     specialized  Ljava/lang/Class;
           22   25     8       allocator  Lorg/jruby/runtime/ObjectAllocator;
           27   28     8               t  Ljava/lang/Throwable;
           33   43     5          offset  I
           35   42     6            name  Ljava/lang/String;
           45   46     5               e  Ljava/lang/ReflectiveOperationException;
      Exception table:
        from    to  target  type
          17    18      19  Class java.lang.ClassNotFoundException
          21    25      26  Class java.lang.Throwable
          17    29      30  any
          30    31      30  any
          32    43      44  Class java.lang.NoSuchFieldException
          32    43      44  Class java.lang.IllegalAccessException
    Signature: (Lorg/jruby/RubyClass;Ljava/util/Set<Ljava/lang/String;>;)Lorg/jruby/runtime/ObjectAllocator;
    MethodParameters:
                Name  Flags
      klass           
      foundVariables  

  private static java.lang.Class generateInternal(int, java.lang.String);
    descriptor: (ILjava/lang/String;)Ljava/lang/Class;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
         0: .line 162
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tJiteClass cannot be resolved to a type\n\tJiteClass cannot be resolved to a type\n\tACC_PUBLIC cannot be resolved to a variable\n\tACC_PUBLIC cannot be resolved to a variable\n\tCodeBlock cannot be resolved to a type\n\tACC_PUBLIC cannot be resolved to a variable\n\tCodeBlock cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n\tThe method genGetSwitch(String, int, CodeBlock, int) from the type RubyObjectSpecializer refers to the missing type CodeBlock\n\tACC_PUBLIC cannot be resolved to a variable\n\tCodeBlock cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n\tThe method genPutSwitch(String, int, CodeBlock, int) from the type RubyObjectSpecializer refers to the missing type CodeBlock\n\tJiteClass cannot be resolved to a type\n\tACC_PUBLIC cannot be resolved to a variable\n\tCodeBlock cannot be resolved to a type\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    MethodParameters:
         Name  Flags
      size     
      clsPath  final

  static void genGetSwitch(java.lang.String, int, CodeBlock, int);
    descriptor: (Ljava/lang/String;ILCodeBlock;I)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=4, args_size=4
         0: .line 232
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tCodeBlock cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    MethodParameters:
           Name  Flags
      clsPath    
      size       
      block      
      offsetVar  

  static void genPutSwitch(java.lang.String, int, CodeBlock, int);
    descriptor: (Ljava/lang/String;ILCodeBlock;I)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=4, args_size=4
         0: .line 249
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tCodeBlock cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabelNode cannot be resolved to a type\n\tLabel cannot be resolved to a type\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    MethodParameters:
           Name  Flags
      clsPath    
      size       
      block      
      offsetVar  

  static java.lang.Class defineClass(JiteClass);
    descriptor: (LJiteClass;)Ljava/lang/Class;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
         0: .line 267
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tJiteClass cannot be resolved to a type\n\tJDKVersion cannot be resolved to a variable\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    MethodParameters:
           Name  Flags
      jiteClass  

  static java.lang.String classNameFromJiteClass(JiteClass);
    descriptor: (LJiteClass;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
         0: .line 271
            new java.lang.Error
            dup
            ldc "Unresolved compilation problem: \n\tJiteClass cannot be resolved to a type\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    MethodParameters:
           Name  Flags
      jiteClass  
}
SourceFile: "RubyObjectSpecializer.java"
NestMembers:
  org.jruby.specialized.RubyObjectSpecializer$1  org.jruby.specialized.RubyObjectSpecializer$1$1  org.jruby.specialized.RubyObjectSpecializer$1$2  org.jruby.specialized.RubyObjectSpecializer$1$3  org.jruby.specialized.RubyObjectSpecializer$1$4  org.jruby.specialized.RubyObjectSpecializer$1$4$1  org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  ClassAndAllocator = org.jruby.specialized.RubyObjectSpecializer$ClassAndAllocator of org.jruby.specialized.RubyObjectSpecializer