abstract class com.oracle.truffle.nfi.BindSignatureNode extends com.oracle.truffle.api.nodes.Node
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.nfi.BindSignatureNode
  super_class: com.oracle.truffle.api.nodes.Node
{
  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.nfi.BindSignatureNode this
         0: .line 68
            aload 0 /* this */
            invokespecial com.oracle.truffle.api.nodes.Node.<init>:()V
            return
        end local 0 // com.oracle.truffle.nfi.BindSignatureNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/BindSignatureNode;

  abstract java.lang.Object execute(com.oracle.truffle.nfi.NFISymbol, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedMessageException, com.oracle.truffle.api.interop.UnsupportedTypeException
    MethodParameters:
           Name  Flags
      symbol     
      signature  

  static java.lang.String asString(com.oracle.truffle.api.interop.InteropLibrary, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/api/interop/InteropLibrary;Ljava/lang/Object;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.interop.InteropLibrary interop
        start local 1 // java.lang.Object signature
         0: .line 74
            aload 0 /* interop */
            aload 1 /* signature */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.asString:(Ljava/lang/Object;)Ljava/lang/String;
         1: areturn
         2: .line 75
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedMessageException
            pop
         3: .line 76
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         4: .line 77
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* signature */
            aastore
            invokestatic com.oracle.truffle.api.interop.UnsupportedTypeException.create:([Ljava/lang/Object;)Lcom/oracle/truffle/api/interop/UnsupportedTypeException;
            athrow
        end local 1 // java.lang.Object signature
        end local 0 // com.oracle.truffle.api.interop.InteropLibrary interop
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0    interop  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0    5     1  signature  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           0     1       2  Class com.oracle.truffle.api.interop.UnsupportedMessageException
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedTypeException
    MethodParameters:
           Name  Flags
      interop    
      signature  

  static com.oracle.truffle.api.source.Source createSignatureSource(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Lcom/oracle/truffle/api/source/Source;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // java.lang.String backend
        start local 1 // java.lang.Object signature
         0: .line 83
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getUncached:()Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* signature */
            invokestatic com.oracle.truffle.nfi.BindSignatureNode.asString:(Lcom/oracle/truffle/api/interop/InteropLibrary;Ljava/lang/Object;)Ljava/lang/String;
            astore 2 /* sigString */
        start local 2 // java.lang.String sigString
         1: .line 84
            ldc "nfi"
            ldc "with %s %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* backend */
            aastore
            dup
            iconst_1
            aload 2 /* sigString */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            ldc "bind"
            invokestatic com.oracle.truffle.api.source.Source.newBuilder:(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/oracle/truffle/api/source/Source$LiteralBuilder;
            invokevirtual com.oracle.truffle.api.source.Source$LiteralBuilder.build:()Lcom/oracle/truffle/api/source/Source;
            areturn
        end local 2 // java.lang.String sigString
        end local 1 // java.lang.Object signature
        end local 0 // java.lang.String backend
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0    backend  Ljava/lang/String;
            0    2     1  signature  Ljava/lang/Object;
            1    2     2  sigString  Ljava/lang/String;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedTypeException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
           Name  Flags
      backend    
      signature  

  static com.oracle.truffle.nfi.NFISignature parseSignature(java.lang.String, , com.oracle.truffle.api.TruffleLanguage$ContextReference<com.oracle.truffle.nfi.NFIContext>);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference;)Lcom/oracle/truffle/nfi/NFISignature;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // java.lang.String backend
        start local 1 // java.lang.Object signature
        start local 2 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
         0: .line 89
            aload 0 /* backend */
            aload 1 /* signature */
            invokestatic com.oracle.truffle.nfi.BindSignatureNode.createSignatureSource:(Ljava/lang/String;Ljava/lang/Object;)Lcom/oracle/truffle/api/source/Source;
            astore 3 /* source */
        start local 3 // com.oracle.truffle.api.source.Source source
         1: .line 90
            aload 2 /* ctxRef */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$ContextReference.get:()Ljava/lang/Object;
            checkcast com.oracle.truffle.nfi.NFIContext
            getfield com.oracle.truffle.nfi.NFIContext.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 3 /* 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 4 /* ct */
        start local 4 // com.oracle.truffle.api.CallTarget ct
         2: .line 91
            aload 4 /* ct */
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.nfi.NFISignature
            areturn
        end local 4 // com.oracle.truffle.api.CallTarget ct
        end local 3 // com.oracle.truffle.api.source.Source source
        end local 2 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
        end local 1 // java.lang.Object signature
        end local 0 // java.lang.String backend
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0    backend  Ljava/lang/String;
            0    3     1  signature  Ljava/lang/Object;
            0    3     2     ctxRef  Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;
            1    3     3     source  Lcom/oracle/truffle/api/source/Source;
            2    3     4         ct  Lcom/oracle/truffle/api/CallTarget;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedTypeException
    Signature: (Ljava/lang/String;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;)Lcom/oracle/truffle/nfi/NFISignature;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
           Name  Flags
      backend    
      signature  
      ctxRef     

  static  doCachedSignature(com.oracle.truffle.nfi.NFISymbol, , java.lang.String, , com.oracle.truffle.api.TruffleLanguage$ContextReference<com.oracle.truffle.nfi.NFIContext>, com.oracle.truffle.nfi.NFISignature);
    descriptor: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference;Lcom/oracle/truffle/nfi/NFISignature;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=6, args_size=6
        start local 0 // com.oracle.truffle.nfi.NFISymbol symbol
        start local 1 // java.lang.Object signature
        start local 2 // java.lang.String cachedBackend
        start local 3 // java.lang.Object cachedSignature
        start local 4 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
        start local 5 // com.oracle.truffle.nfi.NFISignature parsedSignature
         0: .line 101
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.backend:Ljava/lang/String;
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.nativeSymbol:Ljava/lang/Object;
            aload 5 /* parsedSignature */
            invokestatic com.oracle.truffle.nfi.NFISymbol.createBound:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 5 // com.oracle.truffle.nfi.NFISignature parsedSignature
        end local 4 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
        end local 3 // java.lang.Object cachedSignature
        end local 2 // java.lang.String cachedBackend
        end local 1 // java.lang.Object signature
        end local 0 // com.oracle.truffle.nfi.NFISymbol symbol
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0           symbol  Lcom/oracle/truffle/nfi/NFISymbol;
            0    1     1        signature  Ljava/lang/Object;
            0    1     2    cachedBackend  Ljava/lang/String;
            0    1     3  cachedSignature  Ljava/lang/Object;
            0    1     4           ctxRef  Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;
            0    1     5  parsedSignature  Lcom/oracle/truffle/nfi/NFISignature;
    Signature: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;Lcom/oracle/truffle/nfi/NFISignature;)Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(limit = "5", guards = {"symbol.backend == cachedBackend", "signature == cachedSignature"}, assumptions = {"getSingleContextAssumption()"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached(value = "symbol.backend")
      3:
        com.oracle.truffle.api.dsl.Cached(value = "signature")
      4:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/NFILanguage;)
      5:
        com.oracle.truffle.api.dsl.Cached(value = "parseSignature(cachedBackend, cachedSignature, ctxRef)")
    MethodParameters:
                 Name  Flags
      symbol           
      signature        
      cachedBackend    
      cachedSignature  
      ctxRef           
      parsedSignature  

  static java.lang.Object doCachedSignatureString(com.oracle.truffle.nfi.NFISymbol, java.lang.Object, com.oracle.truffle.api.interop.InteropLibrary, java.lang.String, com.oracle.truffle.api.source.Source, com.oracle.truffle.nfi.NFIContext, com.oracle.truffle.api.nodes.IndirectCallNode);
    descriptor: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;Lcom/oracle/truffle/api/interop/InteropLibrary;Ljava/lang/String;Lcom/oracle/truffle/api/source/Source;Lcom/oracle/truffle/nfi/NFIContext;Lcom/oracle/truffle/api/nodes/IndirectCallNode;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=8, args_size=7
        start local 0 // com.oracle.truffle.nfi.NFISymbol symbol
        start local 1 // java.lang.Object signature
        start local 2 // com.oracle.truffle.api.interop.InteropLibrary interop
        start local 3 // java.lang.String cachedSignature
        start local 4 // com.oracle.truffle.api.source.Source signatureSource
        start local 5 // com.oracle.truffle.nfi.NFIContext ctx
        start local 6 // com.oracle.truffle.api.nodes.IndirectCallNode call
         0: .line 112
            aload 5 /* ctx */
            getfield com.oracle.truffle.nfi.NFIContext.env:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 4 /* 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 7 /* parsedSignature */
        start local 7 // com.oracle.truffle.api.CallTarget parsedSignature
         1: .line 113
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.backend:Ljava/lang/String;
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.nativeSymbol:Ljava/lang/Object;
            aload 6 /* call */
            aload 7 /* parsedSignature */
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.api.nodes.IndirectCallNode.call:(Lcom/oracle/truffle/api/CallTarget;[Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic com.oracle.truffle.nfi.NFISymbol.createBound:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 7 // com.oracle.truffle.api.CallTarget parsedSignature
        end local 6 // com.oracle.truffle.api.nodes.IndirectCallNode call
        end local 5 // com.oracle.truffle.nfi.NFIContext ctx
        end local 4 // com.oracle.truffle.api.source.Source signatureSource
        end local 3 // java.lang.String cachedSignature
        end local 2 // com.oracle.truffle.api.interop.InteropLibrary interop
        end local 1 // java.lang.Object signature
        end local 0 // com.oracle.truffle.nfi.NFISymbol symbol
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0           symbol  Lcom/oracle/truffle/nfi/NFISymbol;
            0    2     1        signature  Ljava/lang/Object;
            0    2     2          interop  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0    2     3  cachedSignature  Ljava/lang/String;
            0    2     4  signatureSource  Lcom/oracle/truffle/api/source/Source;
            0    2     5              ctx  Lcom/oracle/truffle/nfi/NFIContext;
            0    2     6             call  Lcom/oracle/truffle/api/nodes/IndirectCallNode;
            1    2     7  parsedSignature  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(limit = "5", guards = {"cachedSignature.equals(asString(interop, signature))"}, replaces = {"doCachedSignature"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.library.CachedLibrary(value = "signature")
      3:
        com.oracle.truffle.api.dsl.Cached(value = "asString(interop, signature)")
      4:
        com.oracle.truffle.api.dsl.Cached(value = "createSignatureSource(symbol.backend, cachedSignature)")
      5:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/NFILanguage;)
      6:
        com.oracle.truffle.api.dsl.Cached()
    MethodParameters:
                 Name  Flags
      symbol           
      signature        
      interop          
      cachedSignature  
      signatureSource  
      ctx              
      call             

  static  doGeneric(com.oracle.truffle.nfi.NFISymbol, , com.oracle.truffle.api.TruffleLanguage$ContextReference<com.oracle.truffle.nfi.NFIContext>);
    descriptor: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.NFISymbol symbol
        start local 1 // java.lang.Object signature
        start local 2 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
         0: .line 119
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.backend:Ljava/lang/String;
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.nativeSymbol:Ljava/lang/Object;
            aload 0 /* symbol */
            getfield com.oracle.truffle.nfi.NFISymbol.backend:Ljava/lang/String;
            aload 1 /* signature */
            aload 2 /* ctxRef */
            invokestatic com.oracle.truffle.nfi.BindSignatureNode.parseSignature:(Ljava/lang/String;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference;)Lcom/oracle/truffle/nfi/NFISignature;
            invokestatic com.oracle.truffle.nfi.NFISymbol.createBound:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // com.oracle.truffle.api.TruffleLanguage$ContextReference ctxRef
        end local 1 // java.lang.Object signature
        end local 0 // com.oracle.truffle.nfi.NFISymbol symbol
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0     symbol  Lcom/oracle/truffle/nfi/NFISymbol;
            0    1     1  signature  Ljava/lang/Object;
            0    1     2     ctxRef  Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedTypeException
    Signature: (Lcom/oracle/truffle/nfi/NFISymbol;Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$ContextReference<Lcom/oracle/truffle/nfi/NFIContext;>;)Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(replaces = {"doCachedSignature", "doCachedSignatureString"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.CachedContext(value = Lcom/oracle/truffle/nfi/NFILanguage;)
    MethodParameters:
           Name  Flags
      symbol     
      signature  
      ctxRef     
}
SourceFile: "BindSignatureNode.java"
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  public abstract ContextReference = com.oracle.truffle.api.TruffleLanguage$ContextReference of com.oracle.truffle.api.TruffleLanguage
  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
    RuntimeInvisibleAnnotations: 
      com.oracle.truffle.api.dsl.GenerateUncached()
      com.oracle.truffle.api.dsl.ImportStatic(value = {Lcom/oracle/truffle/nfi/NFILanguage;})