final class com.oracle.truffle.polyglot.HostAdapterFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.polyglot.HostAdapterFactory
  super_class: java.lang.Object
{
  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 59
            ldc Lcom/oracle/truffle/polyglot/HostAdapterFactory;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.truffle.polyglot.HostAdapterFactory.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.polyglot.HostAdapterFactory this
         0: .line 59
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.polyglot.HostAdapterFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/polyglot/HostAdapterFactory;

  static com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult getAdapterClassFor(com.oracle.truffle.polyglot.PolyglotEngineImpl, com.oracle.truffle.polyglot.HostLanguage$HostContext, java.lang.Class<?>[], );
    descriptor: (Lcom/oracle/truffle/polyglot/PolyglotEngineImpl;Lcom/oracle/truffle/polyglot/HostLanguage$HostContext;[Ljava/lang/Class;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=10, args_size=4
        start local 0 // com.oracle.truffle.polyglot.PolyglotEngineImpl engine
        start local 1 // com.oracle.truffle.polyglot.HostLanguage$HostContext hostContext
        start local 2 // java.lang.Class[] types
        start local 3 // java.lang.Object classOverrides
         0: .line 63
            getstatic com.oracle.truffle.polyglot.HostAdapterFactory.$assertionsDisabled:Z
            ifne 1
            aload 2 /* types */
            arraylength
            ifgt 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 64
      StackMap locals:
      StackMap stack:
            aload 0 /* engine */
            invokevirtual com.oracle.truffle.polyglot.PolyglotEngineImpl.getHostClassCache:()Lcom/oracle/truffle/polyglot/HostClassCache;
            astore 4 /* hostClassCache */
        start local 4 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
         2: .line 65
            aload 1 /* hostContext */
            invokevirtual com.oracle.truffle.polyglot.HostLanguage$HostContext.getClassloader:()Lcom/oracle/truffle/polyglot/HostClassLoader;
            astore 5 /* hostClassLoader */
        start local 5 // com.oracle.truffle.polyglot.HostClassLoader hostClassLoader
         3: .line 66
            aload 3 /* classOverrides */
            ifnonnull 17
         4: .line 67
            aload 2 /* types */
            arraylength
            iconst_1
            if_icmpne 7
         5: .line 68
            aload 0 /* engine */
            aload 2 /* types */
            iconst_0
            aaload
            invokestatic com.oracle.truffle.polyglot.HostClassDesc.forClass:(Lcom/oracle/truffle/polyglot/PolyglotEngineImpl;Ljava/lang/Class;)Lcom/oracle/truffle/polyglot/HostClassDesc;
            astore 6 /* classDesc */
        start local 6 // com.oracle.truffle.polyglot.HostClassDesc classDesc
         6: .line 69
            aload 6 /* classDesc */
            aload 1 /* hostContext */
            invokevirtual com.oracle.truffle.polyglot.HostClassDesc.getAdapter:(Lcom/oracle/truffle/polyglot/HostLanguage$HostContext;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
            areturn
        end local 6 // com.oracle.truffle.polyglot.HostClassDesc classDesc
         7: .line 71
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache com.oracle.truffle.polyglot.HostClassLoader
      StackMap stack:
            aload 1 /* hostContext */
            getfield com.oracle.truffle.polyglot.HostLanguage$HostContext.adapterCache:Ljava/lang/ClassValue;
            aload 2 /* types */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.getTypeForCache:([Ljava/lang/Class;)Ljava/lang/Class;
            invokevirtual java.lang.ClassValue.get:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 6 /* map */
        start local 6 // java.util.Map map
         8: .line 72
            aload 2 /* types */
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            astore 7 /* cacheKey */
        start local 7 // java.util.List cacheKey
         9: .line 73
            aload 6 /* map */
            aload 7 /* cacheKey */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            astore 8 /* result */
        start local 8 // com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult result
        10: .line 74
            aload 8 /* result */
            ifnonnull 16
        11: .line 75
            aload 4 /* hostClassCache */
            aload 2 /* types */
            aload 5 /* hostClassLoader */
            aload 3 /* classOverrides */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.makeAdapterClassFor:(Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
            astore 8 /* result */
        12: .line 76
            aload 8 /* result */
            invokevirtual com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult.isSuccess:()Z
            ifeq 16
        13: .line 77
            aload 6 /* map */
            aload 7 /* cacheKey */
            aload 8 /* result */
            invokeinterface java.util.Map.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            astore 9 /* prev */
        start local 9 // com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult prev
        14: .line 78
            aload 9 /* prev */
            ifnull 16
        15: .line 79
            aload 9 /* prev */
            astore 8 /* result */
        end local 9 // com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult prev
        16: .line 83
      StackMap locals: java.util.Map java.util.List com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
      StackMap stack:
            aload 8 /* result */
            areturn
        end local 8 // com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult result
        end local 7 // java.util.List cacheKey
        end local 6 // java.util.Map map
        17: .line 86
      StackMap locals:
      StackMap stack:
            aload 4 /* hostClassCache */
            aload 2 /* types */
            aload 5 /* hostClassLoader */
            aload 3 /* classOverrides */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.makeAdapterClassFor:(Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
            areturn
        end local 5 // com.oracle.truffle.polyglot.HostClassLoader hostClassLoader
        end local 4 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        end local 3 // java.lang.Object classOverrides
        end local 2 // java.lang.Class[] types
        end local 1 // com.oracle.truffle.polyglot.HostLanguage$HostContext hostContext
        end local 0 // com.oracle.truffle.polyglot.PolyglotEngineImpl engine
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   18     0           engine  Lcom/oracle/truffle/polyglot/PolyglotEngineImpl;
            0   18     1      hostContext  Lcom/oracle/truffle/polyglot/HostLanguage$HostContext;
            0   18     2            types  [Ljava/lang/Class;
            0   18     3   classOverrides  Ljava/lang/Object;
            2   18     4   hostClassCache  Lcom/oracle/truffle/polyglot/HostClassCache;
            3   18     5  hostClassLoader  Lcom/oracle/truffle/polyglot/HostClassLoader;
            6    7     6        classDesc  Lcom/oracle/truffle/polyglot/HostClassDesc;
            8   17     6              map  Ljava/util/Map<Ljava/util/List<Ljava/lang/Class<*>;>;Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;>;
            9   17     7         cacheKey  Ljava/util/List<Ljava/lang/Class<*>;>;
           10   17     8           result  Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
           14   16     9             prev  Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    Signature: (Lcom/oracle/truffle/polyglot/PolyglotEngineImpl;Lcom/oracle/truffle/polyglot/HostLanguage$HostContext;[Ljava/lang/Class<*>;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
                Name  Flags
      engine          
      hostContext     
      types           
      classOverrides  

  static com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult makeAdapterClassFor(com.oracle.truffle.polyglot.HostClassCache, java.lang.Class<?>[], java.lang.ClassLoader, );
    descriptor: (Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        start local 1 // java.lang.Class[] types
        start local 2 // java.lang.ClassLoader classLoader
        start local 3 // java.lang.Object classOverrides
         0: .line 91
            aload 0 /* hostClassCache */
            aload 1 /* types */
            aload 2 /* classLoader */
            aload 3 /* classOverrides */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.makeAdapterClassForCommon:(Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
            areturn
        end local 3 // java.lang.Object classOverrides
        end local 2 // java.lang.ClassLoader classLoader
        end local 1 // java.lang.Class[] types
        end local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  hostClassCache  Lcom/oracle/truffle/polyglot/HostClassCache;
            0    1     1           types  [Ljava/lang/Class;
            0    1     2     classLoader  Ljava/lang/ClassLoader;
            0    1     3  classOverrides  Ljava/lang/Object;
    Signature: (Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class<*>;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
                Name  Flags
      hostClassCache  
      types           
      classLoader     
      classOverrides  

  static com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult makeAdapterClassFor(com.oracle.truffle.polyglot.HostClassCache, java.lang.Class<?>, java.lang.ClassLoader);
    descriptor: (Lcom/oracle/truffle/polyglot/HostClassCache;Ljava/lang/Class;Ljava/lang/ClassLoader;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        start local 1 // java.lang.Class type
        start local 2 // java.lang.ClassLoader classLoader
         0: .line 96
            aload 0 /* hostClassCache */
            iconst_1
            anewarray java.lang.Class
            dup
            iconst_0
            aload 1 /* type */
            aastore
            aload 2 /* classLoader */
            aconst_null
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.makeAdapterClassForCommon:(Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
            areturn
        end local 2 // java.lang.ClassLoader classLoader
        end local 1 // java.lang.Class type
        end local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  hostClassCache  Lcom/oracle/truffle/polyglot/HostClassCache;
            0    1     1            type  Ljava/lang/Class<*>;
            0    1     2     classLoader  Ljava/lang/ClassLoader;
    Signature: (Lcom/oracle/truffle/polyglot/HostClassCache;Ljava/lang/Class<*>;Ljava/lang/ClassLoader;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
                Name  Flags
      hostClassCache  
      type            
      classLoader     

  private static com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult makeAdapterClassForCommon(com.oracle.truffle.polyglot.HostClassCache, java.lang.Class<?>[], java.lang.ClassLoader, );
    descriptor: (Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=15, args_size=4
        start local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        start local 1 // java.lang.Class[] types
        start local 2 // java.lang.ClassLoader classLoader
        start local 3 // java.lang.Object classOverrides
         0: .line 100
            getstatic com.oracle.truffle.polyglot.HostAdapterFactory.$assertionsDisabled:Z
            ifne 1
            aload 1 /* types */
            arraylength
            ifgt 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 101
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         2: .line 103
            aconst_null
            astore 4 /* superClass */
        start local 4 // java.lang.Class superClass
         3: .line 104
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* interfaces */
        start local 5 // java.util.List interfaces
         4: .line 105
            aload 1 /* types */
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 24
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List top int int java.lang.Class[]
      StackMap stack:
         5: aload 9
            iload 7
            aaload
            astore 6 /* t */
        start local 6 // java.lang.Class t
         6: .line 106
            aload 6 /* t */
            invokevirtual java.lang.Class.isInterface:()Z
            ifne 16
         7: .line 107
            aload 4 /* superClass */
            ifnull 12
         8: .line 109
            ldc "Can not extend multiple classes %s and %s. At most one of the specified types can be a class, the rest must all be interfaces."
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         9: .line 110
            aload 6 /* t */
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* superClass */
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            aastore
        10: .line 109
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        11: .line 108
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        12: .line 111
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List java.lang.Class int int java.lang.Class[]
      StackMap stack:
            aload 6 /* t */
            invokevirtual java.lang.Class.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isFinal:(I)Z
            ifeq 14
        13: .line 112
            ldc "Can not extend final class %s."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* t */
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        14: .line 114
      StackMap locals:
      StackMap stack:
            aload 6 /* t */
            astore 4 /* superClass */
        15: .line 116
            goto 19
        16: .line 117
      StackMap locals:
      StackMap stack:
            aload 5 /* interfaces */
            invokeinterface java.util.List.size:()I
            ldc 65535
            if_icmplt 18
        17: .line 118
            ldc "interface limit exceeded"
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        18: .line 121
      StackMap locals:
      StackMap stack:
            aload 5 /* interfaces */
            aload 6 /* t */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        19: .line 123
      StackMap locals:
      StackMap stack:
            aload 6 /* t */
            invokevirtual java.lang.Class.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isPublic:(I)Z
            ifne 21
        20: .line 124
            ldc "Class not public: %s."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* t */
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        21: .line 126
      StackMap locals:
      StackMap stack:
            aload 6 /* t */
            invokestatic com.oracle.truffle.polyglot.HostInteropReflect.isExtensibleType:(Ljava/lang/Class;)Z
            ifeq 22
            aload 0 /* hostClassCache */
            aload 6 /* t */
            invokevirtual com.oracle.truffle.polyglot.HostClassCache.allowsImplementation:(Ljava/lang/Class;)Z
            ifne 23
        22: .line 127
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "Implementation not allowed for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* t */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        end local 6 // java.lang.Class t
        23: .line 105
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List top int int java.lang.Class[]
      StackMap stack:
            iinc 7 1
      StackMap locals:
      StackMap stack:
        24: iload 7
            iload 8
            if_icmplt 5
        25: .line 130
            aload 4 /* superClass */
            ifnull 26
            aload 4 /* superClass */
            goto 27
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List
      StackMap stack:
        26: ldc Ljava/lang/Object;
      StackMap locals:
      StackMap stack: java.lang.Class
        27: astore 4 /* superClass */
        28: .line 133
            aload 2 /* classLoader */
            aload 4 /* superClass */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.getCommonClassLoader:(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/ClassLoader;
            astore 6 /* commonLoader */
        start local 6 // java.lang.ClassLoader commonLoader
        29: .line 136
            aload 6 /* commonLoader */
            aload 1 /* types */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.classLoaderCanSee:(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Z
            ifne 31
        30: .line 137
            new java.lang.StringBuilder
            dup
            ldc "Could not determine a class loader that can see all types: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* types */
            invokestatic java.util.Arrays.toString:([Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            athrow
        31: .line 142
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            aload 4 /* superClass */
            aload 5 /* interfaces */
            aload 6 /* commonLoader */
            aload 0 /* hostClassCache */
            aload 3 /* classOverrides */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.generateAdapterClassFor:(Ljava/lang/Class;Ljava/util/List;Ljava/lang/ClassLoader;Lcom/oracle/truffle/polyglot/HostClassCache;Ljava/lang/Object;)Ljava/lang/Class;
            astore 7 /* adapterClass */
        start local 7 // java.lang.Class adapterClass
        32: .line 143
            goto 37
        end local 7 // java.lang.Class adapterClass
      StackMap locals:
      StackMap stack: com.oracle.truffle.polyglot.PolyglotEngineException
        33: astore 8 /* ex */
        start local 8 // com.oracle.truffle.polyglot.PolyglotEngineException ex
        34: .line 144
            new com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            dup
            aload 8 /* ex */
            invokespecial com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult.<init>:(Lcom/oracle/truffle/polyglot/PolyglotEngineException;)V
            areturn
        end local 8 // com.oracle.truffle.polyglot.PolyglotEngineException ex
        35: .line 145
      StackMap locals:
      StackMap stack: java.lang.IllegalArgumentException
            astore 8 /* ex */
        start local 8 // java.lang.IllegalArgumentException ex
        36: .line 146
            new com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            dup
            aload 8 /* ex */
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/IllegalArgumentException;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            invokespecial com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult.<init>:(Lcom/oracle/truffle/polyglot/PolyglotEngineException;)V
            areturn
        end local 8 // java.lang.IllegalArgumentException ex
        start local 7 // java.lang.Class adapterClass
        37: .line 149
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* hostClassCache */
            aload 7 /* adapterClass */
            invokevirtual com.oracle.truffle.polyglot.HostClassCache.forClass:(Ljava/lang/Class;)Lcom/oracle/truffle/polyglot/HostClassDesc;
            astore 8 /* classDesc */
        start local 8 // com.oracle.truffle.polyglot.HostClassDesc classDesc
        38: .line 150
            aload 8 /* classDesc */
            invokevirtual com.oracle.truffle.polyglot.HostClassDesc.lookupConstructor:()Lcom/oracle/truffle/polyglot/HostMethodDesc;
            astore 9 /* constructor */
        start local 9 // com.oracle.truffle.polyglot.HostMethodDesc constructor
        39: .line 151
            aconst_null
            astore 10 /* valueConstructor */
        start local 10 // com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod valueConstructor
        40: .line 152
            aload 9 /* constructor */
            ifnull 49
        41: .line 153
            aload 9 /* constructor */
            invokevirtual com.oracle.truffle.polyglot.HostMethodDesc.getOverloads:()[Lcom/oracle/truffle/polyglot/HostMethodDesc$SingleMethod;
            dup
            astore 14
            arraylength
            istore 13
            iconst_0
            istore 12
            goto 47
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List java.lang.ClassLoader java.lang.Class com.oracle.truffle.polyglot.HostClassDesc com.oracle.truffle.polyglot.HostMethodDesc com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod top int int com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod[]
      StackMap stack:
        42: aload 14
            iload 12
            aaload
            astore 11 /* overload */
        start local 11 // com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod overload
        43: .line 154
            aload 11 /* overload */
            invokevirtual com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod.getParameterCount:()I
            iconst_1
            if_icmpne 46
            aload 11 /* overload */
            invokevirtual com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod.getParameterTypes:()[Ljava/lang/Class;
            iconst_0
            aaload
            ldc Lorg/graalvm/polyglot/Value;
            if_acmpne 46
        44: .line 155
            aload 11 /* overload */
            astore 10 /* valueConstructor */
        45: .line 156
            goto 48
        end local 11 // com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod overload
        46: .line 153
      StackMap locals:
      StackMap stack:
            iinc 12 1
      StackMap locals:
      StackMap stack:
        47: iload 12
            iload 13
            if_icmplt 42
        48: .line 159
      StackMap locals: com.oracle.truffle.polyglot.HostClassCache java.lang.Class[] java.lang.ClassLoader java.lang.Object java.lang.Class java.util.List java.lang.ClassLoader java.lang.Class com.oracle.truffle.polyglot.HostClassDesc com.oracle.truffle.polyglot.HostMethodDesc com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod
      StackMap stack:
            new com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            dup
            aload 7 /* adapterClass */
            aload 9 /* constructor */
            aload 10 /* valueConstructor */
            invokespecial com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult.<init>:(Ljava/lang/Class;Lcom/oracle/truffle/polyglot/HostMethodDesc;Lcom/oracle/truffle/polyglot/HostMethodDesc$SingleMethod;)V
            areturn
        49: .line 161
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
            dup
            new java.lang.StringBuilder
            dup
            ldc "No accessible constructor: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* superClass */
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument:(Ljava/lang/String;)Lcom/oracle/truffle/polyglot/PolyglotEngineException;
            invokespecial com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult.<init>:(Lcom/oracle/truffle/polyglot/PolyglotEngineException;)V
            areturn
        end local 10 // com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod valueConstructor
        end local 9 // com.oracle.truffle.polyglot.HostMethodDesc constructor
        end local 8 // com.oracle.truffle.polyglot.HostClassDesc classDesc
        end local 7 // java.lang.Class adapterClass
        end local 6 // java.lang.ClassLoader commonLoader
        end local 5 // java.util.List interfaces
        end local 4 // java.lang.Class superClass
        end local 3 // java.lang.Object classOverrides
        end local 2 // java.lang.ClassLoader classLoader
        end local 1 // java.lang.Class[] types
        end local 0 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   50     0    hostClassCache  Lcom/oracle/truffle/polyglot/HostClassCache;
            0   50     1             types  [Ljava/lang/Class;
            0   50     2       classLoader  Ljava/lang/ClassLoader;
            0   50     3    classOverrides  Ljava/lang/Object;
            3   50     4        superClass  Ljava/lang/Class<*>;
            4   50     5        interfaces  Ljava/util/List<Ljava/lang/Class<*>;>;
            6   23     6                 t  Ljava/lang/Class<*>;
           29   50     6      commonLoader  Ljava/lang/ClassLoader;
           32   33     7      adapterClass  Ljava/lang/Class<*>;
           37   50     7      adapterClass  Ljava/lang/Class<*>;
           34   35     8                ex  Lcom/oracle/truffle/polyglot/PolyglotEngineException;
           36   37     8                ex  Ljava/lang/IllegalArgumentException;
           38   50     8         classDesc  Lcom/oracle/truffle/polyglot/HostClassDesc;
           39   50     9       constructor  Lcom/oracle/truffle/polyglot/HostMethodDesc;
           40   50    10  valueConstructor  Lcom/oracle/truffle/polyglot/HostMethodDesc$SingleMethod;
           43   46    11          overload  Lcom/oracle/truffle/polyglot/HostMethodDesc$SingleMethod;
      Exception table:
        from    to  target  type
          31    32      33  Class com.oracle.truffle.polyglot.PolyglotEngineException
          31    32      35  Class java.lang.IllegalArgumentException
    Signature: (Lcom/oracle/truffle/polyglot/HostClassCache;[Ljava/lang/Class<*>;Ljava/lang/ClassLoader;Ljava/lang/Object;)Lcom/oracle/truffle/polyglot/HostAdapterFactory$AdapterResult;
    MethodParameters:
                Name  Flags
      hostClassCache  
      types           
      classLoader     
      classOverrides  

  private static java.lang.Class<?> generateAdapterClassFor(java.lang.Class<?>, java.util.List<java.lang.Class<?>>, java.lang.ClassLoader, com.oracle.truffle.polyglot.HostClassCache, );
    descriptor: (Ljava/lang/Class;Ljava/util/List;Ljava/lang/ClassLoader;Lcom/oracle/truffle/polyglot/HostClassCache;Ljava/lang/Object;)Ljava/lang/Class;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=8, args_size=5
        start local 0 // java.lang.Class superClass
        start local 1 // java.util.List interfaces
        start local 2 // java.lang.ClassLoader commonLoader
        start local 3 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        start local 4 // java.lang.Object classOverrides
         0: .line 166
            aload 4 /* classOverrides */
            ifnull 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: istore 5 /* classOverride */
        start local 5 // boolean classOverride
         3: .line 167
            new com.oracle.truffle.polyglot.HostAdapterBytecodeGenerator
            dup
            aload 0 /* superClass */
            aload 1 /* interfaces */
            aload 2 /* commonLoader */
            aload 3 /* hostClassCache */
            iload 5 /* classOverride */
            invokespecial com.oracle.truffle.polyglot.HostAdapterBytecodeGenerator.<init>:(Ljava/lang/Class;Ljava/util/List;Ljava/lang/ClassLoader;Lcom/oracle/truffle/polyglot/HostClassCache;Z)V
            astore 6 /* bytecodeGenerator */
        start local 6 // com.oracle.truffle.polyglot.HostAdapterBytecodeGenerator bytecodeGenerator
         4: .line 168
            aload 6 /* bytecodeGenerator */
            invokevirtual com.oracle.truffle.polyglot.HostAdapterBytecodeGenerator.createAdapterClassLoader:()Lcom/oracle/truffle/polyglot/HostAdapterClassLoader;
            astore 7 /* generatedClassLoader */
        start local 7 // com.oracle.truffle.polyglot.HostAdapterClassLoader generatedClassLoader
         5: .line 170
            aload 7 /* generatedClassLoader */
            aload 2 /* commonLoader */
            aload 4 /* classOverrides */
            invokevirtual com.oracle.truffle.polyglot.HostAdapterClassLoader.generateClass:(Ljava/lang/ClassLoader;Ljava/lang/Object;)Ljava/lang/Class;
            areturn
        end local 7 // com.oracle.truffle.polyglot.HostAdapterClassLoader generatedClassLoader
        end local 6 // com.oracle.truffle.polyglot.HostAdapterBytecodeGenerator bytecodeGenerator
        end local 5 // boolean classOverride
        end local 4 // java.lang.Object classOverrides
        end local 3 // com.oracle.truffle.polyglot.HostClassCache hostClassCache
        end local 2 // java.lang.ClassLoader commonLoader
        end local 1 // java.util.List interfaces
        end local 0 // java.lang.Class superClass
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    6     0            superClass  Ljava/lang/Class<*>;
            0    6     1            interfaces  Ljava/util/List<Ljava/lang/Class<*>;>;
            0    6     2          commonLoader  Ljava/lang/ClassLoader;
            0    6     3        hostClassCache  Lcom/oracle/truffle/polyglot/HostClassCache;
            0    6     4        classOverrides  Ljava/lang/Object;
            3    6     5         classOverride  Z
            4    6     6     bytecodeGenerator  Lcom/oracle/truffle/polyglot/HostAdapterBytecodeGenerator;
            5    6     7  generatedClassLoader  Lcom/oracle/truffle/polyglot/HostAdapterClassLoader;
    Signature: (Ljava/lang/Class<*>;Ljava/util/List<Ljava/lang/Class<*>;>;Ljava/lang/ClassLoader;Lcom/oracle/truffle/polyglot/HostClassCache;Ljava/lang/Object;)Ljava/lang/Class<*>;
    MethodParameters:
                Name  Flags
      superClass      
      interfaces      
      commonLoader    
      hostClassCache  
      classOverrides  

  static java.lang.Object getSuperAdapter(com.oracle.truffle.polyglot.HostObject);
    descriptor: (Lcom/oracle/truffle/polyglot/HostObject;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.polyglot.HostObject adapter
         0: .line 175
            getstatic com.oracle.truffle.polyglot.HostAdapterFactory.$assertionsDisabled:Z
            ifne 1
            aload 0 /* adapter */
            getfield com.oracle.truffle.polyglot.HostObject.obj:Ljava/lang/Object;
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.isAdapterInstance:(Ljava/lang/Object;)Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 176
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.polyglot.HostAdapterSuperMembers
            dup
            aload 0 /* adapter */
            invokespecial com.oracle.truffle.polyglot.HostAdapterSuperMembers.<init>:(Lcom/oracle/truffle/polyglot/HostObject;)V
            areturn
        end local 0 // com.oracle.truffle.polyglot.HostObject adapter
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0  adapter  Lcom/oracle/truffle/polyglot/HostObject;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
         Name  Flags
      adapter  

  static java.lang.String getSuperMethodName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String methodName
         0: .line 181
            getstatic com.oracle.truffle.polyglot.HostAdapterFactory.$assertionsDisabled:Z
            ifne 1
            aload 0 /* methodName */
            ldc "super$"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 182
      StackMap locals:
      StackMap stack:
            ldc "super$"
            aload 0 /* methodName */
            invokevirtual java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;
            areturn
        end local 0 // java.lang.String methodName
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0  methodName  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
            Name  Flags
      methodName  

  static boolean isAdapterInstance(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.Object adapter
         0: .line 187
            aload 0 /* adapter */
            invokestatic com.oracle.truffle.polyglot.HostAdapterClassLoader.isAdapterInstance:(Ljava/lang/Object;)Z
            ireturn
        end local 0 // java.lang.Object adapter
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  adapter  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
         Name  Flags
      adapter  

  private static boolean classLoaderCanSee(java.lang.ClassLoader, java.lang.Class<?>);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/Class;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.Class clazz
         0: .line 191
            aload 1 /* clazz */
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            aload 0 /* loader */
            if_acmpne 2
         1: .line 192
            iconst_1
            ireturn
         2: .line 195
      StackMap locals:
      StackMap stack:
            aload 1 /* clazz */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            iconst_0
            aload 0 /* loader */
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            aload 1 /* clazz */
            if_acmpne 3
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         3: iconst_0
         4: ireturn
         5: .line 196
      StackMap locals:
      StackMap stack: java.lang.ClassNotFoundException
            pop
         6: .line 197
            iconst_0
            ireturn
        end local 1 // java.lang.Class clazz
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0  loader  Ljava/lang/ClassLoader;
            0    7     1   clazz  Ljava/lang/Class<*>;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/Class<*>;)Z
    MethodParameters:
        Name  Flags
      loader  
      clazz   

  private static boolean classLoaderCanSee(java.lang.ClassLoader, java.lang.Class<?>[]);
    descriptor: (Ljava/lang/ClassLoader;[Ljava/lang/Class;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.Class[] classes
         0: .line 202
            aload 1 /* classes */
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 5
      StackMap locals: java.lang.ClassLoader java.lang.Class[] top int int java.lang.Class[]
      StackMap stack:
         1: aload 5
            iload 3
            aaload
            astore 2 /* c */
        start local 2 // java.lang.Class c
         2: .line 203
            aload 0 /* loader */
            aload 2 /* c */
            invokestatic com.oracle.truffle.polyglot.HostAdapterFactory.classLoaderCanSee:(Ljava/lang/ClassLoader;Ljava/lang/Class;)Z
            ifne 4
         3: .line 204
            iconst_0
            ireturn
        end local 2 // java.lang.Class c
         4: .line 202
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         5: iload 3
            iload 4
            if_icmplt 1
         6: .line 207
            iconst_1
            ireturn
        end local 1 // java.lang.Class[] classes
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0   loader  Ljava/lang/ClassLoader;
            0    7     1  classes  [Ljava/lang/Class;
            2    4     2        c  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/ClassLoader;[Ljava/lang/Class<*>;)Z
    MethodParameters:
         Name  Flags
      loader   
      classes  

  private static java.lang.ClassLoader getCommonClassLoader(java.lang.ClassLoader, java.lang.Class<?>);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/ClassLoader;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.ClassLoader classLoader
        start local 1 // java.lang.Class superclass
         0: .line 211
            aload 1 /* superclass */
            ldc Ljava/lang/Object;
            if_acmpeq 3
         1: .line 212
            aload 1 /* superclass */
            invokestatic com.oracle.truffle.polyglot.HostAdapterClassLoader.isGeneratedClass:(Ljava/lang/Class;)Z
            ifeq 3
         2: .line 213
            aload 1 /* superclass */
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            areturn
         3: .line 216
      StackMap locals:
      StackMap stack:
            aload 0 /* classLoader */
            areturn
        end local 1 // java.lang.Class superclass
        end local 0 // java.lang.ClassLoader classLoader
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0  classLoader  Ljava/lang/ClassLoader;
            0    4     1   superclass  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/Class<*>;)Ljava/lang/ClassLoader;
    MethodParameters:
             Name  Flags
      classLoader  
      superclass   

  private static java.lang.Class<?> getTypeForCache(java.lang.Class<?>[]);
    descriptor: ([Ljava/lang/Class;)Ljava/lang/Class;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class[] types
         0: .line 220
            aload 0 /* types */
            iconst_0
            aaload
            areturn
        end local 0 // java.lang.Class[] types
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  types  [Ljava/lang/Class;
    Signature: ([Ljava/lang/Class<*>;)Ljava/lang/Class<*>;
    MethodParameters:
       Name  Flags
      types  
}
SourceFile: "HostAdapterFactory.java"
NestMembers:
  com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  final AdapterResult = com.oracle.truffle.polyglot.HostAdapterFactory$AdapterResult of com.oracle.truffle.polyglot.HostAdapterFactory
  final HostContext = com.oracle.truffle.polyglot.HostLanguage$HostContext of com.oracle.truffle.polyglot.HostLanguage
  abstract SingleMethod = com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod of com.oracle.truffle.polyglot.HostMethodDesc