public class com.oracle.graal.python.runtime.NativeLibrary
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.graal.python.runtime.NativeLibrary
  super_class: java.lang.Object
{
  private static final com.oracle.truffle.api.TruffleLogger LOGGER;
    descriptor: Lcom/oracle/truffle/api/TruffleLogger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final int functionsCount;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.String name;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.graal.python.runtime.NativeLibrary$NFIBackend nfiBackend;
    descriptor: Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.String noNativeAccessHelp;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean optional;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile java.lang.Object[] cachedFunctions;
    descriptor: [Ljava/lang/Object;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile java.lang.Object cachedLibrary;
    descriptor: Ljava/lang/Object;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile com.oracle.truffle.api.interop.InteropLibrary cachedLibraryInterop;
    descriptor: Lcom/oracle/truffle/api/interop/InteropLibrary;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile java.lang.Object dummy;
    descriptor: Ljava/lang/Object;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 84
            ldc Lcom/oracle/graal/python/runtime/NativeLibrary;
            invokestatic com.oracle.graal.python.PythonLanguage.getLogger:(Ljava/lang/Class;)Lcom/oracle/truffle/api/TruffleLogger;
            putstatic com.oracle.graal.python.runtime.NativeLibrary.LOGGER:Lcom/oracle/truffle/api/TruffleLogger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.lang.String, int, com.oracle.graal.python.runtime.NativeLibrary$NFIBackend, java.lang.String, boolean);
    descriptor: (Ljava/lang/String;ILcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;Ljava/lang/String;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=6, args_size=6
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // java.lang.String name
        start local 2 // int functionsCount
        start local 3 // com.oracle.graal.python.runtime.NativeLibrary$NFIBackend nfiBackend
        start local 4 // java.lang.String noNativeAccessHelp
        start local 5 // boolean optional
         0: .line 137
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 138
            aload 0 /* this */
            iload 2 /* functionsCount */
            putfield com.oracle.graal.python.runtime.NativeLibrary.functionsCount:I
         2: .line 139
            aload 0 /* this */
            aload 1 /* name */
            putfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
         3: .line 140
            aload 0 /* this */
            aload 3 /* nfiBackend */
            putfield com.oracle.graal.python.runtime.NativeLibrary.nfiBackend:Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
         4: .line 141
            aload 0 /* this */
            aload 4 /* noNativeAccessHelp */
            putfield com.oracle.graal.python.runtime.NativeLibrary.noNativeAccessHelp:Ljava/lang/String;
         5: .line 142
            aload 0 /* this */
            iload 5 /* optional */
            putfield com.oracle.graal.python.runtime.NativeLibrary.optional:Z
         6: .line 143
            return
        end local 5 // boolean optional
        end local 4 // java.lang.String noNativeAccessHelp
        end local 3 // com.oracle.graal.python.runtime.NativeLibrary$NFIBackend nfiBackend
        end local 2 // int functionsCount
        end local 1 // java.lang.String name
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    7     0                this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0    7     1                name  Ljava/lang/String;
            0    7     2      functionsCount  I
            0    7     3          nfiBackend  Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
            0    7     4  noNativeAccessHelp  Ljava/lang/String;
            0    7     5            optional  Z
    MethodParameters:
                    Name  Flags
      name                
      functionsCount      
      nfiBackend          
      noNativeAccessHelp  
      optional            

  private java.lang.Object getCachedLibrary(com.oracle.graal.python.runtime.PythonContext);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
         0: .line 146
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibrary:Ljava/lang/Object;
            ifnonnull 12
         1: .line 148
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreter:()V
         2: .line 149
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         3: .line 150
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibrary:Ljava/lang/Object;
            ifnonnull 8
         4: .line 151
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.loadLibrary:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
            astore 3 /* lib */
        start local 3 // java.lang.Object lib
         5: .line 152
            aload 3 /* lib */
            ifnull 8
         6: .line 154
            aload 0 /* this */
            aload 3 /* lib */
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getUncached:(Ljava/lang/Object;)Lcom/oracle/truffle/api/interop/InteropLibrary;
            putfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibraryInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
         7: .line 155
            aload 0 /* this */
            aload 3 /* lib */
            putfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibrary:Ljava/lang/Object;
        end local 3 // java.lang.Object lib
         8: .line 149
      StackMap locals: com.oracle.graal.python.runtime.NativeLibrary
      StackMap stack:
            aload 2
            monitorexit
         9: goto 12
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: aload 2
            monitorexit
        11: athrow
        12: .line 160
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibrary:Ljava/lang/Object;
            areturn
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   13     0     this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0   13     1  context  Lcom/oracle/graal/python/runtime/PythonContext;
            5    8     3      lib  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           3     9      10  any
          10    11      10  any
    MethodParameters:
         Name  Flags
      context  

  private java.lang.Object getCachedFunction(com.oracle.graal.python.runtime.PythonContext, com.oracle.graal.python.runtime.NativeLibrary$NativeFunction);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
        start local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
         0: .line 164
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getCachedLibrary:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
            astore 3 /* lib */
        start local 3 // java.lang.Object lib
         1: .line 165
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
            ifnonnull 10
         2: .line 167
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreter:()V
         3: .line 168
            aload 0 /* this */
            dup
            astore 4
            monitorenter
         4: .line 169
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
            ifnonnull 6
         5: .line 170
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.functionsCount:I
            anewarray java.lang.Object
            putfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
         6: .line 168
      StackMap locals: java.lang.Object com.oracle.graal.python.runtime.NativeLibrary
      StackMap stack:
            aload 4
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 4
            monitorexit
         9: athrow
        10: .line 174
      StackMap locals:
      StackMap stack:
            aload 2 /* function */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.ordinal:()I
            istore 4 /* functionIndex */
        start local 4 // int functionIndex
        11: .line 175
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
            iload 4 /* functionIndex */
            aaload
            ifnonnull 20
        12: .line 177
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreter:()V
        13: .line 178
            aload 0 /* this */
            dup
            astore 5
            monitorenter
        14: .line 179
            aload 0 /* this */
            aload 0 /* this */
            aload 3 /* lib */
            aload 2 /* function */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getFunction:(Ljava/lang/Object;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;)Ljava/lang/Object;
            putfield com.oracle.graal.python.runtime.NativeLibrary.dummy:Ljava/lang/Object;
        15: .line 183
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
            iload 4 /* functionIndex */
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.dummy:Ljava/lang/Object;
            aastore
        16: .line 178
            aload 5
            monitorexit
        17: goto 20
      StackMap locals: com.oracle.graal.python.runtime.NativeLibrary com.oracle.graal.python.runtime.PythonContext com.oracle.graal.python.runtime.NativeLibrary$NativeFunction java.lang.Object int com.oracle.graal.python.runtime.NativeLibrary
      StackMap stack: java.lang.Throwable
        18: aload 5
            monitorexit
        19: athrow
        20: .line 186
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedFunctions:[Ljava/lang/Object;
            iload 4 /* functionIndex */
            aaload
            areturn
        end local 4 // int functionIndex
        end local 3 // java.lang.Object lib
        end local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   21     0           this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0   21     1        context  Lcom/oracle/graal/python/runtime/PythonContext;
            0   21     2       function  Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;
            1   21     3            lib  Ljava/lang/Object;
           11   21     4  functionIndex  I
      Exception table:
        from    to  target  type
           4     7       8  any
           8     9       8  any
          14    17      18  any
          18    19      18  any
    MethodParameters:
          Name  Flags
      context   
      function  

  private java.lang.Object getFunction(com.oracle.graal.python.runtime.PythonContext, com.oracle.graal.python.runtime.NativeLibrary$NativeFunction);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
        start local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
         0: .line 190
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 191
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getCachedLibrary:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
            astore 3 /* lib */
        start local 3 // java.lang.Object lib
         2: .line 192
            aload 0 /* this */
            aload 3 /* lib */
            aload 2 /* function */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getFunction:(Ljava/lang/Object;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;)Ljava/lang/Object;
            areturn
        end local 3 // java.lang.Object lib
        end local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0    3     1   context  Lcom/oracle/graal/python/runtime/PythonContext;
            0    3     2  function  Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;
            2    3     3       lib  Ljava/lang/Object;
    MethodParameters:
          Name  Flags
      context   
      function  

  private java.lang.Object getFunction(java.lang.Object, com.oracle.graal.python.runtime.NativeLibrary$NativeFunction);
    descriptor: (Ljava/lang/Object;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // java.lang.Object lib
        start local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
         0: .line 196
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 198
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibraryInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* lib */
            aload 2 /* function */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.name:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 3 /* symbol */
        start local 3 // java.lang.Object symbol
         2: .line 199
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getUncached:()Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 3 /* symbol */
            ldc "bind"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* function */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.signature:()Ljava/lang/String;
            aastore
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
         3: areturn
        end local 3 // java.lang.Object symbol
         4: .line 200
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            astore 3 /* e */
        start local 3 // com.oracle.truffle.api.interop.InteropException e
         5: .line 201
            new java.lang.IllegalStateException
            dup
            ldc "Cannot load symbol '%s' from the internal shared library '%s'"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* function */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.name:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 3 /* e */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // com.oracle.truffle.api.interop.InteropException e
        end local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction function
        end local 1 // java.lang.Object lib
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0    6     1       lib  Ljava/lang/Object;
            0    6     2  function  Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;
            2    4     3    symbol  Ljava/lang/Object;
            5    6     3         e  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           1     3       4  Class com.oracle.truffle.api.interop.UnsupportedMessageException
           1     3       4  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           1     3       4  Class com.oracle.truffle.api.interop.ArityException
           1     3       4  Class com.oracle.truffle.api.interop.UnsupportedTypeException
    MethodParameters:
          Name  Flags
      lib       
      function  

  private java.lang.Object loadLibrary(com.oracle.graal.python.runtime.PythonContext);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=2
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
         0: .line 206
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 207
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.PythonContext.getEnv:()Lcom/oracle/truffle/api/TruffleLanguage$Env;
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.isNativeAccessAllowed:()Z
            ifeq 22
         2: .line 208
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getLibPath:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/String;
            astore 2 /* path */
        start local 2 // java.lang.String path
         3: .line 209
            ldc "%sload (RTLD_LOCAL) \"%s\""
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.nfiBackend:Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
            getfield com.oracle.graal.python.runtime.NativeLibrary$NFIBackend.withClause:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 2 /* path */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 3 /* src */
        start local 3 // java.lang.String src
         4: .line 210
            getstatic com.oracle.graal.python.runtime.NativeLibrary.LOGGER:Lcom/oracle/truffle/api/TruffleLogger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            invokevirtual com.oracle.truffle.api.TruffleLogger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 6
         5: .line 211
            getstatic com.oracle.graal.python.runtime.NativeLibrary.LOGGER:Lcom/oracle/truffle/api/TruffleLogger;
            ldc "Loading native library %s from path %s %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 2 /* path */
            aastore
            dup
            iconst_2
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.nfiBackend:Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
            getfield com.oracle.graal.python.runtime.NativeLibrary$NFIBackend.withClause:Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual com.oracle.truffle.api.TruffleLogger.fine:(Ljava/lang/String;)V
         6: .line 213
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            ldc "nfi"
            aload 3 /* src */
            new java.lang.StringBuilder
            dup
            ldc "load:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name: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.api.source.Source.newBuilder:(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/oracle/truffle/api/source/Source$LiteralBuilder;
            iconst_1
            invokevirtual com.oracle.truffle.api.source.Source$LiteralBuilder.internal:(Z)Lcom/oracle/truffle/api/source/Source$LiteralBuilder;
            invokevirtual com.oracle.truffle.api.source.Source$LiteralBuilder.build:()Lcom/oracle/truffle/api/source/Source;
            astore 4 /* loadSrc */
        start local 4 // com.oracle.truffle.api.source.Source loadSrc
         7: .line 215
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.PythonContext.getEnv:()Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 4 /* loadSrc */
            iconst_0
            anewarray java.lang.String
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.parseInternal:(Lcom/oracle/truffle/api/source/Source;[Ljava/lang/String;)Lcom/oracle/truffle/api/CallTarget;
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
         8: areturn
         9: .line 216
      StackMap locals: com.oracle.graal.python.runtime.NativeLibrary com.oracle.graal.python.runtime.PythonContext java.lang.String java.lang.String com.oracle.truffle.api.source.Source
      StackMap stack: java.lang.RuntimeException
            astore 5 /* ex */
        start local 5 // java.lang.RuntimeException ex
        10: .line 217
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.optional:Z
            ifeq 11
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            goto 12
      StackMap locals: java.lang.RuntimeException
      StackMap stack:
        11: getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
      StackMap locals:
      StackMap stack: java.util.logging.Level
        12: astore 6 /* level */
        start local 6 // java.util.logging.Level level
        13: .line 218
            getstatic com.oracle.graal.python.runtime.NativeLibrary.LOGGER:Lcom/oracle/truffle/api/TruffleLogger;
            aload 6 /* level */
            invokevirtual com.oracle.truffle.api.TruffleLogger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 15
        14: .line 219
            getstatic com.oracle.graal.python.runtime.NativeLibrary.LOGGER:Lcom/oracle/truffle/api/TruffleLogger;
            aload 6 /* level */
            aload 5 /* ex */
            aload 2 /* path */
            aload 3 /* src */
            invokedynamic get(Ljava/lang/String;Ljava/lang/String;)Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/graal/python/runtime/NativeLibrary.lambda$0(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; (6)
                  ()Ljava/lang/String;
            invokevirtual com.oracle.truffle.api.TruffleLogger.log:(Ljava/util/logging/Level;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V
        15: .line 221
      StackMap locals: java.util.logging.Level
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.optional:Z
            ifne 27
        16: .line 222
            new java.lang.RuntimeException
            dup
        17: .line 223
            ldc "Cannot load supporting native library '%s'. Either the shared library file does not exist, or your system may be missing some dependencies. Turn on logging with --log.%s.level=INFO for more details. %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        18: .line 226
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
            aastore
            dup
            iconst_1
        19: .line 227
            ldc Lcom/oracle/graal/python/runtime/NativeLibrary;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_2
        20: .line 228
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.noNativeAccessHelp:Ljava/lang/String;
            aastore
        21: .line 222
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 6 // java.util.logging.Level level
        end local 5 // java.lang.RuntimeException ex
        end local 4 // com.oracle.truffle.api.source.Source loadSrc
        end local 3 // java.lang.String src
        end local 2 // java.lang.String path
        22: .line 232
      StackMap locals: com.oracle.graal.python.runtime.NativeLibrary com.oracle.graal.python.runtime.PythonContext
      StackMap stack:
            new java.lang.RuntimeException
            dup
        23: .line 233
            ldc "Cannot load supporting native library '%s' because the native access is not allowed. The native access should be allowed when running GraalPython via the graalpython command. If you are embedding GraalPython using the Context API, make sure to allow native access using 'allowNativeAccess(true)'. %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        24: .line 236
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
            aastore
            dup
            iconst_1
        25: .line 237
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.noNativeAccessHelp:Ljava/lang/String;
            aastore
        26: .line 232
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        27: .line 239
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.graal.python.runtime.NativeLibrary$NativeLibraryCannotBeLoaded.INSTANCE:Lcom/oracle/graal/python/runtime/NativeLibrary$NativeLibraryCannotBeLoaded;
            athrow
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   28     0     this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0   28     1  context  Lcom/oracle/graal/python/runtime/PythonContext;
            3   22     2     path  Ljava/lang/String;
            4   22     3      src  Ljava/lang/String;
            7   22     4  loadSrc  Lcom/oracle/truffle/api/source/Source;
           10   22     5       ex  Ljava/lang/RuntimeException;
           13   22     6    level  Ljava/util/logging/Level;
      Exception table:
        from    to  target  type
           7     8       9  Class java.lang.RuntimeException
    MethodParameters:
         Name  Flags
      context  

  private java.lang.String getLibPath(com.oracle.graal.python.runtime.PythonContext);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
         0: .line 243
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 244
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.name:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* context */
            invokestatic com.oracle.graal.python.builtins.modules.ImpModuleBuiltins$ExtensionSuffixesNode.getSoAbi:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* libPythonName */
        start local 2 // java.lang.String libPythonName
         2: .line 245
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.PythonContext.getEnv:()Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.PythonContext.getCAPIHome:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.getInternalTruffleFile:(Ljava/lang/String;)Lcom/oracle/truffle/api/TruffleFile;
            astore 3 /* homePath */
        start local 3 // com.oracle.truffle.api.TruffleFile homePath
         3: .line 246
            aload 3 /* homePath */
            aload 2 /* libPythonName */
            invokevirtual com.oracle.truffle.api.TruffleFile.resolve:(Ljava/lang/String;)Lcom/oracle/truffle/api/TruffleFile;
            astore 4 /* file */
        start local 4 // com.oracle.truffle.api.TruffleFile file
         4: .line 247
            aload 4 /* file */
            invokevirtual com.oracle.truffle.api.TruffleFile.getPath:()Ljava/lang/String;
            areturn
        end local 4 // com.oracle.truffle.api.TruffleFile file
        end local 3 // com.oracle.truffle.api.TruffleFile homePath
        end local 2 // java.lang.String libPythonName
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0    5     1        context  Lcom/oracle/graal/python/runtime/PythonContext;
            2    5     2  libPythonName  Ljava/lang/String;
            3    5     3       homePath  Lcom/oracle/truffle/api/TruffleFile;
            4    5     4           file  Lcom/oracle/truffle/api/TruffleFile;
    MethodParameters:
         Name  Flags
      context  

  protected java.lang.Object callUncached(com.oracle.graal.python.runtime.PythonContext, com.oracle.graal.python.runtime.NativeLibrary$NativeFunction, java.lang.Object[]);
    descriptor: (Lcom/oracle/graal/python/runtime/PythonContext;Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0084) ACC_PROTECTED, ACC_VARARGS
    Code:
      stack=7, locals=7, args_size=4
        start local 0 // com.oracle.graal.python.runtime.NativeLibrary this
        start local 1 // com.oracle.graal.python.runtime.PythonContext context
        start local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction f
        start local 3 // java.lang.Object[] args
         0: .line 251
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 252
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual com.oracle.graal.python.runtime.NativeLibrary.getCachedLibrary:(Lcom/oracle/graal/python/runtime/PythonContext;)Ljava/lang/Object;
            astore 4 /* lib */
        start local 4 // java.lang.Object lib
         2: .line 253
            aload 4 /* lib */
            ifnull 9
         3: .line 255
            aload 0 /* this */
            getfield com.oracle.graal.python.runtime.NativeLibrary.cachedLibraryInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* lib */
            aload 2 /* f */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.name:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 5 /* symbol */
        start local 5 // java.lang.Object symbol
         4: .line 256
            aload 5 /* symbol */
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getUncached:(Ljava/lang/Object;)Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 5 /* symbol */
            ldc "bind"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* f */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.signature:()Ljava/lang/String;
            aastore
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
            astore 6 /* function */
        start local 6 // java.lang.Object function
         5: .line 257
            aload 6 /* function */
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getUncached:(Ljava/lang/Object;)Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 6 /* function */
            aload 3 /* args */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.execute:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
         6: areturn
        end local 6 // java.lang.Object function
        end local 5 // java.lang.Object symbol
         7: .line 258
      StackMap locals: com.oracle.graal.python.runtime.NativeLibrary com.oracle.graal.python.runtime.PythonContext com.oracle.graal.python.runtime.NativeLibrary$NativeFunction java.lang.Object[] java.lang.Object
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
         8: .line 259
            aload 2 /* f */
            invokeinterface com.oracle.graal.python.runtime.NativeLibrary$NativeFunction.name:()Ljava/lang/String;
            aload 5 /* e */
            invokestatic com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere:(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/RuntimeException;
            athrow
        end local 5 // java.lang.Exception e
         9: .line 262
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 4 // java.lang.Object lib
        end local 3 // java.lang.Object[] args
        end local 2 // com.oracle.graal.python.runtime.NativeLibrary$NativeFunction f
        end local 1 // com.oracle.graal.python.runtime.PythonContext context
        end local 0 // com.oracle.graal.python.runtime.NativeLibrary this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lcom/oracle/graal/python/runtime/NativeLibrary;
            0   10     1   context  Lcom/oracle/graal/python/runtime/PythonContext;
            0   10     2         f  Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;
            0   10     3      args  [Ljava/lang/Object;
            2   10     4       lib  Ljava/lang/Object;
            4    7     5    symbol  Ljava/lang/Object;
            5    7     6  function  Ljava/lang/Object;
            8    9     5         e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           3     6       7  Class java.lang.Exception
    MethodParameters:
         Name  Flags
      context  
      f        
      args     

  public static <T extends java.lang.Enum<T> extends com.oracle.graal.python.runtime.NativeLibrary$NativeFunction> com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary<T> create(java.lang.String, T[], java.lang.String, boolean);
    descriptor: (Ljava/lang/String;[Ljava/lang/Enum;Ljava/lang/String;Z)Lcom/oracle/graal/python/runtime/NativeLibrary$TypedNativeLibrary;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // java.lang.String name
        start local 1 // java.lang.Enum[] functions
        start local 2 // java.lang.String noNativeAccessHelp
        start local 3 // boolean canIgnore
         0: .line 266
            aload 0 /* name */
            aload 1 /* functions */
            getstatic com.oracle.graal.python.runtime.NativeLibrary$NFIBackend.NATIVE:Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
            aload 2 /* noNativeAccessHelp */
            iload 3 /* canIgnore */
            invokestatic com.oracle.graal.python.runtime.NativeLibrary.create:(Ljava/lang/String;[Ljava/lang/Enum;Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;Ljava/lang/String;Z)Lcom/oracle/graal/python/runtime/NativeLibrary$TypedNativeLibrary;
            areturn
        end local 3 // boolean canIgnore
        end local 2 // java.lang.String noNativeAccessHelp
        end local 1 // java.lang.Enum[] functions
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    1     0                name  Ljava/lang/String;
            0    1     1           functions  [Ljava/lang/Enum;
            0    1     2  noNativeAccessHelp  Ljava/lang/String;
            0    1     3           canIgnore  Z
    Signature: <T:Ljava/lang/Enum<TT;>;:Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;>(Ljava/lang/String;[TT;Ljava/lang/String;Z)Lcom/oracle/graal/python/runtime/NativeLibrary$TypedNativeLibrary<TT;>;
    MethodParameters:
                    Name  Flags
      name                
      functions           
      noNativeAccessHelp  
      canIgnore           

  public static <T extends java.lang.Enum<T> extends com.oracle.graal.python.runtime.NativeLibrary$NativeFunction> com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary<T> create(java.lang.String, T[], com.oracle.graal.python.runtime.NativeLibrary$NFIBackend, java.lang.String, boolean);
    descriptor: (Ljava/lang/String;[Ljava/lang/Enum;Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;Ljava/lang/String;Z)Lcom/oracle/graal/python/runtime/NativeLibrary$TypedNativeLibrary;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=5, args_size=5
        start local 0 // java.lang.String name
        start local 1 // java.lang.Enum[] functions
        start local 2 // com.oracle.graal.python.runtime.NativeLibrary$NFIBackend nfiBackendName
        start local 3 // java.lang.String noNativeAccessHelp
        start local 4 // boolean canIgnore
         0: .line 270
            new com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary
            dup
            aload 0 /* name */
            aload 1 /* functions */
            arraylength
            aload 2 /* nfiBackendName */
            aload 3 /* noNativeAccessHelp */
            iload 4 /* canIgnore */
            invokespecial com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary.<init>:(Ljava/lang/String;ILcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;Ljava/lang/String;Z)V
            areturn
        end local 4 // boolean canIgnore
        end local 3 // java.lang.String noNativeAccessHelp
        end local 2 // com.oracle.graal.python.runtime.NativeLibrary$NFIBackend nfiBackendName
        end local 1 // java.lang.Enum[] functions
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    1     0                name  Ljava/lang/String;
            0    1     1           functions  [Ljava/lang/Enum;
            0    1     2      nfiBackendName  Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;
            0    1     3  noNativeAccessHelp  Ljava/lang/String;
            0    1     4           canIgnore  Z
    Signature: <T:Ljava/lang/Enum<TT;>;:Lcom/oracle/graal/python/runtime/NativeLibrary$NativeFunction;>(Ljava/lang/String;[TT;Lcom/oracle/graal/python/runtime/NativeLibrary$NFIBackend;Ljava/lang/String;Z)Lcom/oracle/graal/python/runtime/NativeLibrary$TypedNativeLibrary<TT;>;
    MethodParameters:
                    Name  Flags
      name                
      functions           
      nfiBackendName      
      noNativeAccessHelp  
      canIgnore           

  private static java.lang.String lambda$0(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=5, locals=2, args_size=2
         0: .line 219
            ldc "Error while opening shared library at '%s'.\nFull NFI source: %s."
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0
            aastore
            dup
            iconst_1
            aload 1
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "NativeLibrary.java"
NestMembers:
  com.oracle.graal.python.runtime.NativeLibrary$InvokeNativeFunction  com.oracle.graal.python.runtime.NativeLibrary$NFIBackend  com.oracle.graal.python.runtime.NativeLibrary$NativeFunction  com.oracle.graal.python.runtime.NativeLibrary$NativeLibraryCannotBeLoaded  com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary
InnerClasses:
  public abstract ExtensionSuffixesNode = com.oracle.graal.python.builtins.modules.ImpModuleBuiltins$ExtensionSuffixesNode of com.oracle.graal.python.builtins.modules.ImpModuleBuiltins
  public abstract InvokeNativeFunction = com.oracle.graal.python.runtime.NativeLibrary$InvokeNativeFunction of com.oracle.graal.python.runtime.NativeLibrary
  final NFIBackend = com.oracle.graal.python.runtime.NativeLibrary$NFIBackend of com.oracle.graal.python.runtime.NativeLibrary
  abstract NativeFunction = com.oracle.graal.python.runtime.NativeLibrary$NativeFunction of com.oracle.graal.python.runtime.NativeLibrary
  public NativeLibraryCannotBeLoaded = com.oracle.graal.python.runtime.NativeLibrary$NativeLibraryCannotBeLoaded of com.oracle.graal.python.runtime.NativeLibrary
  public final TypedNativeLibrary = com.oracle.graal.python.runtime.NativeLibrary$TypedNativeLibrary of com.oracle.graal.python.runtime.NativeLibrary
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  public final LiteralBuilder = com.oracle.truffle.api.source.Source$LiteralBuilder of com.oracle.truffle.api.source.Source
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles