final class com.oracle.svm.truffle.nfi.NativeClosure
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.svm.truffle.nfi.NativeClosure
  super_class: java.lang.Object
{
  private final com.oracle.truffle.api.CallTarget callTarget;
    descriptor: Lcom/oracle/truffle/api/CallTarget;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature signature;
    descriptor: Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static final com.oracle.svm.core.threadlocal.FastThreadLocalObject<java.lang.Throwable> pendingException;
    descriptor: Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject<Ljava/lang/Throwable;>;

  static final org.graalvm.nativeimage.c.function.CEntryPointLiteral<com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback> INVOKE_CLOSURE_BUFFER_RET;
    descriptor: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral<Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;>;

  static final org.graalvm.nativeimage.c.function.CEntryPointLiteral<com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback> INVOKE_CLOSURE_VOID_RET;
    descriptor: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral<Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;>;

  static final org.graalvm.nativeimage.c.function.CEntryPointLiteral<com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback> INVOKE_CLOSURE_STRING_RET;
    descriptor: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral<Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;>;

  static final org.graalvm.nativeimage.c.function.CEntryPointLiteral<com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback> INVOKE_CLOSURE_OBJECT_RET;
    descriptor: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral<Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=0, args_size=0
         0: .line 157
            ldc Ljava/lang/Throwable;
            invokestatic com.oracle.svm.core.threadlocal.FastThreadLocalFactory.createObject:(Ljava/lang/Class;)Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            putstatic com.oracle.svm.truffle.nfi.NativeClosure.pendingException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
         1: .line 285
            ldc Lcom/oracle/svm/truffle/nfi/NativeClosure;
            ldc "invokeClosureBufferRet"
            iconst_4
            anewarray java.lang.Class
            dup
            iconst_0
         2: .line 286
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            aastore
            dup
            iconst_1
            ldc Lorg/graalvm/word/Pointer;
            aastore
            dup
            iconst_2
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_3
            ldc Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            aastore
         3: .line 285
            invokestatic org.graalvm.nativeimage.c.function.CEntryPointLiteral.create:(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
            putstatic com.oracle.svm.truffle.nfi.NativeClosure.INVOKE_CLOSURE_BUFFER_RET:Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
         4: .line 288
            ldc Lcom/oracle/svm/truffle/nfi/NativeClosure;
            ldc "invokeClosureVoidRet"
            iconst_4
            anewarray java.lang.Class
            dup
            iconst_0
         5: .line 289
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            aastore
            dup
            iconst_1
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_2
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_3
            ldc Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            aastore
         6: .line 288
            invokestatic org.graalvm.nativeimage.c.function.CEntryPointLiteral.create:(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
            putstatic com.oracle.svm.truffle.nfi.NativeClosure.INVOKE_CLOSURE_VOID_RET:Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
         7: .line 291
            ldc Lcom/oracle/svm/truffle/nfi/NativeClosure;
            ldc "invokeClosureStringRet"
            iconst_4
            anewarray java.lang.Class
            dup
            iconst_0
         8: .line 292
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            aastore
            dup
            iconst_1
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_2
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_3
            ldc Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            aastore
         9: .line 291
            invokestatic org.graalvm.nativeimage.c.function.CEntryPointLiteral.create:(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
            putstatic com.oracle.svm.truffle.nfi.NativeClosure.INVOKE_CLOSURE_STRING_RET:Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
        10: .line 294
            ldc Lcom/oracle/svm/truffle/nfi/NativeClosure;
            ldc "invokeClosureObjectRet"
            iconst_4
            anewarray java.lang.Class
            dup
            iconst_0
        11: .line 295
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            aastore
            dup
            iconst_1
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_2
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            aastore
            dup
            iconst_3
            ldc Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            aastore
        12: .line 294
            invokestatic org.graalvm.nativeimage.c.function.CEntryPointLiteral.create:(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
            putstatic com.oracle.svm.truffle.nfi.NativeClosure.INVOKE_CLOSURE_OBJECT_RET:Lorg/graalvm/nativeimage/c/function/CEntryPointLiteral;
        13: .line 295
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>(com.oracle.truffle.api.CallTarget, com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
        start local 2 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature signature
         0: .line 71
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 72
            aload 0 /* this */
            aload 1 /* callTarget */
            putfield com.oracle.svm.truffle.nfi.NativeClosure.callTarget:Lcom/oracle/truffle/api/CallTarget;
         2: .line 73
            aload 0 /* this */
            aload 2 /* signature */
            putfield com.oracle.svm.truffle.nfi.NativeClosure.signature:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
         3: .line 74
            return
        end local 2 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature signature
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/svm/truffle/nfi/NativeClosure;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            0    4     2   signature  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
    MethodParameters:
            Name  Flags
      callTarget  
      signature   

  private java.nio.ByteBuffer createRetBuffer(org.graalvm.word.PointerBase);
    descriptor: (Lorg/graalvm/word/PointerBase;)Ljava/nio/ByteBuffer;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
        start local 1 // org.graalvm.word.PointerBase buffer
         0: .line 77
            aload 0 /* this */
            getfield com.oracle.svm.truffle.nfi.NativeClosure.signature:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature.signatureInfo:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature_CachedSignatureInfo;
            invokevirtual com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature_CachedSignatureInfo.getRetType:()Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo;
            astore 2 /* retType */
        start local 2 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo retType
         1: .line 78
            aload 2 /* retType */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo.size:I
            istore 3 /* size */
        start local 3 // int size
         2: .line 79
            iload 3 /* size */
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_arg;
            invokestatic org.graalvm.nativeimage.c.struct.SizeOf.get:(Ljava/lang/Class;)I
            if_icmpge 4
         3: .line 80
            ldc Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_arg;
            invokestatic org.graalvm.nativeimage.c.struct.SizeOf.get:(Ljava/lang/Class;)I
            istore 3 /* size */
         4: .line 82
      StackMap locals: com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo int
      StackMap stack:
            aload 1 /* buffer */
            iload 3 /* size */
            invokestatic org.graalvm.nativeimage.c.type.CTypeConversion.asByteBuffer:(Lorg/graalvm/word/PointerBase;I)Ljava/nio/ByteBuffer;
            areturn
        end local 3 // int size
        end local 2 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo retType
        end local 1 // org.graalvm.word.PointerBase buffer
        end local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/oracle/svm/truffle/nfi/NativeClosure;
            0    5     1   buffer  Lorg/graalvm/word/PointerBase;
            1    5     2  retType  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo;
            2    5     3     size  I
    MethodParameters:
        Name  Flags
      buffer  

  static com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_ClosureNativePointer prepareClosure(com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NFIContext, com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature, com.oracle.truffle.api.CallTarget, com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback);
    descriptor: (Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NFIContext;Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;Lcom/oracle/truffle/api/CallTarget;Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;)Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_ClosureNativePointer;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=9, args_size=4
        start local 0 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NFIContext ctx
        start local 1 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature signature
        start local 2 // com.oracle.truffle.api.CallTarget callTarget
        start local 3 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback callback
         0: .line 87
            new com.oracle.svm.truffle.nfi.NativeClosure
            dup
            aload 2 /* callTarget */
            aload 1 /* signature */
            invokespecial com.oracle.svm.truffle.nfi.NativeClosure.<init>:(Lcom/oracle/truffle/api/CallTarget;Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;)V
            astore 4 /* closure */
        start local 4 // com.oracle.svm.truffle.nfi.NativeClosure closure
         1: .line 88
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 4 /* closure */
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.createClosureHandle:(Lcom/oracle/svm/truffle/nfi/NativeClosure;)Lcom/oracle/svm/truffle/nfi/LibFFI$NativeClosureHandle;
            astore 5 /* handle */
        start local 5 // com.oracle.svm.truffle.nfi.LibFFI$NativeClosureHandle handle
         2: .line 90
            ldc Lorg/graalvm/nativeimage/c/type/WordPointer;
            invokestatic org.graalvm.nativeimage.StackValue.get:(Ljava/lang/Class;)Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.WordPointer
            astore 6 /* codePtr */
        start local 6 // org.graalvm.nativeimage.c.type.WordPointer codePtr
         3: .line 91
            ldc Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            invokestatic org.graalvm.nativeimage.c.struct.SizeOf.unsigned:(Ljava/lang/Class;)Lorg/graalvm/word/UnsignedWord;
            aload 6 /* codePtr */
            invokestatic com.oracle.svm.truffle.nfi.libffi.LibFFI.ffi_closure_alloc:(Lorg/graalvm/word/UnsignedWord;Lorg/graalvm/nativeimage/c/type/WordPointer;)Lorg/graalvm/word/WordBase;
            checkcast com.oracle.svm.truffle.nfi.LibFFI$ClosureData
            astore 7 /* data */
        start local 7 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData data
         4: .line 92
            aload 7 /* data */
            aload 5 /* handle */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.setNativeClosureHandle:(Lcom/oracle/svm/truffle/nfi/LibFFI$NativeClosureHandle;)V
         5: .line 93
            aload 7 /* data */
            invokestatic org.graalvm.nativeimage.CurrentIsolate.getIsolate:()Lorg/graalvm/nativeimage/Isolate;
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.setIsolate:(Lorg/graalvm/nativeimage/Isolate;)V
         6: .line 95
            aload 6 /* codePtr */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:()Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.word.PointerBase
            astore 8 /* code */
        start local 8 // org.graalvm.word.PointerBase code
         7: .line 96
            aload 7 /* data */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.ffiClosure:()Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure;
            aload 1 /* signature */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature.cif:J
            invokestatic org.graalvm.word.WordFactory.pointer:(J)Lorg/graalvm/word/PointerBase;
            checkcast com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif
            aload 3 /* callback */
            aload 7 /* data */
            aload 8 /* code */
            invokestatic com.oracle.svm.truffle.nfi.libffi.LibFFI.ffi_prep_closure_loc:(Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure;Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;Lorg/graalvm/word/WordBase;Lorg/graalvm/word/PointerBase;)I
            pop
         8: .line 98
            aload 0 /* ctx */
            aload 7 /* data */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.rawValue:()J
            aload 8 /* code */
            invokeinterface org.graalvm.word.PointerBase.rawValue:()J
            aload 2 /* callTarget */
            aload 1 /* signature */
            invokevirtual com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NFIContext.createClosureNativePointer:(JJLcom/oracle/truffle/api/CallTarget;Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;)Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_ClosureNativePointer;
            areturn
        end local 8 // org.graalvm.word.PointerBase code
        end local 7 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData data
        end local 6 // org.graalvm.nativeimage.c.type.WordPointer codePtr
        end local 5 // com.oracle.svm.truffle.nfi.LibFFI$NativeClosureHandle handle
        end local 4 // com.oracle.svm.truffle.nfi.NativeClosure closure
        end local 3 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback callback
        end local 2 // com.oracle.truffle.api.CallTarget callTarget
        end local 1 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature signature
        end local 0 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NFIContext ctx
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0         ctx  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NFIContext;
            0    9     1   signature  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
            0    9     2  callTarget  Lcom/oracle/truffle/api/CallTarget;
            0    9     3    callback  Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_closure_callback;
            1    9     4     closure  Lcom/oracle/svm/truffle/nfi/NativeClosure;
            2    9     5      handle  Lcom/oracle/svm/truffle/nfi/LibFFI$NativeClosureHandle;
            3    9     6     codePtr  Lorg/graalvm/nativeimage/c/type/WordPointer;
            4    9     7        data  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            7    9     8        code  Lorg/graalvm/word/PointerBase;
    MethodParameters:
            Name  Flags
      ctx         
      signature   
      callTarget  
      callback    

  private java.lang.Object call(org.graalvm.nativeimage.c.type.WordPointer, java.nio.ByteBuffer);
    descriptor: (Lorg/graalvm/nativeimage/c/type/WordPointer;Ljava/nio/ByteBuffer;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=9, args_size=3
        start local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer argPointers
        start local 2 // java.nio.ByteBuffer retBuffer
         0: .line 102
            aload 0 /* this */
            getfield com.oracle.svm.truffle.nfi.NativeClosure.signature:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature;
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature.signatureInfo:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFISignature_CachedSignatureInfo;
            invokevirtual com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFISignature_CachedSignatureInfo.getArgTypes:()[Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo;
            astore 3 /* argTypes */
        start local 3 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo[] argTypes
         1: .line 103
            aload 3 /* argTypes */
            arraylength
            istore 4 /* length */
        start local 4 // int length
         2: .line 104
            aload 2 /* retBuffer */
            ifnull 4
         3: .line 105
            iinc 4 /* length */ 1
         4: .line 108
      StackMap locals: com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo[] int
      StackMap stack:
            iload 4 /* length */
            anewarray java.lang.Object
            astore 5 /* args */
        start local 5 // java.lang.Object[] args
         5: .line 109
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         6: goto 24
         7: .line 110
      StackMap locals: java.lang.Object[] int
      StackMap stack:
            aload 3 /* argTypes */
            iload 6 /* i */
            aaload
            astore 7 /* type */
        start local 7 // java.lang.Object type
         8: .line 111
            ldc Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_StringType;
            aload 7 /* type */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 12
         9: .line 112
            aload 1 /* argPointers */
            iload 6 /* i */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:(I)Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.nativeimage.c.type.CCharPointerPointer
            astore 8 /* argPtr */
        start local 8 // org.graalvm.nativeimage.c.type.CCharPointerPointer argPtr
        10: .line 113
            aload 5 /* args */
            iload 6 /* i */
            aload 8 /* argPtr */
            invokeinterface org.graalvm.nativeimage.c.type.CCharPointerPointer.read:()Lorg/graalvm/nativeimage/c/type/CCharPointer;
            invokestatic com.oracle.svm.truffle.nfi.TruffleNFISupport.utf8ToJavaString:(Lorg/graalvm/nativeimage/c/type/CCharPointer;)Ljava/lang/String;
            aastore
        end local 8 // org.graalvm.nativeimage.c.type.CCharPointerPointer argPtr
        11: .line 114
            goto 23
      StackMap locals: java.lang.Object
      StackMap stack:
        12: ldc Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_ObjectType;
            aload 7 /* type */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 16
        13: .line 115
            aload 1 /* argPointers */
            iload 6 /* i */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:(I)Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.nativeimage.c.type.WordPointer
            astore 8 /* argPtr */
        start local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        14: .line 116
            aload 5 /* args */
            iload 6 /* i */
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 8 /* argPtr */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:()Lorg/graalvm/word/WordBase;
            checkcast com.oracle.svm.truffle.nfi.TruffleObjectHandle
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.resolveHandle:(Lcom/oracle/svm/truffle/nfi/TruffleObjectHandle;)Ljava/lang/Object;
            aastore
        end local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        15: .line 117
            goto 23
      StackMap locals:
      StackMap stack:
        16: ldc Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_NullableType;
            aload 7 /* type */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 20
        17: .line 118
            aload 1 /* argPointers */
            iload 6 /* i */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:(I)Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.nativeimage.c.type.WordPointer
            astore 8 /* argPtr */
        start local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        18: .line 119
            aload 5 /* args */
            iload 6 /* i */
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 8 /* argPtr */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:()Lorg/graalvm/word/WordBase;
            checkcast com.oracle.svm.truffle.nfi.TruffleObjectHandle
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.resolveHandle:(Lcom/oracle/svm/truffle/nfi/TruffleObjectHandle;)Ljava/lang/Object;
            aastore
        end local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        19: .line 120
            goto 23
      StackMap locals:
      StackMap stack:
        20: ldc Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_EnvType;
            aload 7 /* type */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifne 23
        21: .line 123
            aload 1 /* argPointers */
            iload 6 /* i */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.read:(I)Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.nativeimage.c.type.WordPointer
            astore 8 /* argPtr */
        start local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        22: .line 124
            aload 5 /* args */
            iload 6 /* i */
            aload 8 /* argPtr */
            aload 3 /* argTypes */
            iload 6 /* i */
            aaload
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo.size:I
            invokestatic org.graalvm.nativeimage.c.type.CTypeConversion.asByteBuffer:(Lorg/graalvm/word/PointerBase;I)Ljava/nio/ByteBuffer;
            aastore
        end local 8 // org.graalvm.nativeimage.c.type.WordPointer argPtr
        end local 7 // java.lang.Object type
        23: .line 109
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        24: iload 6 /* i */
            aload 3 /* argTypes */
            arraylength
            if_icmplt 7
        end local 6 // int i
        25: .line 128
            aload 2 /* retBuffer */
            ifnull 27
        26: .line 129
            aload 5 /* args */
            aload 3 /* argTypes */
            arraylength
            aload 2 /* retBuffer */
            aastore
        27: .line 132
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.svm.truffle.nfi.NativeClosure.callTarget:Lcom/oracle/truffle/api/CallTarget;
            aload 5 /* args */
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 5 // java.lang.Object[] args
        end local 4 // int length
        end local 3 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo[] argTypes
        end local 2 // java.nio.ByteBuffer retBuffer
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer argPointers
        end local 0 // com.oracle.svm.truffle.nfi.NativeClosure this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   28     0         this  Lcom/oracle/svm/truffle/nfi/NativeClosure;
            0   28     1  argPointers  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   28     2    retBuffer  Ljava/nio/ByteBuffer;
            1   28     3     argTypes  [Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIType_CachedTypeInfo;
            2   28     4       length  I
            5   28     5         args  [Ljava/lang/Object;
            6   25     6            i  I
            8   23     7         type  Ljava/lang/Object;
           10   11     8       argPtr  Lorg/graalvm/nativeimage/c/type/CCharPointerPointer;
           14   15     8       argPtr  Lorg/graalvm/nativeimage/c/type/WordPointer;
           18   19     8       argPtr  Lorg/graalvm/nativeimage/c/type/WordPointer;
           22   23     8       argPtr  Lorg/graalvm/nativeimage/c/type/WordPointer;
    MethodParameters:
             Name  Flags
      argPointers  
      retBuffer    

  private static com.oracle.svm.truffle.nfi.NativeClosure lookup(com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData data
         0: .line 136
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 0 /* data */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.nativeClosureHandle:()Lcom/oracle/svm/truffle/nfi/LibFFI$NativeClosureHandle;
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.resolveClosureHandle:(Lcom/oracle/svm/truffle/nfi/LibFFI$NativeClosureHandle;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
            areturn
        end local 0 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData data
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  data  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
    MethodParameters:
      Name  Flags
      data  

  private static org.graalvm.word.PointerBase serializeStringRet(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Lorg/graalvm/word/PointerBase;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // java.lang.Object retValue
         0: .line 140
            aload 0 /* retValue */
            ifnonnull 2
         1: .line 141
            invokestatic org.graalvm.word.WordFactory.zero:()Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.word.PointerBase
            areturn
         2: .line 142
      StackMap locals:
      StackMap stack:
            aload 0 /* retValue */
            instanceof com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeString
            ifeq 5
         3: .line 143
            aload 0 /* retValue */
            checkcast com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeString
            astore 1 /* nativeString */
        start local 1 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeString nativeString
         4: .line 144
            aload 1 /* nativeString */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeString.nativePointer:J
            invokestatic org.graalvm.word.WordFactory.pointer:(J)Lorg/graalvm/word/PointerBase;
            areturn
        end local 1 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeString nativeString
         5: .line 145
      StackMap locals:
      StackMap stack:
            aload 0 /* retValue */
            instanceof java.lang.String
            ifeq 19
         6: .line 146
            aload 0 /* retValue */
            checkcast java.lang.String
            invokestatic com.oracle.svm.truffle.nfi.TruffleNFISupport.javaStringToUtf8:(Ljava/lang/String;)[B
            astore 1 /* utf8 */
        start local 1 // byte[] utf8
         7: .line 147
            aconst_null
            astore 2
            aconst_null
            astore 3
         8: aload 1 /* utf8 */
            invokestatic org.graalvm.nativeimage.PinnedObject.create:(Ljava/lang/Object;)Lorg/graalvm/nativeimage/PinnedObject;
            astore 4 /* pinned */
        start local 4 // org.graalvm.nativeimage.PinnedObject pinned
         9: .line 148
            aload 4 /* pinned */
            iconst_0
            invokeinterface org.graalvm.nativeimage.PinnedObject.addressOfArrayElement:(I)Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CCharPointer
            astore 5 /* source */
        start local 5 // org.graalvm.nativeimage.c.type.CCharPointer source
        10: .line 149
            aload 5 /* source */
            invokestatic com.oracle.svm.truffle.nfi.TruffleNFISupport.strdup:(Lorg/graalvm/nativeimage/c/type/CCharPointer;)Lorg/graalvm/nativeimage/c/type/CCharPointer;
        11: .line 150
            aload 4 /* pinned */
            ifnull 12
            aload 4 /* pinned */
            invokeinterface org.graalvm.nativeimage.PinnedObject.close:()V
        12: .line 149
      StackMap locals: java.lang.Object byte[] java.lang.Throwable java.lang.Throwable org.graalvm.nativeimage.PinnedObject org.graalvm.nativeimage.c.type.CCharPointer
      StackMap stack: org.graalvm.nativeimage.c.type.CCharPointer
            areturn
        end local 5 // org.graalvm.nativeimage.c.type.CCharPointer source
      StackMap locals: java.lang.Object byte[] java.lang.Throwable java.lang.Throwable org.graalvm.nativeimage.PinnedObject
      StackMap stack: java.lang.Throwable
        13: astore 2
        14: .line 150
            aload 4 /* pinned */
            ifnull 15
            aload 4 /* pinned */
            invokeinterface org.graalvm.nativeimage.PinnedObject.close:()V
        end local 4 // org.graalvm.nativeimage.PinnedObject pinned
      StackMap locals:
      StackMap stack:
        15: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        16: astore 3
            aload 2
            ifnonnull 17
            aload 3
            astore 2
            goto 18
      StackMap locals:
      StackMap stack:
        17: aload 2
            aload 3
            if_acmpeq 18
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        18: aload 2
            athrow
        end local 1 // byte[] utf8
        19: .line 153
      StackMap locals:
      StackMap stack:
            invokestatic org.graalvm.word.WordFactory.zero:()Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.word.PointerBase
            areturn
        end local 0 // java.lang.Object retValue
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   20     0      retValue  Ljava/lang/Object;
            4    5     1  nativeString  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NativeString;
            7   19     1          utf8  [B
            9   15     4        pinned  Lorg/graalvm/nativeimage/PinnedObject;
           10   13     5        source  Lorg/graalvm/nativeimage/c/type/CCharPointer;
      Exception table:
        from    to  target  type
           9    11      13  any
           8    12      16  any
          13    16      16  any
    MethodParameters:
          Name  Flags
      retValue  

  static void invokeClosureBufferRet(com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif, org.graalvm.word.Pointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
        start local 1 // org.graalvm.word.Pointer ret
        start local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 164
            invokestatic com.oracle.svm.core.CErrorNumber.getCErrorNumber:()I
            istore 4 /* errno */
        start local 4 // int errno
         1: .line 165
            aload 3 /* user */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.isolate:()Lorg/graalvm/nativeimage/Isolate;
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.enterIsolate:(Lorg/graalvm/nativeimage/Isolate;)I
            pop
         2: .line 166
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            iload 4 /* errno */
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.write:(I)V
         3: .line 169
            aload 1 /* ret */
            aload 2 /* args */
            aload 3 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.doInvokeClosureBufferRet:(Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
         4: .line 170
            goto 7
      StackMap locals: com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif org.graalvm.word.Pointer org.graalvm.nativeimage.c.type.WordPointer com.oracle.svm.truffle.nfi.LibFFI$ClosureData int
      StackMap stack: java.lang.Throwable
         5: astore 5 /* t */
        start local 5 // java.lang.Throwable t
         6: .line 171
            getstatic com.oracle.svm.truffle.nfi.NativeClosure.pendingException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aload 5 /* t */
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
        end local 5 // java.lang.Throwable t
         7: .line 174
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.read:()I
            istore 4 /* errno */
         8: .line 175
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.leave:()I
            pop
         9: .line 177
            iload 4 /* errno */
            invokestatic com.oracle.svm.core.CErrorNumber.setCErrorNumber:(I)V
        10: .line 178
            return
        end local 4 // int errno
        end local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 1 // org.graalvm.word.Pointer ret
        end local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0    cif  Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            0   11     1    ret  Lorg/graalvm/word/Pointer;
            0   11     2   args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     3   user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1   11     4  errno  I
            6    7     5      t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.graalvm.nativeimage.c.function.CEntryPoint()
      com.oracle.svm.core.c.function.CEntryPointOptions(prologue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoPrologue;, epilogue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoEpilogue;, publishAs = com.oracle.svm.core.c.function.CEntryPointOptions$Publish.NotPublished:Lcom/oracle/svm/core/c/function/CEntryPointOptions$Publish;, include = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NotIncludedAutomatically;)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "contains prologue and epilogue for thread state transition", calleeMustBe = false)
    MethodParameters:
      Name  Flags
      cif   
      ret   
      args  
      user  

  private static void doInvokeClosureBufferRet(org.graalvm.word.Pointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=11, args_size=3
        start local 0 // org.graalvm.word.Pointer ret
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 181
            aload 2 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.lookup:(Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
            astore 3 /* closure */
        start local 3 // com.oracle.svm.truffle.nfi.NativeClosure closure
         1: .line 182
            aload 3 /* closure */
            aload 0 /* ret */
            invokevirtual com.oracle.svm.truffle.nfi.NativeClosure.createRetBuffer:(Lorg/graalvm/word/PointerBase;)Ljava/nio/ByteBuffer;
            astore 4 /* retBuffer */
        start local 4 // java.nio.ByteBuffer retBuffer
         2: .line 183
            aload 3 /* closure */
            aload 1 /* args */
            aload 4 /* retBuffer */
            invokevirtual com.oracle.svm.truffle.nfi.NativeClosure.call:(Lorg/graalvm/nativeimage/c/type/WordPointer;Ljava/nio/ByteBuffer;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches
            astore 5 /* patches */
        start local 5 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches patches
         3: .line 185
            aload 5 /* patches */
            ifnull 17
         4: .line 186
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         5: goto 16
         6: .line 187
      StackMap locals: org.graalvm.word.Pointer org.graalvm.nativeimage.c.type.WordPointer com.oracle.svm.truffle.nfi.LibFFI$ClosureData com.oracle.svm.truffle.nfi.NativeClosure java.nio.ByteBuffer com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches int
      StackMap stack:
            aload 5 /* patches */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches.patches:[I
            iload 6 /* i */
            iaload
            invokestatic com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag.getTag:(I)Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag;
            astore 7 /* tag */
        start local 7 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag tag
         7: .line 188
            aload 5 /* patches */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches.patches:[I
            iload 6 /* i */
            iaload
            invokestatic com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag.getOffset:(I)I
            istore 8 /* offset */
        start local 8 // int offset
         8: .line 189
            aload 5 /* patches */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches.objects:[Ljava/lang/Object;
            iload 6 /* i */
            aaload
            astore 9 /* obj */
        start local 9 // java.lang.Object obj
         9: .line 191
            aload 7 /* tag */
            getstatic com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag.OBJECT:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag;
            if_acmpne 13
        10: .line 192
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 9 /* obj */
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.createGlobalHandle:(Ljava/lang/Object;)Lcom/oracle/svm/truffle/nfi/TruffleObjectHandle;
            astore 10 /* handle */
        start local 10 // org.graalvm.word.WordBase handle
        11: .line 193
            aload 0 /* ret */
            iload 8 /* offset */
            aload 10 /* handle */
            invokeinterface org.graalvm.word.Pointer.writeWord:(ILorg/graalvm/word/WordBase;)V
        end local 10 // org.graalvm.word.WordBase handle
        12: .line 194
            goto 15
      StackMap locals: com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag int java.lang.Object
      StackMap stack:
        13: aload 7 /* tag */
            getstatic com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag.STRING:Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag;
            if_acmpne 15
        14: .line 195
            aload 0 /* ret */
            iload 8 /* offset */
            aload 9 /* obj */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.serializeStringRet:(Ljava/lang/Object;)Lorg/graalvm/word/PointerBase;
            invokeinterface org.graalvm.word.Pointer.writeWord:(ILorg/graalvm/word/WordBase;)V
        end local 9 // java.lang.Object obj
        end local 8 // int offset
        end local 7 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag tag
        15: .line 186
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        16: iload 6 /* i */
            aload 5 /* patches */
            getfield com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches.count:I
            if_icmplt 6
        end local 6 // int i
        17: .line 201
      StackMap locals:
      StackMap stack:
            return
        end local 5 // com.oracle.svm.truffle.nfi.Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches patches
        end local 4 // java.nio.ByteBuffer retBuffer
        end local 3 // com.oracle.svm.truffle.nfi.NativeClosure closure
        end local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 0 // org.graalvm.word.Pointer ret
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   18     0        ret  Lorg/graalvm/word/Pointer;
            0   18     1       args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   18     2       user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1   18     3    closure  Lcom/oracle/svm/truffle/nfi/NativeClosure;
            2   18     4  retBuffer  Ljava/nio/ByteBuffer;
            3   18     5    patches  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_LibFFIClosure_RetPatches;
            5   17     6          i  I
            7   15     7        tag  Lcom/oracle/svm/truffle/nfi/Target_com_oracle_truffle_nfi_impl_NativeArgumentBuffer_TypeTag;
            8   15     8     offset  I
            9   15     9        obj  Ljava/lang/Object;
           11   12    10     handle  Lorg/graalvm/word/WordBase;
    MethodParameters:
      Name  Flags
      ret   
      args  
      user  

  static void invokeClosureVoidRet(com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif, org.graalvm.nativeimage.c.type.WordPointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=6, args_size=4
        start local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        start local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 208
            invokestatic com.oracle.svm.core.CErrorNumber.getCErrorNumber:()I
            istore 4 /* errno */
        start local 4 // int errno
         1: .line 209
            aload 3 /* user */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.isolate:()Lorg/graalvm/nativeimage/Isolate;
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.enterIsolate:(Lorg/graalvm/nativeimage/Isolate;)I
            pop
         2: .line 210
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            iload 4 /* errno */
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.write:(I)V
         3: .line 213
            aload 2 /* args */
            aload 3 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.doInvokeClosureVoidRet:(Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
         4: .line 214
            goto 7
      StackMap locals: com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif org.graalvm.nativeimage.c.type.WordPointer org.graalvm.nativeimage.c.type.WordPointer com.oracle.svm.truffle.nfi.LibFFI$ClosureData int
      StackMap stack: java.lang.Throwable
         5: astore 5 /* t */
        start local 5 // java.lang.Throwable t
         6: .line 215
            getstatic com.oracle.svm.truffle.nfi.NativeClosure.pendingException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aload 5 /* t */
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
        end local 5 // java.lang.Throwable t
         7: .line 218
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.read:()I
            istore 4 /* errno */
         8: .line 219
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.leave:()I
            pop
         9: .line 221
            iload 4 /* errno */
            invokestatic com.oracle.svm.core.CErrorNumber.setCErrorNumber:(I)V
        10: .line 222
            return
        end local 4 // int errno
        end local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        end local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0    cif  Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            0   11     1    ret  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     2   args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     3   user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1   11     4  errno  I
            6    7     5      t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.graalvm.nativeimage.c.function.CEntryPoint()
      com.oracle.svm.core.c.function.CEntryPointOptions(prologue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoPrologue;, epilogue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoEpilogue;, publishAs = com.oracle.svm.core.c.function.CEntryPointOptions$Publish.NotPublished:Lcom/oracle/svm/core/c/function/CEntryPointOptions$Publish;, include = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NotIncludedAutomatically;)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "contains prologue and epilogue for thread state transition", calleeMustBe = false)
    MethodParameters:
      Name  Flags
      cif   
      ret   
      args  
      user  

  private static void doInvokeClosureVoidRet(org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 1 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 225
            aload 1 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.lookup:(Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
            aload 0 /* args */
            aconst_null
            invokevirtual com.oracle.svm.truffle.nfi.NativeClosure.call:(Lorg/graalvm/nativeimage/c/type/WordPointer;Ljava/nio/ByteBuffer;)Ljava/lang/Object;
            pop
         1: .line 226
            return
        end local 1 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 0 // org.graalvm.nativeimage.c.type.WordPointer args
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0    2     1  user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
    MethodParameters:
      Name  Flags
      args  
      user  

  static void invokeClosureStringRet(com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif, org.graalvm.nativeimage.c.type.WordPointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        start local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 233
            invokestatic com.oracle.svm.core.CErrorNumber.getCErrorNumber:()I
            istore 4 /* errno */
        start local 4 // int errno
         1: .line 234
            aload 3 /* user */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.isolate:()Lorg/graalvm/nativeimage/Isolate;
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.enterIsolate:(Lorg/graalvm/nativeimage/Isolate;)I
            pop
         2: .line 235
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            iload 4 /* errno */
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.write:(I)V
         3: .line 238
            aload 1 /* ret */
            aload 2 /* args */
            aload 3 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.doInvokeClosureStringRet:(Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
         4: .line 239
            goto 7
      StackMap locals: com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif org.graalvm.nativeimage.c.type.WordPointer org.graalvm.nativeimage.c.type.WordPointer com.oracle.svm.truffle.nfi.LibFFI$ClosureData int
      StackMap stack: java.lang.Throwable
         5: astore 5 /* t */
        start local 5 // java.lang.Throwable t
         6: .line 240
            getstatic com.oracle.svm.truffle.nfi.NativeClosure.pendingException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aload 5 /* t */
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
        end local 5 // java.lang.Throwable t
         7: .line 243
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.read:()I
            istore 4 /* errno */
         8: .line 244
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.leave:()I
            pop
         9: .line 246
            iload 4 /* errno */
            invokestatic com.oracle.svm.core.CErrorNumber.setCErrorNumber:(I)V
        10: .line 247
            return
        end local 4 // int errno
        end local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        end local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0    cif  Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            0   11     1    ret  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     2   args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     3   user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1   11     4  errno  I
            6    7     5      t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.graalvm.nativeimage.c.function.CEntryPoint()
      com.oracle.svm.core.c.function.CEntryPointOptions(prologue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoPrologue;, epilogue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoEpilogue;, publishAs = com.oracle.svm.core.c.function.CEntryPointOptions$Publish.NotPublished:Lcom/oracle/svm/core/c/function/CEntryPointOptions$Publish;, include = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NotIncludedAutomatically;)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "contains prologue and epilogue for thread state transition", calleeMustBe = false)
    MethodParameters:
      Name  Flags
      cif   
      ret   
      args  
      user  

  private static void doInvokeClosureStringRet(org.graalvm.nativeimage.c.type.WordPointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.graalvm.nativeimage.c.type.WordPointer ret
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 250
            aload 2 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.lookup:(Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
            aload 1 /* args */
            aconst_null
            invokevirtual com.oracle.svm.truffle.nfi.NativeClosure.call:(Lorg/graalvm/nativeimage/c/type/WordPointer;Ljava/nio/ByteBuffer;)Ljava/lang/Object;
            astore 3 /* retValue */
        start local 3 // java.lang.Object retValue
         1: .line 251
            aload 0 /* ret */
            aload 3 /* retValue */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.serializeStringRet:(Ljava/lang/Object;)Lorg/graalvm/word/PointerBase;
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.write:(Lorg/graalvm/word/WordBase;)V
         2: .line 252
            return
        end local 3 // java.lang.Object retValue
        end local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 0 // org.graalvm.nativeimage.c.type.WordPointer ret
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0       ret  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0    3     1      args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0    3     2      user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1    3     3  retValue  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      ret   
      args  
      user  

  static void invokeClosureObjectRet(com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif, org.graalvm.nativeimage.c.type.WordPointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        start local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 259
            invokestatic com.oracle.svm.core.CErrorNumber.getCErrorNumber:()I
            istore 4 /* errno */
        start local 4 // int errno
         1: .line 260
            aload 3 /* user */
            invokeinterface com.oracle.svm.truffle.nfi.LibFFI$ClosureData.isolate:()Lorg/graalvm/nativeimage/Isolate;
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.enterIsolate:(Lorg/graalvm/nativeimage/Isolate;)I
            pop
         2: .line 261
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            iload 4 /* errno */
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.write:(I)V
         3: .line 264
            aload 1 /* ret */
            aload 2 /* args */
            aload 3 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.doInvokeClosureObjectRet:(Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
         4: .line 265
            goto 7
      StackMap locals: com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif org.graalvm.nativeimage.c.type.WordPointer org.graalvm.nativeimage.c.type.WordPointer com.oracle.svm.truffle.nfi.LibFFI$ClosureData int
      StackMap stack: java.lang.Throwable
         5: astore 5 /* t */
        start local 5 // java.lang.Throwable t
         6: .line 266
            getstatic com.oracle.svm.truffle.nfi.NativeClosure.pendingException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aload 5 /* t */
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
        end local 5 // java.lang.Throwable t
         7: .line 269
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.truffle.nfi.ErrnoMirror.errnoMirror:Lcom/oracle/svm/core/threadlocal/FastThreadLocalBytes;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalBytes.getAddress:()Lorg/graalvm/word/PointerBase;
            checkcast org.graalvm.nativeimage.c.type.CIntPointer
            invokeinterface org.graalvm.nativeimage.c.type.CIntPointer.read:()I
            istore 4 /* errno */
         8: .line 270
            invokestatic com.oracle.svm.core.c.function.CEntryPointActions.leave:()I
            pop
         9: .line 272
            iload 4 /* errno */
            invokestatic com.oracle.svm.core.CErrorNumber.setCErrorNumber:(I)V
        10: .line 273
            return
        end local 4 // int errno
        end local 3 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 2 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer ret
        end local 0 // com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif cif
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0    cif  Lcom/oracle/svm/truffle/nfi/libffi/LibFFI$ffi_cif;
            0   11     1    ret  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     2   args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0   11     3   user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1   11     4  errno  I
            6    7     5      t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.Throwable
    RuntimeVisibleAnnotations: 
      org.graalvm.nativeimage.c.function.CEntryPoint()
      com.oracle.svm.core.c.function.CEntryPointOptions(prologue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoPrologue;, epilogue = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NoEpilogue;, publishAs = com.oracle.svm.core.c.function.CEntryPointOptions$Publish.NotPublished:Lcom/oracle/svm/core/c/function/CEntryPointOptions$Publish;, include = Lcom/oracle/svm/core/c/function/CEntryPointOptions$NotIncludedAutomatically;)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "contains prologue and epilogue for thread state transition", calleeMustBe = false)
    MethodParameters:
      Name  Flags
      cif   
      ret   
      args  
      user  

  private static void doInvokeClosureObjectRet(org.graalvm.nativeimage.c.type.WordPointer, org.graalvm.nativeimage.c.type.WordPointer, com.oracle.svm.truffle.nfi.LibFFI$ClosureData);
    descriptor: (Lorg/graalvm/nativeimage/c/type/WordPointer;Lorg/graalvm/nativeimage/c/type/WordPointer;Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.graalvm.nativeimage.c.type.WordPointer ret
        start local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        start local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
         0: .line 276
            aload 2 /* user */
            invokestatic com.oracle.svm.truffle.nfi.NativeClosure.lookup:(Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;)Lcom/oracle/svm/truffle/nfi/NativeClosure;
            aload 1 /* args */
            aconst_null
            invokevirtual com.oracle.svm.truffle.nfi.NativeClosure.call:(Lorg/graalvm/nativeimage/c/type/WordPointer;Ljava/nio/ByteBuffer;)Ljava/lang/Object;
            astore 3 /* obj */
        start local 3 // java.lang.Object obj
         1: .line 277
            aload 3 /* obj */
            ifnonnull 4
         2: .line 278
            aload 0 /* ret */
            invokestatic org.graalvm.word.WordFactory.zero:()Lorg/graalvm/word/WordBase;
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.write:(Lorg/graalvm/word/WordBase;)V
         3: .line 279
            goto 6
         4: .line 280
      StackMap locals: java.lang.Object
      StackMap stack:
            ldc Lcom/oracle/svm/truffle/nfi/TruffleNFISupport;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.truffle.nfi.TruffleNFISupport
            aload 3 /* obj */
            invokevirtual com.oracle.svm.truffle.nfi.TruffleNFISupport.createGlobalHandle:(Ljava/lang/Object;)Lcom/oracle/svm/truffle/nfi/TruffleObjectHandle;
            astore 4 /* handle */
        start local 4 // com.oracle.svm.truffle.nfi.TruffleObjectHandle handle
         5: .line 281
            aload 0 /* ret */
            aload 4 /* handle */
            invokeinterface org.graalvm.nativeimage.c.type.WordPointer.write:(Lorg/graalvm/word/WordBase;)V
        end local 4 // com.oracle.svm.truffle.nfi.TruffleObjectHandle handle
         6: .line 283
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.Object obj
        end local 2 // com.oracle.svm.truffle.nfi.LibFFI$ClosureData user
        end local 1 // org.graalvm.nativeimage.c.type.WordPointer args
        end local 0 // org.graalvm.nativeimage.c.type.WordPointer ret
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0     ret  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0    7     1    args  Lorg/graalvm/nativeimage/c/type/WordPointer;
            0    7     2    user  Lcom/oracle/svm/truffle/nfi/LibFFI$ClosureData;
            1    7     3     obj  Ljava/lang/Object;
            5    6     4  handle  Lcom/oracle/svm/truffle/nfi/TruffleObjectHandle;
    MethodParameters:
      Name  Flags
      ret   
      args  
      user  
}
SourceFile: "NativeClosure.java"
InnerClasses:
  public final Publish = com.oracle.svm.core.c.function.CEntryPointOptions$Publish of com.oracle.svm.core.c.function.CEntryPointOptions
  public abstract ClosureData = com.oracle.svm.truffle.nfi.LibFFI$ClosureData of com.oracle.svm.truffle.nfi.LibFFI
  abstract NativeClosureHandle = com.oracle.svm.truffle.nfi.LibFFI$NativeClosureHandle of com.oracle.svm.truffle.nfi.LibFFI
  public abstract ffi_arg = com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_arg of com.oracle.svm.truffle.nfi.libffi.LibFFI
  public abstract ffi_cif = com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_cif of com.oracle.svm.truffle.nfi.libffi.LibFFI
  public abstract ffi_closure = com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure of com.oracle.svm.truffle.nfi.libffi.LibFFI
  public abstract ffi_closure_callback = com.oracle.svm.truffle.nfi.libffi.LibFFI$ffi_closure_callback of com.oracle.svm.truffle.nfi.libffi.LibFFI