final class com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache
  super_class: java.lang.Object
{
  private final java.util.WeakHashMap<com.oracle.truffle.llvm.runtime.types.FunctionType, com.oracle.truffle.api.source.Source> sigCache;
    descriptor: Ljava/util/WeakHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/WeakHashMap<Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Lcom/oracle/truffle/api/source/Source;>;

  private final java.util.WeakHashMap<com.oracle.truffle.llvm.runtime.types.FunctionType, com.oracle.truffle.api.source.Source> sigCacheSkipStackArg;
    descriptor: Ljava/util/WeakHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/WeakHashMap<Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Lcom/oracle/truffle/api/source/Source;>;

  private final org.graalvm.collections.EconomicMap<java.lang.String, com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction> wellKnown;
    descriptor: Lorg/graalvm/collections/EconomicMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/graalvm/collections/EconomicMap<Ljava/lang/String;Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;>;

  private int nextIndex;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
         0: .line 140
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 141
            aload 0 /* this */
            new java.util.WeakHashMap
            dup
            invokespecial java.util.WeakHashMap.<init>:()V
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.sigCache:Ljava/util/WeakHashMap;
         2: .line 142
            aload 0 /* this */
            new java.util.WeakHashMap
            dup
            invokespecial java.util.WeakHashMap.<init>:()V
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.sigCacheSkipStackArg:Ljava/util/WeakHashMap;
         3: .line 144
            aload 0 /* this */
            invokestatic org.graalvm.collections.EconomicMap.create:()Lorg/graalvm/collections/EconomicMap;
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.wellKnown:Lorg/graalvm/collections/EconomicMap;
         4: .line 145
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.nextIndex:I
         5: .line 146
            return
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;

  com.oracle.truffle.api.source.Source getSignatureSource(com.oracle.truffle.llvm.runtime.types.FunctionType);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;)Lcom/oracle/truffle/api/source/Source;
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
        start local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
         0: .line 149
            aload 1 /* type */
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.sigCache:Ljava/util/WeakHashMap;
            iconst_0
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.getSignatureSource:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Ljava/util/WeakHashMap;I)Lcom/oracle/truffle/api/source/Source;
            areturn
        end local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            0    1     1  type  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
      Name  Flags
      type  

  com.oracle.truffle.api.source.Source getSignatureSourceSkipStackArg(com.oracle.truffle.llvm.runtime.types.FunctionType);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;)Lcom/oracle/truffle/api/source/Source;
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
        start local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
         0: .line 153
            aload 1 /* type */
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.sigCacheSkipStackArg:Ljava/util/WeakHashMap;
            iconst_1
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.getSignatureSource:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Ljava/util/WeakHashMap;I)Lcom/oracle/truffle/api/source/Source;
            areturn
        end local 1 // com.oracle.truffle.llvm.runtime.types.FunctionType type
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            0    1     1  type  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    MethodParameters:
      Name  Flags
      type  

  private static com.oracle.truffle.api.source.Source getSignatureSource(com.oracle.truffle.llvm.runtime.types.FunctionType, java.util.WeakHashMap<com.oracle.truffle.llvm.runtime.types.FunctionType, com.oracle.truffle.api.source.Source>, int);
    descriptor: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Ljava/util/WeakHashMap;I)Lcom/oracle/truffle/api/source/Source;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType type
        start local 1 // java.util.WeakHashMap map
        start local 2 // int skipArgs
         0: .line 157
            aload 1 /* map */
            dup
            astore 3
            monitorenter
         1: .line 158
            aload 1 /* map */
            aload 0 /* type */
            invokevirtual java.util.WeakHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.source.Source
            astore 4 /* ret */
        start local 4 // com.oracle.truffle.api.source.Source ret
         2: .line 159
            aload 4 /* ret */
            ifnonnull 6
         3: .line 160
            aload 0 /* type */
            iload 2 /* skipArgs */
            invokestatic com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension.getNativeSignature:(Lcom/oracle/truffle/llvm/runtime/types/FunctionType;I)Ljava/lang/String;
            astore 5 /* sig */
        start local 5 // java.lang.String sig
         4: .line 161
            ldc "nfi"
            aload 5 /* sig */
            ldc "llvm-nfi-signature"
            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;
            astore 4 /* ret */
         5: .line 162
            aload 1 /* map */
            aload 0 /* type */
            aload 4 /* ret */
            invokevirtual java.util.WeakHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 5 // java.lang.String sig
         6: .line 164
      StackMap locals: java.util.WeakHashMap com.oracle.truffle.api.source.Source
      StackMap stack:
            aload 4 /* ret */
            aload 3
            monitorexit
         7: areturn
        end local 4 // com.oracle.truffle.api.source.Source ret
         8: .line 157
      StackMap locals: com.oracle.truffle.llvm.runtime.types.FunctionType java.util.WeakHashMap int java.util.WeakHashMap
      StackMap stack: java.lang.Throwable
            aload 3
            monitorexit
         9: athrow
        end local 2 // int skipArgs
        end local 1 // java.util.WeakHashMap map
        end local 0 // com.oracle.truffle.llvm.runtime.types.FunctionType type
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      type  Lcom/oracle/truffle/llvm/runtime/types/FunctionType;
            0   10     1       map  Ljava/util/WeakHashMap<Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Lcom/oracle/truffle/api/source/Source;>;
            0   10     2  skipArgs  I
            2    8     4       ret  Lcom/oracle/truffle/api/source/Source;
            4    6     5       sig  Ljava/lang/String;
      Exception table:
        from    to  target  type
           1     7       8  any
           8     9       8  any
    Exceptions:
      throws com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException
    Signature: (Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Ljava/util/WeakHashMap<Lcom/oracle/truffle/llvm/runtime/types/FunctionType;Lcom/oracle/truffle/api/source/Source;>;I)Lcom/oracle/truffle/api/source/Source;
    MethodParameters:
          Name  Flags
      type      
      map       
      skipArgs  

  synchronized com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction getWellKnownFunction(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
        start local 1 // java.lang.String name
        start local 2 // java.lang.String signature
         0: .line 169
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.wellKnown:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* name */
            invokeinterface org.graalvm.collections.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction
            astore 3 /* ret */
        start local 3 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction ret
         1: .line 170
            aload 3 /* ret */
            ifnonnull 5
         2: .line 171
            ldc "nfi"
            aload 2 /* signature */
            ldc "llvm-nfi-signature"
            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;
            astore 4 /* signatureSource */
        start local 4 // com.oracle.truffle.api.source.Source signatureSource
         3: .line 172
            new com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction
            dup
            aload 0 /* this */
            dup
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.nextIndex:I
            dup_x1
            iconst_1
            iadd
            putfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.nextIndex:I
            aload 1 /* name */
            aload 4 /* signatureSource */
            invokespecial com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction.<init>:(ILjava/lang/String;Lcom/oracle/truffle/api/source/Source;)V
            astore 3 /* ret */
         4: .line 173
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache.wellKnown:Lorg/graalvm/collections/EconomicMap;
            aload 1 /* name */
            aload 3 /* ret */
            invokeinterface org.graalvm.collections.EconomicMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 4 // com.oracle.truffle.api.source.Source signatureSource
         5: .line 175
      StackMap locals: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction
      StackMap stack:
            aload 3 /* ret */
            areturn
        end local 3 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction ret
        end local 2 // java.lang.String signature
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0             this  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$SignatureSourceCache;
            0    6     1             name  Ljava/lang/String;
            0    6     2        signature  Ljava/lang/String;
            1    6     3              ret  Lcom/oracle/truffle/llvm/nativemode/runtime/NFIContextExtension$WellKnownFunction;
            3    5     4  signatureSource  Lcom/oracle/truffle/api/source/Source;
    MethodParameters:
           Name  Flags
      name       
      signature  
}
SourceFile: "NFIContextExtension.java"
NestHost: com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
InnerClasses:
  public final LiteralBuilder = com.oracle.truffle.api.source.Source$LiteralBuilder of com.oracle.truffle.api.source.Source
  private final SignatureSourceCache = com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$SignatureSourceCache of com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  final WellKnownFunction = com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension$WellKnownFunction of com.oracle.truffle.llvm.nativemode.runtime.NFIContextExtension
  public UnsupportedNativeTypeException = com.oracle.truffle.llvm.runtime.NativeContextExtension$UnsupportedNativeTypeException of com.oracle.truffle.llvm.runtime.NativeContextExtension