public final class com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension extends com.oracle.truffle.llvm.runtime.NativeContextExtension
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  super_class: com.oracle.truffle.llvm.runtime.NativeContextExtension
{
  private static final java.lang.String SIGNATURE_SOURCE_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "llvm-nfi-signature"

  private static final int WELL_KNOWN_CACHE_INITIAL_SIZE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  private static final com.oracle.truffle.api.interop.InteropLibrary INTEROP;
    descriptor: Lcom/oracle/truffle/api/interop/InteropLibrary;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private java.lang.Object defaultLibraryHandle;
    descriptor: Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE

  private boolean internalLibrariesAdded;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private final java.util.List<java.lang.Object> libraryHandles;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/Object;>;

  private final org.graalvm.collections.EconomicMap<java.lang.String, com.oracle.truffle.api.CallTarget> visited;
    descriptor: Lorg/graalvm/collections/EconomicMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/graalvm/collections/EconomicMap<Ljava/lang/String;Lcom/oracle/truffle/api/CallTarget;>;

  private final com.oracle.truffle.api.TruffleLanguage$Env env;
    descriptor: Lcom/oracle/truffle/api/TruffleLanguage$Env;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache signatureSourceCache;
    descriptor: Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.collections.EconomicMap<com.oracle.truffle.api.source.Source, java.lang.Object> signatureCache;
    descriptor: Lorg/graalvm/collections/EconomicMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/graalvm/collections/EconomicMap<Lcom/oracle/truffle/api/source/Source;Ljava/lang/Object;>;

  private java.lang.Object[] wellKnownFunctionCache;
    descriptor: [Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  private static volatile int[] $SWITCH_TABLE$com$oracle$truffle$llvm$runtime$types$PrimitiveType$PrimitiveKind;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 69
            ldc Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            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.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
         3: .line 190
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.getUncached:()Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.interop.InteropLibrary
            putstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>(com.oracle.truffle.api.TruffleLanguage$Env, com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache);
    descriptor: (Lcom/oracle/truffle/api/TruffleLanguage$Env;Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.api.TruffleLanguage$Env env
        start local 2 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache signatureSourceCache
         0: .line 204
            aload 0 /* this */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension.<init>:()V
         1: .line 193
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.internalLibrariesAdded:Z
         2: .line 194
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
         3: .line 195
            aload 0 /* this */
            invokestatic org.graalvm.collections.EconomicMap.create:()Lorg/graalvm/collections/EconomicMap;
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.visited:Lorg/graalvm/collections/EconomicMap;
         4: .line 199
            aload 0 /* this */
            getstatic org.graalvm.collections.Equivalence.IDENTITY:Lorg/graalvm/collections/Equivalence;
            invokestatic org.graalvm.collections.EconomicMap.create:(Lorg/graalvm/collections/Equivalence;)Lorg/graalvm/collections/EconomicMap;
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureCache:Lorg/graalvm/collections/EconomicMap;
         5: .line 205
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
            ifne 6
            aload 1 /* env */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.getOptions:()Lorg/graalvm/options/OptionValues;
            getstatic com.oracle.truffle.llvm.runtime.options.SulongEngineOption.ENABLE_NFI:Lorg/graalvm/options/OptionKey;
            invokeinterface org.graalvm.options.OptionValues.get:(Lorg/graalvm/options/OptionKey;)Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifne 6
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         6: .line 206
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension com.oracle.truffle.api.TruffleLanguage$Env com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache
      StackMap stack:
            aload 0 /* this */
            aload 1 /* env */
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
         7: .line 207
            aload 0 /* this */
            aload 2 /* signatureSourceCache */
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureSourceCache:Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
         8: .line 208
            aload 0 /* this */
            bipush 8
            anewarray java.lang.Object
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
         9: .line 209
            return
        end local 2 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache signatureSourceCache
        end local 1 // com.oracle.truffle.api.TruffleLanguage$Env env
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   10     0                  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   10     1                   env  Lcom/oracle/truffle/api/TruffleLanguage$Env;
            0   10     2  signatureSourceCache  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
    MethodParameters:
                      Name  Flags
      env                   
      signatureSourceCache  

  public void initialize(com.oracle.truffle.llvm.runtime.LLVMContext);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/LLVMContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.runtime.LLVMContext context
         0: .line 213
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
            ifne 1
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.isInitialized:()Z
            ifeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 214
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.internalLibrariesAdded:Z
            ifne 10
         2: .line 215
            aload 0 /* this */
            aload 1 /* context */
            new java.lang.StringBuilder
            dup
            ldc "libsulong-native."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeLibrarySuffix:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc "<default nfi library>"
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.locateInternalLibrary:(Lcom/oracle/truffle/llvm/runtime/LLVMContext;Ljava/lang/String;Ljava/lang/Object;)Lcom/oracle/truffle/api/TruffleFile;
            astore 2 /* file */
        start local 2 // com.oracle.truffle.api.TruffleFile file
         3: .line 216
            aload 0 /* this */
            aload 2 /* file */
            invokevirtual com.oracle.truffle.api.TruffleFile.getPath:()Ljava/lang/String;
            aload 1 /* context */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.loadLibrary:(Ljava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Ljava/lang/Object;
            astore 3 /* lib */
        start local 3 // java.lang.Object lib
         4: .line 217
            aload 3 /* lib */
            instanceof com.oracle.truffle.api.CallTarget
            ifeq 6
         5: .line 218
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
            aload 3 /* lib */
            checkcast com.oracle.truffle.api.CallTarget
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         6: .line 221
      StackMap locals: com.oracle.truffle.api.TruffleFile java.lang.Object
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.loadDefaultLibrary:()Ljava/lang/Object;
            astore 4 /* defaultLib */
        start local 4 // java.lang.Object defaultLib
         7: .line 222
            aload 4 /* defaultLib */
            instanceof com.oracle.truffle.api.CallTarget
            ifeq 9
         8: .line 223
            aload 0 /* this */
            aload 4 /* defaultLib */
            checkcast com.oracle.truffle.api.CallTarget
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.defaultLibraryHandle:Ljava/lang/Object;
         9: .line 225
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.internalLibrariesAdded:Z
        end local 4 // java.lang.Object defaultLib
        end local 3 // java.lang.Object lib
        end local 2 // com.oracle.truffle.api.TruffleFile file
        10: .line 227
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.oracle.truffle.llvm.runtime.LLVMContext context
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   11     1     context  Lcom/oracle/truffle/llvm/runtime/LLVMContext;
            3   10     2        file  Lcom/oracle/truffle/api/TruffleFile;
            4   10     3         lib  Ljava/lang/Object;
            7   10     4  defaultLib  Ljava/lang/Object;
    MethodParameters:
         Name  Flags
      context  

  public boolean isInitialized();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
         0: .line 230
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.defaultLibraryHandle:Ljava/lang/Object;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;

  public com.oracle.truffle.llvm.runtime.NativeContextExtension$NativePointerIntoLibrary getNativeHandle(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativePointerIntoLibrary;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String name
         0: .line 235
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 237
            aload 0 /* this */
            aload 1 /* name */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeDataObjectOrNull:(Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
            astore 2 /* result */
        start local 2 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
         2: .line 238
            aload 2 /* result */
            ifnull 6
         3: .line 239
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* result */
            invokevirtual com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.getObject:()Ljava/lang/Object;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.asPointer:(Ljava/lang/Object;)J
            lstore 3 /* pointer */
        start local 3 // long pointer
         4: .line 240
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$NativePointerIntoLibrary
            dup
            lload 3 /* pointer */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$NativePointerIntoLibrary.<init>:(J)V
         5: areturn
        end local 3 // long pointer
         6: .line 242
      StackMap locals: com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
      StackMap stack:
            aconst_null
            areturn
        end local 2 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
         7: .line 243
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension java.lang.String
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedMessageException
            astore 2 /* e */
        start local 2 // com.oracle.truffle.api.interop.UnsupportedMessageException e
         8: .line 244
            new java.lang.IllegalStateException
            dup
            aload 2 /* e */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // com.oracle.truffle.api.interop.UnsupportedMessageException e
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    9     1     name  Ljava/lang/String;
            2    7     2   result  Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
            4    6     3  pointer  J
            8    9     2        e  Lcom/oracle/truffle/api/interop/UnsupportedMessageException;
      Exception table:
        from    to  target  type
           1     5       7  Class com.oracle.truffle.api.interop.UnsupportedMessageException
    MethodParameters:
      Name  Flags
      name  

  public java.lang.Object createNativeWrapper(com.oracle.truffle.llvm.runtime.LLVMFunction, com.oracle.truffle.llvm.runtime.LLVMFunctionCode);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/LLVMFunction;Lcom/oracle/truffle/llvm/runtime/LLVMFunctionCode;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.runtime.LLVMFunction function
        start local 2 // com.oracle.truffle.llvm.runtime.LLVMFunctionCode code
         0: .line 251
            aconst_null
            astore 3 /* wrapper */
        start local 3 // java.lang.Object wrapper
         1: .line 254
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureSourceCache:Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            aload 1 /* function */
            invokevirtual com.oracle.truffle.llvm.runtime.LLVMFunction.getType:()Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.getSignatureSource:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;)Lcom/oracle/truffle/api/source/Source;
            astore 4 /* signatureSource */
        start local 4 // com.oracle.truffle.api.source.Source signatureSource
         2: .line 255
            aload 0 /* this */
            aload 4 /* signatureSource */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getCachedSignature:(Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
            astore 5 /* signature */
        start local 5 // java.lang.Object signature
         3: .line 256
            invokestatic com.oracle.truffle.nfi.api.SignatureLibrary.getUncached:()Lcom/oracle/truffle/nfi/api/SignatureLibrary;
            aload 5 /* signature */
            new com.oracle.truffle.llvm.runtime.interop.nfi.LLVMNativeWrapper
            dup
            aload 1 /* function */
            aload 2 /* code */
            invokespecial com.oracle.truffle.llvm.runtime.interop.nfi.LLVMNativeWrapper.<init>:(Lcom/oracle/truffle/llvm/runtime/LLVMFunction;Lcom/oracle/truffle/llvm/runtime/LLVMFunctionCode;)V
            invokevirtual com.oracle.truffle.nfi.api.SignatureLibrary.createClosure:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* wrapper */
        end local 5 // java.lang.Object signature
        end local 4 // com.oracle.truffle.api.source.Source signatureSource
         4: .line 257
            goto 6
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension com.oracle.truffle.llvm.runtime.LLVMFunction com.oracle.truffle.llvm.runtime.LLVMFunctionCode java.lang.Object
      StackMap stack: com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
         5: pop
         6: .line 260
      StackMap locals:
      StackMap stack:
            aload 3 /* wrapper */
            areturn
        end local 3 // java.lang.Object wrapper
        end local 2 // com.oracle.truffle.llvm.runtime.LLVMFunctionCode code
        end local 1 // com.oracle.truffle.llvm.runtime.LLVMFunction function
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    7     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    7     1         function  Lcom/oracle/truffle/llvm/runtime/LLVMFunction;
            0    7     2             code  Lcom/oracle/truffle/llvm/runtime/LLVMFunctionCode;
            1    7     3          wrapper  Ljava/lang/Object;
            2    4     4  signatureSource  Lcom/oracle/truffle/api/source/Source;
            3    4     5        signature  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1     4       5  Class com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
          Name  Flags
      function  
      code      

  public synchronized void addLibraryHandles(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.Object library
         0: .line 265
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 266
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
            aload 1 /* library */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 3
         2: .line 267
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
            aload 1 /* library */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         3: .line 269
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object library
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    4     1  library  Ljava/lang/Object;
    MethodParameters:
         Name  Flags
      library  

  public synchronized com.oracle.truffle.api.CallTarget parseNativeLibrary(java.lang.String, com.oracle.truffle.llvm.runtime.LLVMContext);
    descriptor: (Ljava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Lcom/oracle/truffle/api/CallTarget;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String path
        start local 2 // com.oracle.truffle.llvm.runtime.LLVMContext context
         0: .line 273
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 274
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.visited:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* path */
            invokeinterface org.graalvm.collections.EconomicMap.containsKey:(Ljava/lang/Object;)Z
            ifne 7
         2: .line 275
            aload 0 /* this */
            aload 1 /* path */
            aload 2 /* context */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.loadLibrary:(Ljava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Ljava/lang/Object;
            astore 3 /* callTarget */
        start local 3 // java.lang.Object callTarget
         3: .line 276
            aload 3 /* callTarget */
            ifnull 6
         4: .line 277
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.visited:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* path */
            aload 3 /* callTarget */
            checkcast com.oracle.truffle.api.CallTarget
            invokeinterface org.graalvm.collections.EconomicMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 278
            aload 3 /* callTarget */
            checkcast com.oracle.truffle.api.CallTarget
            areturn
         6: .line 280
      StackMap locals: java.lang.Object
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            ldc "Native library call target is null."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.lang.Object callTarget
         7: .line 283
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.visited:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* path */
            invokeinterface org.graalvm.collections.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.CallTarget
            areturn
        end local 2 // com.oracle.truffle.llvm.runtime.LLVMContext context
        end local 1 // java.lang.String path
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    8     1        path  Ljava/lang/String;
            0    8     2     context  Lcom/oracle/truffle/llvm/runtime/LLVMContext;
            3    7     3  callTarget  Ljava/lang/Object;
    Exceptions:
      throws java.lang.UnsatisfiedLinkError
    MethodParameters:
         Name  Flags
      path     
      context  

  public static java.lang.String getNativeLibrarySuffix();
    descriptor: ()Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 288
            ldc "os.name"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            ldc "mac"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 289
            ldc "dylib"
            areturn
         2: .line 291
      StackMap locals:
      StackMap stack:
            ldc "so"
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static java.lang.String getNativeLibrarySuffixVersioned(int);
    descriptor: (I)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // int version
         0: .line 296
            ldc "os.name"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            ldc "mac"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 297
            new java.lang.StringBuilder
            dup
            iload 0 /* version */
            invokestatic java.lang.String.valueOf:(I)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ".dylib"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
         2: .line 299
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "so."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 0 /* version */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // int version
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  version  I
    MethodParameters:
         Name  Flags
      version  

  private java.lang.Object loadLibrary(java.lang.String, com.oracle.truffle.llvm.runtime.LLVMContext);
    descriptor: (Ljava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String path
        start local 2 // com.oracle.truffle.llvm.runtime.LLVMContext context
         0: .line 304
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 305
            aload 0 /* this */
            aload 1 /* path */
            iconst_0
            aconst_null
            aload 2 /* context */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.loadLibrary:(Ljava/lang/String;ZLjava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Ljava/lang/Object;
            areturn
        end local 2 // com.oracle.truffle.llvm.runtime.LLVMContext context
        end local 1 // java.lang.String path
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    2     1     path  Ljava/lang/String;
            0    2     2  context  Lcom/oracle/truffle/llvm/runtime/LLVMContext;
    MethodParameters:
         Name  Flags
      path     
      context  

  private java.lang.Object loadLibrary(java.lang.String, boolean, java.lang.String, com.oracle.truffle.llvm.runtime.LLVMContext);
    descriptor: (Ljava/lang/String;ZLjava/lang/String;Lcom/oracle/truffle/llvm/runtime/LLVMContext;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=8, args_size=5
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String path
        start local 2 // boolean optional
        start local 3 // java.lang.String flags
        start local 4 // com.oracle.truffle.llvm.runtime.LLVMContext context
         0: .line 309
            aload 4 /* context */
            aload 1 /* path */
            invokestatic com.oracle.truffle.llvm.runtime.LibraryLocator.traceLoadNative:(Lcom/oracle/truffle/llvm/runtime/LLVMContext;Ljava/lang/Object;)V
         1: .line 311
            aload 3 /* flags */
            ifnonnull 4
         2: .line 312
            ldc "load \"%s\""
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* path */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 5 /* loadExpression */
        start local 5 // java.lang.String loadExpression
         3: .line 313
            goto 5
        end local 5 // java.lang.String loadExpression
         4: .line 314
      StackMap locals:
      StackMap stack:
            ldc "load(%s) \"%s\""
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* flags */
            aastore
            dup
            iconst_1
            aload 1 /* path */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 5 /* loadExpression */
        start local 5 // java.lang.String loadExpression
         5: .line 316
      StackMap locals: java.lang.String
      StackMap stack:
            ldc "nfi"
            aload 5 /* loadExpression */
            new java.lang.StringBuilder
            dup
            ldc "(load "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* path */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ")"
            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 6 /* source */
        start local 6 // com.oracle.truffle.api.source.Source source
         6: .line 319
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 6 /* source */
            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;
         7: areturn
         8: .line 320
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension java.lang.String int java.lang.String com.oracle.truffle.llvm.runtime.LLVMContext java.lang.String com.oracle.truffle.api.source.Source
      StackMap stack: java.lang.UnsatisfiedLinkError
            astore 7 /* ex */
        start local 7 // java.lang.UnsatisfiedLinkError ex
         9: .line 321
            iload 2 /* optional */
            ifeq 11
        10: .line 322
            aconst_null
            areturn
        11: .line 324
      StackMap locals: java.lang.UnsatisfiedLinkError
      StackMap stack:
            aload 7 /* ex */
            athrow
        end local 7 // java.lang.UnsatisfiedLinkError ex
        end local 6 // com.oracle.truffle.api.source.Source source
        end local 5 // java.lang.String loadExpression
        end local 4 // com.oracle.truffle.llvm.runtime.LLVMContext context
        end local 3 // java.lang.String flags
        end local 2 // boolean optional
        end local 1 // java.lang.String path
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   12     0            this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   12     1            path  Ljava/lang/String;
            0   12     2        optional  Z
            0   12     3           flags  Ljava/lang/String;
            0   12     4         context  Lcom/oracle/truffle/llvm/runtime/LLVMContext;
            3    4     5  loadExpression  Ljava/lang/String;
            5   12     5  loadExpression  Ljava/lang/String;
            6   12     6          source  Lcom/oracle/truffle/api/source/Source;
            9   12     7              ex  Ljava/lang/UnsatisfiedLinkError;
      Exception table:
        from    to  target  type
           6     7       8  Class java.lang.UnsatisfiedLinkError
    MethodParameters:
          Name  Flags
      path      
      optional  
      flags     
      context   

  private java.lang.Object loadDefaultLibrary();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
         0: .line 330
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 331
            ldc "nfi"
            ldc "default"
            ldc "default"
            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 1 /* source */
        start local 1 // com.oracle.truffle.api.source.Source source
         2: .line 334
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* source */
            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;
         3: areturn
         4: .line 335
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension com.oracle.truffle.api.source.Source
      StackMap stack: java.lang.Exception
            astore 2 /* ex */
        start local 2 // java.lang.Exception ex
         5: .line 336
            new java.lang.IllegalArgumentException
            dup
            aload 2 /* ex */
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.Exception ex
        end local 1 // com.oracle.truffle.api.source.Source source
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            2    6     1  source  Lcom/oracle/truffle/api/source/Source;
            5    6     2      ex  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.Exception

  private static java.lang.Object getNativeFunctionOrNull(java.lang.Object, java.lang.String);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.lang.Object library
        start local 1 // java.lang.String name
         0: .line 341
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 342
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* library */
            aload 1 /* name */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            ifne 3
         2: .line 344
            aconst_null
            areturn
         3: .line 347
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* library */
            aload 1 /* name */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
         4: areturn
         5: .line 348
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnknownIdentifierException
            pop
         6: .line 349
            aconst_null
            areturn
         7: .line 350
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            astore 2 /* ex */
        start local 2 // com.oracle.truffle.api.interop.InteropException ex
         8: .line 351
            new java.lang.IllegalStateException
            dup
            aload 2 /* ex */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // com.oracle.truffle.api.interop.InteropException ex
        end local 1 // java.lang.String name
        end local 0 // java.lang.Object library
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0  library  Ljava/lang/Object;
            0    9     1     name  Ljava/lang/String;
            8    9     2       ex  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           3     4       5  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           3     4       7  Class com.oracle.truffle.api.interop.InteropException
    MethodParameters:
         Name  Flags
      library  
      name     

  private static java.lang.String getNativeType(com.oracle.truffle.llvm.runtime.types.Type);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/Type;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // com.oracle.truffle.llvm.runtime.types.Type type
         0: .line 356
            aload 0 /* type */
            instanceof com.oracle.truffle.llvm.runtime.types.FunctionType
            ifeq 2
         1: .line 357
            aload 0 /* type */
            checkcast com.oracle.truffle.llvm.runtime.types.FunctionType
            iconst_0
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeSignature:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)Ljava/lang/String;
            areturn
         2: .line 358
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof com.oracle.truffle.llvm.runtime.types.PointerType
            ifeq 5
            aload 0 /* type */
            checkcast com.oracle.truffle.llvm.runtime.types.PointerType
            invokevirtual com.oracle.truffle.llvm.runtime.types.PointerType.getPointeeType:()Lcom/oracle/truffle/llvm/runtime/types/Type;
            instanceof com.oracle.truffle.llvm.runtime.types.FunctionType
            ifeq 5
         3: .line 359
            aload 0 /* type */
            checkcast com.oracle.truffle.llvm.runtime.types.PointerType
            invokevirtual com.oracle.truffle.llvm.runtime.types.PointerType.getPointeeType:()Lcom/oracle/truffle/llvm/runtime/types/Type;
            checkcast com.oracle.truffle.llvm.runtime.types.FunctionType
            astore 1 /* functionType */
        start local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType functionType
         4: .line 360
            aload 1 /* functionType */
            iconst_0
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeSignature:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)Ljava/lang/String;
            areturn
        end local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType functionType
         5: .line 361
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof com.oracle.truffle.llvm.runtime.types.PointerType
            ifeq 7
         6: .line 362
            ldc "POINTER"
            areturn
         7: .line 363
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof com.oracle.truffle.llvm.runtime.types.PrimitiveType
            ifeq 18
         8: .line 364
            aload 0 /* type */
            checkcast com.oracle.truffle.llvm.runtime.types.PrimitiveType
            astore 1 /* primitiveType */
        start local 1 // com.oracle.truffle.llvm.runtime.types.PrimitiveType primitiveType
         9: .line 365
            aload 1 /* primitiveType */
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType.getPrimitiveKind:()Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            astore 2 /* kind */
        start local 2 // com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind kind
        10: .line 366
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$SWITCH_TABLE$com$oracle$truffle$llvm$runtime$types$PrimitiveType$PrimitiveKind:()[I
            aload 2 /* kind */
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iaload
            tableswitch { // 1 - 8
                    1: 11
                    2: 11
                    3: 12
                    4: 13
                    5: 14
                    6: 17
                    7: 15
                    8: 16
              default: 17
          }
        11: .line 369
      StackMap locals: com.oracle.truffle.llvm.runtime.types.PrimitiveType com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind
      StackMap stack:
            ldc "SINT8"
            areturn
        12: .line 371
      StackMap locals:
      StackMap stack:
            ldc "SINT16"
            areturn
        13: .line 373
      StackMap locals:
      StackMap stack:
            ldc "SINT32"
            areturn
        14: .line 375
      StackMap locals:
      StackMap stack:
            ldc "SINT64"
            areturn
        15: .line 377
      StackMap locals:
      StackMap stack:
            ldc "FLOAT"
            areturn
        16: .line 379
      StackMap locals:
      StackMap stack:
            ldc "DOUBLE"
            areturn
        17: .line 381
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
            dup
            aload 1 /* primitiveType */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException.<init>:(Lcom/oracle/truffle/llvm/runtime/types/Type;)V
            athrow
        end local 2 // com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind kind
        end local 1 // com.oracle.truffle.llvm.runtime.types.PrimitiveType primitiveType
        18: .line 384
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof com.oracle.truffle.llvm.runtime.types.VoidType
            ifeq 20
        19: .line 385
            ldc "VOID"
            areturn
        20: .line 387
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
            dup
            aload 0 /* type */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException.<init>:(Lcom/oracle/truffle/llvm/runtime/types/Type;)V
            athrow
        end local 0 // com.oracle.truffle.llvm.runtime.types.Type type
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   21     0           type  Lcom/oracle/truffle/llvm/runtime/types/Type;
            4    5     1   functionType  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
            9   18     1  primitiveType  Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType;
           10   18     2           kind  Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
      Name  Flags
      type  

  private static java.lang.String[] getNativeArgumentTypes(com.oracle.truffle.llvm.runtime.types.FunctionType, int);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType functionType
        start local 1 // int skipArguments
         0: .line 391
            aload 0 /* functionType */
            invokevirtual com.oracle.truffle.llvm.runtime.types.FunctionType.getNumberOfArguments:()I
            iload 1 /* skipArguments */
            isub
            anewarray java.lang.String
            astore 2 /* types */
        start local 2 // java.lang.String[] types
         1: .line 392
            iload 1 /* skipArguments */
            istore 3 /* i */
        start local 3 // int i
         2: goto 5
         3: .line 393
      StackMap locals: java.lang.String[] int
      StackMap stack:
            aload 2 /* types */
            iload 3 /* i */
            iload 1 /* skipArguments */
            isub
            aload 0 /* functionType */
            iload 3 /* i */
            invokevirtual com.oracle.truffle.llvm.runtime.types.FunctionType.getArgumentType:(I)Lcom/oracle/truffle/llvm/runtime/types/Type;
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeType:(Lcom/oracle/truffle/llvm/runtime/types/Type;)Ljava/lang/String;
            aastore
         4: .line 392
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         5: iload 3 /* i */
            aload 0 /* functionType */
            invokevirtual com.oracle.truffle.llvm.runtime.types.FunctionType.getNumberOfArguments:()I
            if_icmplt 3
        end local 3 // int i
         6: .line 395
            aload 2 /* types */
            areturn
        end local 2 // java.lang.String[] types
        end local 1 // int skipArguments
        end local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType functionType
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0   functionType  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
            0    7     1  skipArguments  I
            1    7     2          types  [Ljava/lang/String;
            2    6     3              i  I
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
               Name  Flags
      functionType   
      skipArguments  

  public synchronized com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult getNativeFunctionOrNull(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String name
         0: .line 400
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 401
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
            invokeinterface java.util.List.toArray:()[Ljava/lang/Object;
            astore 2 /* cursor */
        start local 2 // java.lang.Object[] cursor
         2: .line 402
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         3: goto 8
         4: .line 403
      StackMap locals: java.lang.Object[] int
      StackMap stack:
            aload 2 /* cursor */
            iload 3 /* i */
            aaload
            aload 1 /* name */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeFunctionOrNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 4 /* symbol */
        start local 4 // java.lang.Object symbol
         5: .line 404
            aload 4 /* symbol */
            ifnull 7
         6: .line 405
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
            dup
            aload 4 /* symbol */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.<init>:(Ljava/lang/Object;)V
            areturn
        end local 4 // java.lang.Object symbol
         7: .line 402
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 3 /* i */
            aload 2 /* cursor */
            arraylength
            if_icmplt 4
        end local 3 // int i
         9: .line 408
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.defaultLibraryHandle:Ljava/lang/Object;
            aload 1 /* name */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeFunctionOrNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 3 /* symbol */
        start local 3 // java.lang.Object symbol
        10: .line 409
            aload 3 /* symbol */
            ifnull 13
        11: .line 410
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
            ifne 12
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.isInitialized:()Z
            ifne 12
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        12: .line 411
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension java.lang.String java.lang.Object[] java.lang.Object
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
            dup
            aload 3 /* symbol */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.<init>:(Ljava/lang/Object;)V
            areturn
        13: .line 413
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // java.lang.Object symbol
        end local 2 // java.lang.Object[] cursor
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   14     1    name  Ljava/lang/String;
            2   14     2  cursor  [Ljava/lang/Object;
            3    9     3       i  I
            5    7     4  symbol  Ljava/lang/Object;
           10   14     3  symbol  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      name  

  private synchronized com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult getNativeDataObjectOrNull(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String name
         0: .line 417
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 418
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.libraryHandles:Ljava/util/List;
            invokeinterface java.util.List.toArray:()[Ljava/lang/Object;
            astore 2 /* cursor */
        start local 2 // java.lang.Object[] cursor
         2: .line 419
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         3: goto 8
         4: .line 420
      StackMap locals: java.lang.Object[] int
      StackMap stack:
            aload 2 /* cursor */
            iload 3 /* i */
            aaload
            aload 1 /* name */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeFunctionOrNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 4 /* symbol */
        start local 4 // java.lang.Object symbol
         5: .line 421
            aload 4 /* symbol */
            ifnull 7
         6: .line 422
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
            dup
            aload 4 /* symbol */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.<init>:(Ljava/lang/Object;)V
            areturn
        end local 4 // java.lang.Object symbol
         7: .line 419
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 3 /* i */
            aload 2 /* cursor */
            arraylength
            if_icmplt 4
        end local 3 // int i
         9: .line 425
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.defaultLibraryHandle:Ljava/lang/Object;
            aload 1 /* name */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeDataObjectOrNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 3 /* symbol */
        start local 3 // java.lang.Object symbol
        10: .line 426
            aload 3 /* symbol */
            ifnull 13
        11: .line 427
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
            ifne 12
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.isInitialized:()Z
            ifne 12
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        12: .line 428
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension java.lang.String java.lang.Object[] java.lang.Object
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
            dup
            aload 3 /* symbol */
            invokespecial com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.<init>:(Ljava/lang/Object;)V
            areturn
        13: .line 430
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // java.lang.Object symbol
        end local 2 // java.lang.Object[] cursor
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   14     1    name  Ljava/lang/String;
            2   14     2  cursor  [Ljava/lang/Object;
            3    9     3       i  I
            5    7     4  symbol  Ljava/lang/Object;
           10   14     3  symbol  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      name  

  private static java.lang.Object getNativeDataObjectOrNull(java.lang.Object, java.lang.String);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.Object libraryHandle
        start local 1 // java.lang.String name
         0: .line 435
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* libraryHandle */
            aload 1 /* name */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 2 /* symbol */
        start local 2 // java.lang.Object symbol
         1: .line 436
            aload 2 /* symbol */
            ifnull 4
            lconst_0
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* symbol */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.asPointer:(Ljava/lang/Object;)J
            lcmp
            ifeq 4
         2: .line 437
            aload 2 /* symbol */
         3: areturn
         4: .line 439
      StackMap locals: java.lang.Object
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.lang.Object symbol
         5: .line 441
      StackMap locals: java.lang.Object java.lang.String
      StackMap stack: com.oracle.truffle.api.interop.UnknownIdentifierException
            pop
         6: .line 443
            aconst_null
            areturn
         7: .line 444
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            astore 2 /* ex */
        start local 2 // com.oracle.truffle.api.interop.InteropException ex
         8: .line 445
            new java.lang.IllegalStateException
            dup
            aload 2 /* ex */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // com.oracle.truffle.api.interop.InteropException ex
        end local 1 // java.lang.String name
        end local 0 // java.lang.Object libraryHandle
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    9     0  libraryHandle  Ljava/lang/Object;
            0    9     1           name  Ljava/lang/String;
            1    5     2         symbol  Ljava/lang/Object;
            8    9     2             ex  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           0     3       5  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           0     3       7  Class com.oracle.truffle.api.interop.InteropException
    MethodParameters:
               Name  Flags
      libraryHandle  
      name           

  private static java.lang.Object bindNativeFunction(java.lang.Object, java.lang.String);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // java.lang.Object symbol
        start local 1 // java.lang.String signature
         0: .line 450
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 452
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* symbol */
            ldc "bind"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* signature */
            aastore
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
         2: areturn
         3: .line 453
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            astore 2 /* ex */
        start local 2 // com.oracle.truffle.api.interop.InteropException ex
         4: .line 454
            new java.lang.IllegalStateException
            dup
            aload 2 /* ex */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // com.oracle.truffle.api.interop.InteropException ex
        end local 1 // java.lang.String signature
        end local 0 // java.lang.Object symbol
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0     symbol  Ljava/lang/Object;
            0    5     1  signature  Ljava/lang/String;
            4    5     2         ex  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           1     2       3  Class com.oracle.truffle.api.interop.InteropException
    MethodParameters:
           Name  Flags
      symbol     
      signature  

  public java.lang.Object getNativeFunction(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // java.lang.String name
        start local 2 // java.lang.String signature
         0: .line 460
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 461
            aload 0 /* this */
            aload 1 /* name */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeFunctionOrNull:(Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
            astore 3 /* result */
        start local 3 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
         2: .line 462
            aload 3 /* result */
            ifnull 4
         3: .line 463
            aload 3 /* result */
            invokevirtual com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.getObject:()Ljava/lang/Object;
            aload 2 /* signature */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.bindNativeFunction:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            areturn
         4: .line 465
      StackMap locals: com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.except.LLVMLinkerException
            dup
            ldc "External function %s cannot be found."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* name */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial com.oracle.truffle.llvm.runtime.except.LLVMLinkerException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
        end local 2 // java.lang.String signature
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    5     1       name  Ljava/lang/String;
            0    5     2  signature  Ljava/lang/String;
            2    5     3     result  Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
    MethodParameters:
           Name  Flags
      name       
      signature  

  public com.oracle.truffle.llvm.runtime.NativeContextExtension$WellKnownNativeFunctionNode getWellKnownNativeFunction(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$WellKnownNativeFunctionNode;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
         0: .line 472
            new java.lang.Error
            dup
            ldc "Unresolved compilation problem: \n\tWellKnownNFIFunctionNodeGen cannot be resolved\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
    MethodParameters:
           Name  Flags
      name       
      signature  

  private java.lang.Object createWellKnownFunction(com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction);
    descriptor: (Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
         0: .line 476
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 477
            aload 0 /* this */
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.name:Ljava/lang/String;
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeFunctionOrNull:(Ljava/lang/String;)Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
            astore 2 /* result */
        start local 2 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
         2: .line 478
            aload 2 /* result */
            ifnull 6
         3: .line 479
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.signatureSource:Lcom/oracle/truffle/api/source/Source;
            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;
            astore 3 /* parsedSignature */
        start local 3 // com.oracle.truffle.api.CallTarget parsedSignature
         4: .line 480
            aload 3 /* parsedSignature */
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* signature */
        start local 4 // java.lang.Object signature
         5: .line 481
            invokestatic com.oracle.truffle.nfi.api.SignatureLibrary.getUncached:()Lcom/oracle/truffle/nfi/api/SignatureLibrary;
            aload 4 /* signature */
            aload 2 /* result */
            invokevirtual com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult.getObject:()Ljava/lang/Object;
            invokevirtual com.oracle.truffle.nfi.api.SignatureLibrary.bind:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 4 // java.lang.Object signature
        end local 3 // com.oracle.truffle.api.CallTarget parsedSignature
         6: .line 483
      StackMap locals: com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult
      StackMap stack:
            new com.oracle.truffle.llvm.runtime.except.LLVMLinkerException
            dup
            ldc "External function %s cannot be found."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.name:Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial com.oracle.truffle.llvm.runtime.except.LLVMLinkerException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult result
        end local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    7     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    7     1               fn  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;
            2    7     2           result  Lcom/oracle/truffle/llvm/runtime/NativeContextExtension$NativeLookupResult;
            4    6     3  parsedSignature  Lcom/oracle/truffle/api/CallTarget;
            5    6     4        signature  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      fn    

  private java.lang.Object getWellKnownFuctionSlowPath(com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction);
    descriptor: (Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
         0: .line 488
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         1: .line 489
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            arraylength
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            if_icmpgt 7
         2: .line 490
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            arraylength
            iconst_2
            imul
            istore 3 /* newLength */
        start local 3 // int newLength
         3: .line 491
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$assertionsDisabled:Z
            ifne 5
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureSourceCache:Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.nextIndex:I
            if_icmplt 5
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         4: .line 493
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension int
      StackMap stack:
            iload 3 /* newLength */
            iconst_2
            imul
            istore 3 /* newLength */
         5: .line 492
      StackMap locals:
      StackMap stack:
            iload 3 /* newLength */
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureSourceCache:Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.nextIndex:I
            if_icmplt 4
         6: .line 495
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            iload 3 /* newLength */
            invokestatic java.util.Arrays.copyOf:([Ljava/lang/Object;I)[Ljava/lang/Object;
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
        end local 3 // int newLength
         7: .line 497
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            aaload
            astore 3 /* ret */
        start local 3 // java.lang.Object ret
         8: .line 498
            aload 3 /* ret */
            ifnonnull 11
         9: .line 499
            aload 0 /* this */
            aload 1 /* fn */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.createWellKnownFunction:(Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;)Ljava/lang/Object;
            astore 3 /* ret */
        10: .line 500
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            aload 3 /* ret */
            aastore
        11: .line 502
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 3 /* ret */
            aload 2
            monitorexit
        12: areturn
        end local 3 // java.lang.Object ret
        13: .line 488
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
        14: athrow
        end local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   15     0       this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   15     1         fn  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;
            3    7     3  newLength  I
            8   13     3        ret  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1    12      13  any
          13    14      13  any
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
      Name  Flags
      fn    

  java.lang.Object getCachedWellKnownFunction(com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction);
    descriptor: (Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
         0: .line 507
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            arraylength
            if_icmpge 4
         1: .line 508
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.wellKnownFunctionCache:[Ljava/lang/Object;
            aload 1 /* fn */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.index:I
            aaload
            astore 2 /* ret */
        start local 2 // java.lang.Object ret
         2: .line 509
            aload 2 /* ret */
            ifnull 4
         3: .line 510
            aload 2 /* ret */
            areturn
        end local 2 // java.lang.Object ret
         4: .line 513
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fn */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getWellKnownFuctionSlowPath:(Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;)Ljava/lang/Object;
            areturn
        end local 1 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction fn
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    5     1    fn  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;
            2    4     2   ret  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      fn    

  public com.oracle.truffle.api.source.Source getNativeSignatureSourceSkipStackArg(com.oracle.truffle.llvm.runtime.types.FunctionType);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;)Lcom/oracle/truffle/api/source/Source;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
         0: .line 518
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 519
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureSourceCache:Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            aload 1 /* type */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.getSignatureSourceSkipStackArg:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;)Lcom/oracle/truffle/api/source/Source;
            areturn
        end local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    2     1  type  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
      Name  Flags
      type  

  private java.lang.Object createSignature(com.oracle.truffle.api.source.Source);
    descriptor: (Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.api.source.Source signatureSource
         0: .line 524
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureCache:Lorg/graalvm/collections/EconomicMap;
            dup
            astore 2
            monitorenter
         1: .line 525
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureCache:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* signatureSource */
            invokeinterface org.graalvm.collections.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* ret */
        start local 3 // java.lang.Object ret
         2: .line 526
            aload 3 /* ret */
            ifnonnull 6
         3: .line 527
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* signatureSource */
            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;
            astore 4 /* createSignature */
        start local 4 // com.oracle.truffle.api.CallTarget createSignature
         4: .line 528
            aload 4 /* createSignature */
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* ret */
         5: .line 529
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureCache:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* signatureSource */
            aload 3 /* ret */
            invokeinterface org.graalvm.collections.EconomicMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 4 // com.oracle.truffle.api.CallTarget createSignature
         6: .line 531
      StackMap locals: org.graalvm.collections.EconomicMap java.lang.Object
      StackMap stack:
            aload 3 /* ret */
            aload 2
            monitorexit
         7: areturn
        end local 3 // java.lang.Object ret
         8: .line 524
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension com.oracle.truffle.api.source.Source org.graalvm.collections.EconomicMap
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
         9: athrow
        end local 1 // com.oracle.truffle.api.source.Source signatureSource
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   10     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0   10     1  signatureSource  Lcom/oracle/truffle/api/source/Source;
            2    8     3              ret  Ljava/lang/Object;
            4    6     4  createSignature  Lcom/oracle/truffle/api/CallTarget;
      Exception table:
        from    to  target  type
           1     7       8  any
           8     9       8  any
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
                 Name  Flags
      signatureSource  

  private java.lang.Object getCachedSignature(com.oracle.truffle.api.source.Source);
    descriptor: (Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.api.source.Source signatureSource
         0: .line 536
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.signatureCache:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* signatureSource */
            invokeinterface org.graalvm.collections.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* ret */
        start local 2 // java.lang.Object ret
         1: .line 537
            aload 2 /* ret */
            ifnonnull 3
         2: .line 538
            aload 0 /* this */
            aload 1 /* signatureSource */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.createSignature:(Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
            astore 2 /* ret */
         3: .line 540
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2 /* ret */
            areturn
        end local 2 // java.lang.Object ret
        end local 1 // com.oracle.truffle.api.source.Source signatureSource
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    4     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    4     1  signatureSource  Lcom/oracle/truffle/api/source/Source;
            1    4     2              ret  Ljava/lang/Object;
    MethodParameters:
                 Name  Flags
      signatureSource  

  public java.lang.Object bindSignature(com.oracle.truffle.llvm.runtime.LLVMFunctionCode, com.oracle.truffle.api.source.Source);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/LLVMFunctionCode;Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // com.oracle.truffle.llvm.runtime.LLVMFunctionCode function
        start local 2 // com.oracle.truffle.api.source.Source signatureSource
         0: .line 546
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 547
            aload 1 /* function */
            invokevirtual com.oracle.truffle.llvm.runtime.LLVMFunctionCode.getNativeFunctionSlowPath:()Ljava/lang/Object;
            astore 3 /* nativeFunction */
        start local 3 // java.lang.Object nativeFunction
         2: .line 548
            aload 0 /* this */
            aload 2 /* signatureSource */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getCachedSignature:(Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
            astore 4 /* signature */
        start local 4 // java.lang.Object signature
         3: .line 549
            invokestatic com.oracle.truffle.nfi.api.SignatureLibrary.getUncached:()Lcom/oracle/truffle/nfi/api/SignatureLibrary;
            aload 4 /* signature */
            aload 3 /* nativeFunction */
            invokevirtual com.oracle.truffle.nfi.api.SignatureLibrary.bind:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 4 // java.lang.Object signature
        end local 3 // java.lang.Object nativeFunction
        end local 2 // com.oracle.truffle.api.source.Source signatureSource
        end local 1 // com.oracle.truffle.llvm.runtime.LLVMFunctionCode function
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    4     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    4     1         function  Lcom/oracle/truffle/llvm/runtime/LLVMFunctionCode;
            0    4     2  signatureSource  Lcom/oracle/truffle/api/source/Source;
            2    4     3   nativeFunction  Ljava/lang/Object;
            3    4     4        signature  Ljava/lang/Object;
    MethodParameters:
                 Name  Flags
      function         
      signatureSource  

  public java.lang.Object bindSignature(long, com.oracle.truffle.api.source.Source);
    descriptor: (JLcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
        start local 1 // long fnPtr
        start local 3 // com.oracle.truffle.api.source.Source signatureSource
         0: .line 555
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 556
            aload 0 /* this */
            aload 3 /* signatureSource */
            invokevirtual com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getCachedSignature:(Lcom/oracle/truffle/api/source/Source;)Ljava/lang/Object;
            astore 4 /* signature */
        start local 4 // java.lang.Object signature
         2: .line 557
            invokestatic com.oracle.truffle.nfi.api.SignatureLibrary.getUncached:()Lcom/oracle/truffle/nfi/api/SignatureLibrary;
            aload 4 /* signature */
            lload 1 /* fnPtr */
            invokestatic com.oracle.truffle.llvm.runtime.pointer.LLVMNativePointer.create:(J)Lcom/oracle/truffle/llvm/runtime/pointer/LLVMNativePointer;
            invokevirtual com.oracle.truffle.nfi.api.SignatureLibrary.bind:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 4 // java.lang.Object signature
        end local 3 // com.oracle.truffle.api.source.Source signatureSource
        end local 1 // long fnPtr
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    3     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension;
            0    3     1            fnPtr  J
            0    3     3  signatureSource  Lcom/oracle/truffle/api/source/Source;
            2    3     4        signature  Ljava/lang/Object;
    MethodParameters:
                 Name  Flags
      fnPtr            
      signatureSource  

  private static java.lang.String getNativeSignature(com.oracle.truffle.llvm.runtime.types.FunctionType, int);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=9, args_size=2
        start local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType type
        start local 1 // int skipArguments
         0: .line 562
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 563
            aload 0 /* type */
            invokevirtual com.oracle.truffle.llvm.runtime.types.FunctionType.getReturnType:()Lcom/oracle/truffle/llvm/runtime/types/Type;
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeType:(Lcom/oracle/truffle/llvm/runtime/types/Type;)Ljava/lang/String;
            astore 2 /* nativeRet */
        start local 2 // java.lang.String nativeRet
         2: .line 564
            aload 0 /* type */
            iload 1 /* skipArguments */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeArgumentTypes:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)[Ljava/lang/String;
            astore 3 /* argTypes */
        start local 3 // java.lang.String[] argTypes
         3: .line 565
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 4 /* sb */
        start local 4 // java.lang.StringBuilder sb
         4: .line 566
            aload 4 /* sb */
            ldc "("
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         5: .line 567
            aload 3 /* argTypes */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 10
      StackMap locals: com.oracle.truffle.llvm.runtime.types.FunctionType int java.lang.String java.lang.String[] java.lang.StringBuilder top int int java.lang.String[]
      StackMap stack:
         6: aload 8
            iload 6
            aaload
            astore 5 /* a */
        start local 5 // java.lang.String a
         7: .line 568
            aload 4 /* sb */
            aload 5 /* a */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         8: .line 569
            aload 4 /* sb */
            ldc ","
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        end local 5 // java.lang.String a
         9: .line 567
            iinc 6 1
      StackMap locals:
      StackMap stack:
        10: iload 6
            iload 7
            if_icmplt 6
        11: .line 571
            aload 3 /* argTypes */
            arraylength
            ifle 14
        12: .line 572
            aload 4 /* sb */
            aload 4 /* sb */
            invokevirtual java.lang.StringBuilder.length:()I
            iconst_1
            isub
            bipush 41
            invokevirtual java.lang.StringBuilder.setCharAt:(IC)V
        13: .line 573
            goto 15
        14: .line 574
      StackMap locals: com.oracle.truffle.llvm.runtime.types.FunctionType int java.lang.String java.lang.String[] java.lang.StringBuilder
      StackMap stack:
            aload 4 /* sb */
            bipush 41
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        15: .line 576
      StackMap locals:
      StackMap stack:
            aload 4 /* sb */
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        16: .line 577
            aload 4 /* sb */
            aload 2 /* nativeRet */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        17: .line 578
            aload 4 /* sb */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 4 // java.lang.StringBuilder sb
        end local 3 // java.lang.String[] argTypes
        end local 2 // java.lang.String nativeRet
        end local 1 // int skipArguments
        end local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType type
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   18     0           type  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
            0   18     1  skipArguments  I
            2   18     2      nativeRet  Ljava/lang/String;
            3   18     3       argTypes  [Ljava/lang/String;
            4   18     4             sb  Ljava/lang/StringBuilder;
            7    9     5              a  Ljava/lang/String;
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
               Name  Flags
      type           
      skipArguments  

  static int[] $SWITCH_TABLE$com$oracle$truffle$llvm$runtime$types$PrimitiveType$PrimitiveKind();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 69
            getstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$SWITCH_TABLE$com$oracle$truffle$llvm$runtime$types$PrimitiveType$PrimitiveKind:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.values:()[Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.DOUBLE:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 8
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.F128:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 9
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.FLOAT:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 7
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.HALF:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 6
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.I1:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iconst_1
            iastore
        15: goto 17
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        16: pop
      StackMap locals:
      StackMap stack:
        17: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.I16:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iconst_3
            iastore
        18: goto 20
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        19: pop
      StackMap locals:
      StackMap stack:
        20: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.I32:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iconst_4
            iastore
        21: goto 23
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        22: pop
      StackMap locals:
      StackMap stack:
        23: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.I64:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iconst_5
            iastore
        24: goto 26
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        25: pop
      StackMap locals:
      StackMap stack:
        26: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.I8:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            iconst_2
            iastore
        27: goto 29
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        28: pop
      StackMap locals:
      StackMap stack:
        29: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.PPC_FP128:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 11
            iastore
        30: goto 32
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        31: pop
      StackMap locals:
      StackMap stack:
        32: aload 0
            getstatic com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.X86_FP80:Lcom/oracle/truffle/llvm/runtime/types/PrimitiveType$PrimitiveKind;
            invokevirtual com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind.ordinal:()I
            bipush 10
            iastore
        33: goto 35
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        34: pop
      StackMap locals:
      StackMap stack:
        35: aload 0
            dup
            putstatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.$SWITCH_TABLE$com$oracle$truffle$llvm$runtime$types$PrimitiveType$PrimitiveKind:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
          14    15      16  Class java.lang.NoSuchFieldError
          17    18      19  Class java.lang.NoSuchFieldError
          20    21      22  Class java.lang.NoSuchFieldError
          23    24      25  Class java.lang.NoSuchFieldError
          26    27      28  Class java.lang.NoSuchFieldError
          29    30      31  Class java.lang.NoSuchFieldError
          32    33      34  Class java.lang.NoSuchFieldError
}
SourceFile: "NFIContextExtension.java"
NestMembers:
  com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$Factory  com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache  com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  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 Factory = com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$Factory of com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  private final SignatureSourceCache = com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache of com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  final WellKnownFunction = com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction of com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  public final NativeLookupResult = com.oracle.truffle.llvm.runtime.NativeContextExtension$NativeLookupResult of com.oracle.truffle.llvm.runtime.NativeContextExtension
  public final NativePointerIntoLibrary = com.oracle.truffle.llvm.runtime.NativeContextExtension$NativePointerIntoLibrary of com.oracle.truffle.llvm.runtime.NativeContextExtension
  public UnsupportedNativeTypeException = com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException of com.oracle.truffle.llvm.runtime.NativeContextExtension
  public abstract WellKnownNativeFunctionNode = com.oracle.truffle.llvm.runtime.NativeContextExtension$WellKnownNativeFunctionNode of com.oracle.truffle.llvm.runtime.NativeContextExtension
  public final PrimitiveKind = com.oracle.truffle.llvm.runtime.types.PrimitiveType$PrimitiveKind of com.oracle.truffle.llvm.runtime.types.PrimitiveType