public class org.jruby.util.RecursiveComparator
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.util.RecursiveComparator
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.RecursiveComparator this
         0: .line 16
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.jruby.util.RecursiveComparator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/RecursiveComparator;

  public static <T> org.jruby.runtime.builtin.IRubyObject compare(org.jruby.runtime.ThreadContext, T, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Ljava/lang/Object;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // java.lang.Object invokable
        start local 2 // org.jruby.runtime.builtin.IRubyObject a
        start local 3 // org.jruby.runtime.builtin.IRubyObject b
         0: .line 19
            aload 2 /* a */
            aload 3 /* b */
            if_acmpne 2
         1: .line 20
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.tru:Lorg/jruby/RubyBoolean;
            areturn
         2: .line 23
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 4 /* clear */
        start local 4 // boolean clear
         3: .line 28
            aload 2 /* a */
            instanceof org.jruby.RubyHash
            ifeq 4
            aload 3 /* b */
            instanceof org.jruby.RubyHash
            ifne 5
         4: .line 29
      StackMap locals: int
      StackMap stack:
            aload 2 /* a */
            instanceof org.jruby.RubyArray
            ifeq 16
            aload 3 /* b */
            instanceof org.jruby.RubyArray
            ifeq 16
         5: .line 31
      StackMap locals:
      StackMap stack:
            new org.jruby.util.RecursiveComparator$Pair
            dup
            aload 2 /* a */
            aload 3 /* b */
            invokespecial org.jruby.util.RecursiveComparator$Pair.<init>:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)V
            astore 6 /* pair */
        start local 6 // org.jruby.util.RecursiveComparator$Pair pair
         6: .line 33
            aload 0 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getRecursiveSet:()Ljava/util/Set;
            dup
            astore 5 /* seen */
        start local 5 // java.util.Set seen
         7: ifnonnull 11
         8: .line 36
            aload 0 /* context */
            new java.util.HashSet
            dup
            iconst_4
            invokespecial java.util.HashSet.<init>:(I)V
            dup
            astore 5 /* seen */
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
         9: .line 37
            iconst_1
            istore 4 /* clear */
        10: .line 38
            goto 15
        11: .line 39
      StackMap locals: java.util.Set org.jruby.util.RecursiveComparator$Pair
      StackMap stack:
            aload 5 /* seen */
            aload 6 /* pair */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 15
        12: .line 40
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.tru:Lorg/jruby/RubyBoolean;
            astore 8
        13: .line 57
            iload 4 /* clear */
            ifeq 14
            aload 0 /* context */
            aconst_null
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
        14: .line 40
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int java.util.Set org.jruby.util.RecursiveComparator$Pair top org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 8
            areturn
        15: .line 43
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int java.util.Set org.jruby.util.RecursiveComparator$Pair
      StackMap stack:
            aload 5 /* seen */
            aload 6 /* pair */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // org.jruby.util.RecursiveComparator$Pair pair
        end local 5 // java.util.Set seen
        16: .line 46
      StackMap locals:
      StackMap stack:
            aload 2 /* a */
            instanceof org.jruby.RubyHash
            ifeq 21
        17: .line 47
            aload 2 /* a */
            checkcast org.jruby.RubyHash
            astore 6 /* hash */
        start local 6 // org.jruby.RubyHash hash
        18: .line 48
            aload 6 /* hash */
            aload 0 /* context */
            aload 1 /* invokable */
            checkcast org.jruby.RubyHash$VisitorWithState
            aload 3 /* b */
            invokevirtual org.jruby.RubyHash.compare:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/RubyHash$VisitorWithState;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyBoolean;
            astore 8
        19: .line 57
            iload 4 /* clear */
            ifeq 20
            aload 0 /* context */
            aconst_null
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
        20: .line 48
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int top org.jruby.RubyHash top org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 8
            areturn
        end local 6 // org.jruby.RubyHash hash
        21: .line 50
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int
      StackMap stack:
            aload 2 /* a */
            instanceof org.jruby.RubyArray
            ifeq 26
        22: .line 51
            aload 2 /* a */
            checkcast org.jruby.RubyArray
            astore 6 /* array */
        start local 6 // org.jruby.RubyArray array
        23: .line 52
            aload 6 /* array */
            aload 0 /* context */
            aload 1 /* invokable */
            checkcast org.jruby.runtime.CallSite
            aload 3 /* b */
            invokevirtual org.jruby.RubyArray.compare:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/CallSite;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyBoolean;
            astore 8
        24: .line 57
            iload 4 /* clear */
            ifeq 25
            aload 0 /* context */
            aconst_null
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
        25: .line 52
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int top org.jruby.RubyArray top org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 8
            areturn
        end local 6 // org.jruby.RubyArray array
        26: .line 54
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int
      StackMap stack:
            aload 1 /* invokable */
            checkcast org.jruby.runtime.CallSite
            aload 0 /* context */
            aload 2 /* a */
            aload 2 /* a */
            aload 3 /* b */
            invokevirtual org.jruby.runtime.CallSite.call:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 8
        27: .line 57
            iload 4 /* clear */
            ifeq 28
            aload 0 /* context */
            aconst_null
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
        28: .line 54
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int top top top org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 8
            areturn
        29: .line 56
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int
      StackMap stack: java.lang.Throwable
            astore 7
        30: .line 57
            iload 4 /* clear */
            ifeq 31
            aload 0 /* context */
            aconst_null
            invokevirtual org.jruby.runtime.ThreadContext.setRecursiveSet:(Ljava/util/Set;)V
        31: .line 58
      StackMap locals: org.jruby.runtime.ThreadContext java.lang.Object org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int top top java.lang.Throwable
      StackMap stack:
            aload 7
            athrow
        end local 4 // boolean clear
        end local 3 // org.jruby.runtime.builtin.IRubyObject b
        end local 2 // org.jruby.runtime.builtin.IRubyObject a
        end local 1 // java.lang.Object invokable
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   32     0    context  Lorg/jruby/runtime/ThreadContext;
            0   32     1  invokable  TT;
            0   32     2          a  Lorg/jruby/runtime/builtin/IRubyObject;
            0   32     3          b  Lorg/jruby/runtime/builtin/IRubyObject;
            3   32     4      clear  Z
            7   16     5       seen  Ljava/util/Set<Lorg/jruby/util/RecursiveComparator$Pair;>;
            6   16     6       pair  Lorg/jruby/util/RecursiveComparator$Pair;
           18   21     6       hash  Lorg/jruby/RubyHash;
           23   26     6      array  Lorg/jruby/RubyArray;
      Exception table:
        from    to  target  type
           3    13      29  any
          15    19      29  any
          21    24      29  any
          26    27      29  any
    Signature: <T:Ljava/lang/Object;>(Lorg/jruby/runtime/ThreadContext;TT;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
           Name  Flags
      context    
      invokable  
      a          
      b          
}
SourceFile: "RecursiveComparator.java"
NestMembers:
  org.jruby.util.RecursiveComparator$Pair
InnerClasses:
  public abstract VisitorWithState = org.jruby.RubyHash$VisitorWithState of org.jruby.RubyHash
  public Pair = org.jruby.util.RecursiveComparator$Pair of org.jruby.util.RecursiveComparator