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

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 78
            ldc Lcom/oracle/truffle/nfi/NFIClosure;
            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.nfi.NFIClosure$Execute.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

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

  static com.oracle.truffle.api.nodes.DirectCallNode createDirectCall(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)Lcom/oracle/truffle/api/nodes/DirectCallNode;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // com.oracle.truffle.api.CallTarget target
         0: .line 81
            aload 0 /* target */
            invokestatic com.oracle.truffle.api.nodes.DirectCallNode.create:(Lcom/oracle/truffle/api/CallTarget;)Lcom/oracle/truffle/api/nodes/DirectCallNode;
            astore 1 /* ret */
        start local 1 // com.oracle.truffle.api.nodes.DirectCallNode ret
         1: .line 82
            aload 1 /* ret */
            invokevirtual com.oracle.truffle.api.nodes.DirectCallNode.forceInlining:()V
         2: .line 83
            aload 1 /* ret */
            areturn
        end local 1 // com.oracle.truffle.api.nodes.DirectCallNode ret
        end local 0 // com.oracle.truffle.api.CallTarget target
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0  target  Lcom/oracle/truffle/api/CallTarget;
            1    3     1     ret  Lcom/oracle/truffle/api/nodes/DirectCallNode;
    MethodParameters:
        Name  Flags
      target  

  static java.lang.Object doOptimizedDirect(com.oracle.truffle.nfi.NFIClosure, java.lang.Object[], com.oracle.truffle.nfi.NFISignature$SignatureCachedState, com.oracle.truffle.nfi.CallSignatureNode);
    descriptor: (Lcom/oracle/truffle/nfi/NFIClosure;[Ljava/lang/Object;Lcom/oracle/truffle/nfi/NFISignature$SignatureCachedState;Lcom/oracle/truffle/nfi/CallSignatureNode;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.oracle.truffle.nfi.NFIClosure receiver
        start local 1 // java.lang.Object[] args
        start local 2 // com.oracle.truffle.nfi.NFISignature$SignatureCachedState cachedState
        start local 3 // com.oracle.truffle.nfi.CallSignatureNode call
         0: .line 90
            getstatic com.oracle.truffle.nfi.NFIClosure$Execute.$assertionsDisabled:Z
            ifne 1
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.signature:Lcom/oracle/truffle/nfi/NFISignature;
            getfield com.oracle.truffle.nfi.NFISignature.cachedState:Lcom/oracle/truffle/nfi/NFISignature$SignatureCachedState;
            aload 2 /* cachedState */
            if_acmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 91
      StackMap locals:
      StackMap stack:
            aload 3 /* call */
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.signature:Lcom/oracle/truffle/nfi/NFISignature;
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.executable:Ljava/lang/Object;
            aload 1 /* args */
            invokevirtual com.oracle.truffle.nfi.CallSignatureNode.execute:(Lcom/oracle/truffle/nfi/NFISignature;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 3 // com.oracle.truffle.nfi.CallSignatureNode call
        end local 2 // com.oracle.truffle.nfi.NFISignature$SignatureCachedState cachedState
        end local 1 // java.lang.Object[] args
        end local 0 // com.oracle.truffle.nfi.NFIClosure receiver
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0     receiver  Lcom/oracle/truffle/nfi/NFIClosure;
            0    2     1         args  [Ljava/lang/Object;
            0    2     2  cachedState  Lcom/oracle/truffle/nfi/NFISignature$SignatureCachedState;
            0    2     3         call  Lcom/oracle/truffle/nfi/CallSignatureNode;
    Exceptions:
      throws com.oracle.truffle.api.interop.ArityException, com.oracle.truffle.api.interop.UnsupportedTypeException, com.oracle.truffle.api.interop.UnsupportedMessageException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(guards = {"receiver.signature.cachedState != null", "receiver.signature.cachedState == cachedState"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached(value = "receiver.signature.cachedState")
      3:
        com.oracle.truffle.api.dsl.Cached(value = "cachedState.createOptimizedClosureCall()")
    MethodParameters:
             Name  Flags
      receiver     
      args         
      cachedState  
      call         

  static java.lang.Object doOptimizedIndirect(com.oracle.truffle.nfi.NFIClosure, java.lang.Object[], com.oracle.truffle.api.nodes.IndirectCallNode);
    descriptor: (Lcom/oracle/truffle/nfi/NFIClosure;[Ljava/lang/Object;Lcom/oracle/truffle/api/nodes/IndirectCallNode;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.NFIClosure receiver
        start local 1 // java.lang.Object[] args
        start local 2 // com.oracle.truffle.api.nodes.IndirectCallNode call
         0: .line 97
            aload 2 /* call */
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.signature:Lcom/oracle/truffle/nfi/NFISignature;
            getfield com.oracle.truffle.nfi.NFISignature.cachedState:Lcom/oracle/truffle/nfi/NFISignature$SignatureCachedState;
            invokevirtual com.oracle.truffle.nfi.NFISignature$SignatureCachedState.getPolymorphicClosureCall:()Lcom/oracle/truffle/api/CallTarget;
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.signature:Lcom/oracle/truffle/nfi/NFISignature;
            aastore
            dup
            iconst_1
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.executable:Ljava/lang/Object;
            aastore
            dup
            iconst_2
            aload 1 /* args */
            aastore
            invokevirtual com.oracle.truffle.api.nodes.IndirectCallNode.call:(Lcom/oracle/truffle/api/CallTarget;[Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // com.oracle.truffle.api.nodes.IndirectCallNode call
        end local 1 // java.lang.Object[] args
        end local 0 // com.oracle.truffle.nfi.NFIClosure receiver
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  receiver  Lcom/oracle/truffle/nfi/NFIClosure;
            0    1     1      args  [Ljava/lang/Object;
            0    1     2      call  Lcom/oracle/truffle/api/nodes/IndirectCallNode;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(replaces = {"doOptimizedDirect"}, guards = {"receiver.signature.cachedState != null"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached()
    MethodParameters:
          Name  Flags
      receiver  
      args      
      call      

  static java.lang.Object doSlowPath(com.oracle.truffle.nfi.NFIClosure, java.lang.Object[], com.oracle.truffle.api.profiles.BranchProfile, com.oracle.truffle.nfi.ConvertTypeNode$ConvertFromNativeNode, com.oracle.truffle.nfi.ConvertTypeNode$ConvertToNativeNode, com.oracle.truffle.api.interop.InteropLibrary);
    descriptor: (Lcom/oracle/truffle/nfi/NFIClosure;[Ljava/lang/Object;Lcom/oracle/truffle/api/profiles/BranchProfile;Lcom/oracle/truffle/nfi/ConvertTypeNode$ConvertFromNativeNode;Lcom/oracle/truffle/nfi/ConvertTypeNode$ConvertToNativeNode;Lcom/oracle/truffle/api/interop/InteropLibrary;)Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=10, args_size=6
        start local 0 // com.oracle.truffle.nfi.NFIClosure receiver
        start local 1 // java.lang.Object[] args
        start local 2 // com.oracle.truffle.api.profiles.BranchProfile exception
        start local 3 // com.oracle.truffle.nfi.ConvertTypeNode$ConvertFromNativeNode convertArg
        start local 4 // com.oracle.truffle.nfi.ConvertTypeNode$ConvertToNativeNode convertRet
        start local 5 // com.oracle.truffle.api.interop.InteropLibrary interop
         0: .line 106
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.signature:Lcom/oracle/truffle/nfi/NFISignature;
            astore 6 /* signature */
        start local 6 // com.oracle.truffle.nfi.NFISignature signature
         1: .line 107
            aload 1 /* args */
            arraylength
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.nativeArgCount:I
            if_icmpeq 4
         2: .line 108
            aload 2 /* exception */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         3: .line 109
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.nativeArgCount:I
            aload 1 /* args */
            arraylength
            invokestatic com.oracle.truffle.api.interop.ArityException.create:(II)Lcom/oracle/truffle/api/interop/ArityException;
            athrow
         4: .line 112
      StackMap locals: com.oracle.truffle.nfi.NFISignature
      StackMap stack:
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.managedArgCount:I
            anewarray java.lang.Object
            astore 7 /* preparedArgs */
        start local 7 // java.lang.Object[] preparedArgs
         5: .line 113
            iconst_0
            istore 8 /* argIdx */
        start local 8 // int argIdx
         6: .line 114
            iconst_0
            istore 9 /* i */
        start local 9 // int i
         7: goto 11
         8: .line 115
      StackMap locals: java.lang.Object[] int int
      StackMap stack:
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.argTypes:[Lcom/oracle/truffle/nfi/NFIType;
            iload 9 /* i */
            aaload
            getfield com.oracle.truffle.nfi.NFIType.cachedState:Lcom/oracle/truffle/nfi/NFIType$TypeCachedState;
            getfield com.oracle.truffle.nfi.NFIType$TypeCachedState.managedArgCount:I
            iconst_1
            if_icmpne 10
         9: .line 116
            aload 7 /* preparedArgs */
            iload 8 /* argIdx */
            iinc 8 /* argIdx */ 1
            aload 3 /* convertArg */
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.argTypes:[Lcom/oracle/truffle/nfi/NFIType;
            iload 9 /* i */
            aaload
            aload 1 /* args */
            iload 9 /* i */
            aaload
            invokevirtual com.oracle.truffle.nfi.ConvertTypeNode$ConvertFromNativeNode.execute:(Lcom/oracle/truffle/nfi/NFIType;Ljava/lang/Object;)Ljava/lang/Object;
            aastore
        10: .line 114
      StackMap locals:
      StackMap stack:
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        11: iload 9 /* i */
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.nativeArgCount:I
            if_icmplt 8
        end local 9 // int i
        12: .line 120
            aload 5 /* interop */
            aload 0 /* receiver */
            getfield com.oracle.truffle.nfi.NFIClosure.executable:Ljava/lang/Object;
            aload 7 /* preparedArgs */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.execute:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            astore 9 /* ret */
        start local 9 // java.lang.Object ret
        13: .line 121
            aload 4 /* convertRet */
            aload 6 /* signature */
            getfield com.oracle.truffle.nfi.NFISignature.retType:Lcom/oracle/truffle/nfi/NFIType;
            aload 9 /* ret */
            invokevirtual com.oracle.truffle.nfi.ConvertTypeNode$ConvertToNativeNode.execute:(Lcom/oracle/truffle/nfi/NFIType;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 9 // java.lang.Object ret
        end local 8 // int argIdx
        end local 7 // java.lang.Object[] preparedArgs
        end local 6 // com.oracle.truffle.nfi.NFISignature signature
        end local 5 // com.oracle.truffle.api.interop.InteropLibrary interop
        end local 4 // com.oracle.truffle.nfi.ConvertTypeNode$ConvertToNativeNode convertRet
        end local 3 // com.oracle.truffle.nfi.ConvertTypeNode$ConvertFromNativeNode convertArg
        end local 2 // com.oracle.truffle.api.profiles.BranchProfile exception
        end local 1 // java.lang.Object[] args
        end local 0 // com.oracle.truffle.nfi.NFIClosure receiver
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   14     0      receiver  Lcom/oracle/truffle/nfi/NFIClosure;
            0   14     1          args  [Ljava/lang/Object;
            0   14     2     exception  Lcom/oracle/truffle/api/profiles/BranchProfile;
            0   14     3    convertArg  Lcom/oracle/truffle/nfi/ConvertTypeNode$ConvertFromNativeNode;
            0   14     4    convertRet  Lcom/oracle/truffle/nfi/ConvertTypeNode$ConvertToNativeNode;
            0   14     5       interop  Lcom/oracle/truffle/api/interop/InteropLibrary;
            1   14     6     signature  Lcom/oracle/truffle/nfi/NFISignature;
            5   14     7  preparedArgs  [Ljava/lang/Object;
            6   14     8        argIdx  I
            7   12     9             i  I
           13   14     9           ret  Ljava/lang/Object;
    Exceptions:
      throws com.oracle.truffle.api.interop.ArityException, com.oracle.truffle.api.interop.UnsupportedTypeException, com.oracle.truffle.api.interop.UnsupportedMessageException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(guards = {"receiver.signature.cachedState == null"})
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached()
      3:
        com.oracle.truffle.api.dsl.Cached()
      4:
        com.oracle.truffle.api.dsl.Cached()
      5:
        com.oracle.truffle.api.library.CachedLibrary(value = "receiver.executable")
    MethodParameters:
            Name  Flags
      receiver    
      args        
      exception   
      convertArg  
      convertRet  
      interop     
}
SourceFile: "NFIClosure.java"
NestHost: com.oracle.truffle.nfi.NFIClosure
InnerClasses:
  abstract ConvertFromNativeNode = com.oracle.truffle.nfi.ConvertTypeNode$ConvertFromNativeNode of com.oracle.truffle.nfi.ConvertTypeNode
  abstract ConvertToNativeNode = com.oracle.truffle.nfi.ConvertTypeNode$ConvertToNativeNode of com.oracle.truffle.nfi.ConvertTypeNode
  Execute = com.oracle.truffle.nfi.NFIClosure$Execute of com.oracle.truffle.nfi.NFIClosure
  final SignatureCachedState = com.oracle.truffle.nfi.NFISignature$SignatureCachedState of com.oracle.truffle.nfi.NFISignature
  abstract TypeCachedState = com.oracle.truffle.nfi.NFIType$TypeCachedState of com.oracle.truffle.nfi.NFIType
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.library.ExportMessage()