final class com.oracle.truffle.nfi.impl.NFIBackendImpl implements com.oracle.truffle.nfi.spi.NFIBackend
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.nfi.impl.NFIBackendImpl
  super_class: java.lang.Object
{
  private final com.oracle.truffle.nfi.impl.NFILanguageImpl language;
    descriptor: Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final com.oracle.truffle.nfi.spi.NFIBackendTools tools;
    descriptor: Lcom/oracle/truffle/nfi/spi/NFIBackendTools;
    flags: (0x0010) ACC_FINAL

  void <init>(com.oracle.truffle.nfi.impl.NFILanguageImpl, com.oracle.truffle.nfi.spi.NFIBackendTools);
    descriptor: (Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;Lcom/oracle/truffle/nfi/spi/NFIBackendTools;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.impl.NFILanguageImpl language
        start local 2 // com.oracle.truffle.nfi.spi.NFIBackendTools tools
         0: .line 69
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 70
            aload 0 /* this */
            aload 1 /* language */
            putfield com.oracle.truffle.nfi.impl.NFIBackendImpl.language:Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;
         2: .line 71
            aload 0 /* this */
            aload 2 /* tools */
            putfield com.oracle.truffle.nfi.impl.NFIBackendImpl.tools:Lcom/oracle/truffle/nfi/spi/NFIBackendTools;
         3: .line 72
            return
        end local 2 // com.oracle.truffle.nfi.spi.NFIBackendTools tools
        end local 1 // com.oracle.truffle.nfi.impl.NFILanguageImpl language
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0    4     1  language  Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;
            0    4     2     tools  Lcom/oracle/truffle/nfi/spi/NFIBackendTools;
    MethodParameters:
          Name  Flags
      language  
      tools     

  public com.oracle.truffle.api.CallTarget parse(com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor);
    descriptor: (Lcom/oracle/truffle/nfi/spi/types/NativeLibraryDescriptor;)Lcom/oracle/truffle/api/CallTarget;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=9, args_size=2
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor descriptor
         0: .line 77
            invokestatic com.oracle.truffle.nfi.impl.NFILanguageImpl.getCurrentContext:()Lcom/oracle/truffle/nfi/impl/NFIContext;
            astore 3 /* ctx */
        start local 3 // com.oracle.truffle.nfi.impl.NFIContext ctx
         1: .line 78
            aload 1 /* descriptor */
            invokevirtual com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor.isDefaultLibrary:()Z
            ifeq 4
         2: .line 79
            new com.oracle.truffle.nfi.impl.NFIBackendImpl$GetDefaultLibraryNode
            dup
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.impl.NFIBackendImpl.language:Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;
            invokespecial com.oracle.truffle.nfi.impl.NFIBackendImpl$GetDefaultLibraryNode.<init>:(Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)V
            astore 2 /* root */
        start local 2 // com.oracle.truffle.api.nodes.RootNode root
         3: .line 80
            goto 32
        end local 2 // com.oracle.truffle.api.nodes.RootNode root
         4: .line 81
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor top com.oracle.truffle.nfi.impl.NFIContext
      StackMap stack:
            iconst_0
            istore 4 /* flags */
        start local 4 // int flags
         5: .line 82
            iconst_0
            istore 5 /* lazyOrNow */
        start local 5 // boolean lazyOrNow
         6: .line 83
            aload 1 /* descriptor */
            invokevirtual com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor.getFlags:()Ljava/util/List;
            ifnull 29
         7: .line 84
            aload 1 /* descriptor */
            invokevirtual com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor.getFlags:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 28
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor top com.oracle.truffle.nfi.impl.NFIContext int int top java.util.Iterator
      StackMap stack:
         8: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* flag */
        start local 6 // java.lang.String flag
         9: .line 85
            aload 6 /* flag */
            dup
            astore 8
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 5
          -1805175736: 10
          -1047548583: 11
            658947121: 12
           1371486613: 13
           1886126598: 14
              default: 28
          }
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor top com.oracle.truffle.nfi.impl.NFIContext int int java.lang.String java.util.Iterator java.lang.String
      StackMap stack:
        10: aload 8
            ldc "RTLD_GLOBAL"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 15
            goto 28
      StackMap locals:
      StackMap stack:
        11: aload 8
            ldc "RTLD_LAZY"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 19
            goto 28
      StackMap locals:
      StackMap stack:
        12: aload 8
            ldc "RTLD_NOW"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 22
            goto 28
      StackMap locals:
      StackMap stack:
        13: aload 8
            ldc "ISOLATED_NAMESPACE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 25
            goto 28
      StackMap locals:
      StackMap stack:
        14: aload 8
            ldc "RTLD_LOCAL"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 17
            goto 28
        15: .line 87
      StackMap locals:
      StackMap stack:
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.RTLD_GLOBAL:I
            ior
            istore 4 /* flags */
        16: .line 88
            goto 28
        17: .line 90
      StackMap locals:
      StackMap stack:
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.RTLD_LOCAL:I
            ior
            istore 4 /* flags */
        18: .line 91
            goto 28
        19: .line 93
      StackMap locals:
      StackMap stack:
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.RTLD_LAZY:I
            ior
            istore 4 /* flags */
        20: .line 94
            iconst_1
            istore 5 /* lazyOrNow */
        21: .line 95
            goto 28
        22: .line 97
      StackMap locals:
      StackMap stack:
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.RTLD_NOW:I
            ior
            istore 4 /* flags */
        23: .line 98
            iconst_1
            istore 5 /* lazyOrNow */
        24: .line 99
            goto 28
        25: .line 101
      StackMap locals:
      StackMap stack:
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.ISOLATED_NAMESPACE:I
            ifne 27
        26: .line 103
            new java.lang.IllegalArgumentException
            dup
            ldc "isolated namespace not supported"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        27: .line 105
      StackMap locals:
      StackMap stack:
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.ISOLATED_NAMESPACE:I
            ior
            istore 4 /* flags */
        end local 6 // java.lang.String flag
        28: .line 84
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor top com.oracle.truffle.nfi.impl.NFIContext int int top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        29: .line 110
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor top com.oracle.truffle.nfi.impl.NFIContext int int
      StackMap stack:
            iload 5 /* lazyOrNow */
            ifne 31
        30: .line 112
            iload 4 /* flags */
            aload 3 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.RTLD_NOW:I
            ior
            istore 4 /* flags */
        31: .line 114
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.nfi.impl.NFIBackendImpl$LoadLibraryNode
            dup
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.impl.NFIBackendImpl.language:Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;
            aload 1 /* descriptor */
            invokevirtual com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor.getFilename:()Ljava/lang/String;
            iload 4 /* flags */
            invokespecial com.oracle.truffle.nfi.impl.NFIBackendImpl$LoadLibraryNode.<init>:(Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;Ljava/lang/String;I)V
            astore 2 /* root */
        end local 5 // boolean lazyOrNow
        end local 4 // int flags
        start local 2 // com.oracle.truffle.api.nodes.RootNode root
        32: .line 116
      StackMap locals: com.oracle.truffle.nfi.impl.NFIBackendImpl com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor com.oracle.truffle.api.nodes.RootNode com.oracle.truffle.nfi.impl.NFIContext
      StackMap stack:
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            aload 2 /* root */
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createCallTarget:(Lcom/oracle/truffle/api/nodes/RootNode;)Lcom/oracle/truffle/api/RootCallTarget;
            areturn
        end local 3 // com.oracle.truffle.nfi.impl.NFIContext ctx
        end local 2 // com.oracle.truffle.api.nodes.RootNode root
        end local 1 // com.oracle.truffle.nfi.spi.types.NativeLibraryDescriptor descriptor
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   33     0        this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0   33     1  descriptor  Lcom/oracle/truffle/nfi/spi/types/NativeLibraryDescriptor;
            3    4     2        root  Lcom/oracle/truffle/api/nodes/RootNode;
           32   33     2        root  Lcom/oracle/truffle/api/nodes/RootNode;
            1   33     3         ctx  Lcom/oracle/truffle/nfi/impl/NFIContext;
            5   32     4       flags  I
            6   32     5   lazyOrNow  Z
            9   28     6        flag  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      descriptor  

  java.lang.Object getSimpleType(com.oracle.truffle.nfi.spi.types.NativeSimpleType, com.oracle.truffle.nfi.impl.NFIContext);
    descriptor: (Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;Lcom/oracle/truffle/nfi/impl/NFIContext;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.spi.types.NativeSimpleType type
        start local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
         0: .line 175
            aload 2 /* ctx */
            aload 1 /* type */
            invokevirtual com.oracle.truffle.nfi.impl.NFIContext.lookupSimpleType:(Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;)Lcom/oracle/truffle/nfi/impl/LibFFIType;
            areturn
        end local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
        end local 1 // com.oracle.truffle.nfi.spi.types.NativeSimpleType type
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0    1     1  type  Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;
            0    1     2   ctx  Lcom/oracle/truffle/nfi/impl/NFIContext;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportMessage()
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)
    MethodParameters:
      Name  Flags
      type  
      ctx   

  java.lang.Object getArrayType(com.oracle.truffle.nfi.spi.types.NativeSimpleType, com.oracle.truffle.nfi.impl.NFIContext);
    descriptor: (Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;Lcom/oracle/truffle/nfi/impl/NFIContext;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.spi.types.NativeSimpleType type
        start local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
         0: .line 181
            aload 2 /* ctx */
            aload 1 /* type */
            invokevirtual com.oracle.truffle.nfi.impl.NFIContext.lookupArrayType:(Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;)Lcom/oracle/truffle/nfi/impl/LibFFIType;
            areturn
        end local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
        end local 1 // com.oracle.truffle.nfi.spi.types.NativeSimpleType type
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0    1     1  type  Lcom/oracle/truffle/nfi/spi/types/NativeSimpleType;
            0    1     2   ctx  Lcom/oracle/truffle/nfi/impl/NFIContext;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportMessage()
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)
    MethodParameters:
      Name  Flags
      type  
      ctx   

  java.lang.Object getEnvType(com.oracle.truffle.nfi.impl.NFIContext);
    descriptor: (Lcom/oracle/truffle/nfi/impl/NFIContext;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.impl.NFIContext ctx
         0: .line 186
            aload 1 /* ctx */
            invokevirtual com.oracle.truffle.nfi.impl.NFIContext.lookupEnvType:()Lcom/oracle/truffle/nfi/impl/LibFFIType;
            areturn
        end local 1 // com.oracle.truffle.nfi.impl.NFIContext ctx
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0    1     1   ctx  Lcom/oracle/truffle/nfi/impl/NFIContext;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportMessage()
    RuntimeInvisibleParameterAnnotations: 
      0:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)
    MethodParameters:
      Name  Flags
      ctx   

  java.lang.Object createSignatureBuilder(com.oracle.truffle.nfi.spi.NFIBackendLibrary, com.oracle.truffle.nfi.impl.NFIContext, com.oracle.truffle.nfi.util.ProfiledArrayBuilder$ArrayBuilderFactory);
    descriptor: (Lcom/oracle/truffle/nfi/spi/NFIBackendLibrary;Lcom/oracle/truffle/nfi/impl/NFIContext;Lcom/oracle/truffle/nfi/util/ProfiledArrayBuilder$ArrayBuilderFactory;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
        start local 1 // com.oracle.truffle.nfi.spi.NFIBackendLibrary self
        start local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
        start local 3 // com.oracle.truffle.nfi.util.ProfiledArrayBuilder$ArrayBuilderFactory builderFactory
         0: .line 194
            aload 2 /* ctx */
            getfield com.oracle.truffle.nfi.impl.NFIContext.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.isNativeAccessAllowed:()Z
            ifne 3
         1: .line 195
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreter:()V
         2: .line 196
            new com.oracle.truffle.nfi.impl.NFIUnsatisfiedLinkError
            dup
            ldc "Access to native code is not allowed by the host environment."
            aload 1 /* self */
            invokespecial com.oracle.truffle.nfi.impl.NFIUnsatisfiedLinkError.<init>:(Ljava/lang/String;Lcom/oracle/truffle/api/nodes/Node;)V
            athrow
         3: .line 198
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.nfi.impl.LibFFISignature$SignatureBuilder
            dup
            aload 3 /* builderFactory */
            invokespecial com.oracle.truffle.nfi.impl.LibFFISignature$SignatureBuilder.<init>:(Lcom/oracle/truffle/nfi/util/ProfiledArrayBuilder$ArrayBuilderFactory;)V
            areturn
        end local 3 // com.oracle.truffle.nfi.util.ProfiledArrayBuilder$ArrayBuilderFactory builderFactory
        end local 2 // com.oracle.truffle.nfi.impl.NFIContext ctx
        end local 1 // com.oracle.truffle.nfi.spi.NFIBackendLibrary self
        end local 0 // com.oracle.truffle.nfi.impl.NFIBackendImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lcom/oracle/truffle/nfi/impl/NFIBackendImpl;
            0    4     1            self  Lcom/oracle/truffle/nfi/spi/NFIBackendLibrary;
            0    4     2             ctx  Lcom/oracle/truffle/nfi/impl/NFIContext;
            0    4     3  builderFactory  Lcom/oracle/truffle/nfi/util/ProfiledArrayBuilder$ArrayBuilderFactory;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportMessage()
    RuntimeInvisibleParameterAnnotations: 
      0:
        com.oracle.truffle.api.library.CachedLibrary(value = "this")
      1:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)
      2:
        com.oracle.truffle.api.dsl.Cached()
    MethodParameters:
                Name  Flags
      self            
      ctx             
      builderFactory  
}
SourceFile: "NFIBackendImpl.java"
NestMembers:
  com.oracle.truffle.nfi.impl.NFIBackendImpl$GetDefaultLibraryNode  com.oracle.truffle.nfi.impl.NFIBackendImpl$LoadLibraryNode
InnerClasses:
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  final SignatureBuilder = com.oracle.truffle.nfi.impl.LibFFISignature$SignatureBuilder of com.oracle.truffle.nfi.impl.LibFFISignature
  private GetDefaultLibraryNode = com.oracle.truffle.nfi.impl.NFIBackendImpl$GetDefaultLibraryNode of com.oracle.truffle.nfi.impl.NFIBackendImpl
  private LoadLibraryNode = com.oracle.truffle.nfi.impl.NFIBackendImpl$LoadLibraryNode of com.oracle.truffle.nfi.impl.NFIBackendImpl
  public abstract ArrayBuilderFactory = com.oracle.truffle.nfi.util.ProfiledArrayBuilder$ArrayBuilderFactory of com.oracle.truffle.nfi.util.ProfiledArrayBuilder
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportLibrary(value = Lcom/oracle/truffle/nfi/spi/NFIBackendLibrary;)