public class com.oracle.truffle.nfi.test.KeyInfoNFITest extends com.oracle.truffle.nfi.test.NFITest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.nfi.test.KeyInfoNFITest
  super_class: com.oracle.truffle.nfi.test.NFITest
{
  public java.lang.String symbol;
    descriptor: Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 0)

  public java.util.function.Supplier<java.lang.Object> object;
    descriptor: Ljava/util/function/Supplier;
    flags: (0x0001) ACC_PUBLIC
    Signature: Ljava/util/function/Supplier<Ljava/lang/Object;>;
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 1)

  public java.lang.String description;
    descriptor: Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 2)

  public boolean read;
    descriptor: Z
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 3)

  public boolean invoke;
    descriptor: Z
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 4)

  public boolean optional;
    descriptor: Z
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 5)

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.nfi.test.KeyInfoNFITest this
         0: .line 67
            aload 0 /* this */
            invokespecial com.oracle.truffle.nfi.test.NFITest.<init>:()V
            return
        end local 0 // com.oracle.truffle.nfi.test.KeyInfoNFITest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/test/KeyInfoNFITest;

  private static void addTest(java.util.List<java.lang.Object[]>, java.lang.String, java.util.function.Supplier<java.lang.Object>, java.lang.String, boolean, boolean, );
    descriptor: (Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=7
        start local 0 // java.util.List ret
        start local 1 // java.lang.String symbol
        start local 2 // java.util.function.Supplier object
        start local 3 // java.lang.String description
        start local 4 // boolean read
        start local 5 // boolean invoke
        start local 6 // boolean optional
         0: .line 70
            aload 0 /* ret */
            bipush 6
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* symbol */
            aastore
            dup
            iconst_1
            aload 2 /* object */
            aastore
            dup
            iconst_2
            aload 3 /* description */
            aastore
            dup
            iconst_3
            iload 4 /* read */
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_4
            iload 5 /* invoke */
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_5
            iload 6 /* optional */
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 71
            return
        end local 6 // boolean optional
        end local 5 // boolean invoke
        end local 4 // boolean read
        end local 3 // java.lang.String description
        end local 2 // java.util.function.Supplier object
        end local 1 // java.lang.String symbol
        end local 0 // java.util.List ret
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0          ret  Ljava/util/List<[Ljava/lang/Object;>;
            0    2     1       symbol  Ljava/lang/String;
            0    2     2       object  Ljava/util/function/Supplier<Ljava/lang/Object;>;
            0    2     3  description  Ljava/lang/String;
            0    2     4         read  Z
            0    2     5       invoke  Z
            0    2     6     optional  Z
    Signature: (Ljava/util/List<[Ljava/lang/Object;>;Ljava/lang/String;Ljava/util/function/Supplier<Ljava/lang/Object;>;Ljava/lang/String;ZZZ)V
    MethodParameters:
             Name  Flags
      ret          
      symbol       
      object       
      description  
      read         
      invoke       
      optional     

  public static java.util.Collection<java.lang.Object[]> data();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=0
         0: .line 75
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 0 /* ret */
        start local 0 // java.util.List ret
         1: .line 76
            aload 0 /* ret */
            ldc "increment_SINT32"
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/KeyInfoNFITest.lambda$0()Ljava/lang/Object; (6)
                  ()Ljava/lang/Object;
            ldc "testLibrary"
            iconst_1
            iconst_0
            iconst_0
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         2: .line 77
            aload 0 /* ret */
            ldc "__NOT_EXISTING__"
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/KeyInfoNFITest.lambda$1()Ljava/lang/Object; (6)
                  ()Ljava/lang/Object;
            ldc "testLibrary"
            iconst_0
            iconst_0
            iconst_1
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         3: .line 79
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/KeyInfoNFITest.lambda$2()Ljava/lang/Object; (6)
                  ()Ljava/lang/Object;
            astore 1 /* symbol */
        start local 1 // java.util.function.Supplier symbol
         4: .line 86
            aload 0 /* ret */
            ldc "bind"
            aload 1 /* symbol */
            ldc "symbol"
            iconst_0
            iconst_1
            iconst_0
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         5: .line 87
            aload 0 /* ret */
            ldc "__NOT_EXISTING__"
            aload 1 /* symbol */
            ldc "symbol"
            iconst_0
            iconst_0
            iconst_0
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         6: .line 89
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/KeyInfoNFITest.lambda$3()Ljava/lang/Object; (6)
                  ()Ljava/lang/Object;
            astore 2 /* boundSymbol */
        start local 2 // java.util.function.Supplier boundSymbol
         7: .line 90
            aload 0 /* ret */
            ldc "bind"
            aload 2 /* boundSymbol */
            ldc "boundSymbol"
            iconst_0
            iconst_1
            iconst_0
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         8: .line 91
            aload 0 /* ret */
            ldc "__NOT_EXISTING__"
            aload 2 /* boundSymbol */
            ldc "boundSymbol"
            iconst_0
            iconst_0
            iconst_0
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.addTest:(Ljava/util/List;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/String;ZZZ)V
         9: .line 93
            aload 0 /* ret */
            areturn
        end local 2 // java.util.function.Supplier boundSymbol
        end local 1 // java.util.function.Supplier symbol
        end local 0 // java.util.List ret
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1   10     0          ret  Ljava/util/List<[Ljava/lang/Object;>;
            4   10     1       symbol  Ljava/util/function/Supplier<Ljava/lang/Object;>;
            7   10     2  boundSymbol  Ljava/util/function/Supplier<Ljava/lang/Object;>;
    Signature: ()Ljava/util/Collection<[Ljava/lang/Object;>;
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameters(name = "{2}[{0}]")

  private static void assertBoolean(java.lang.String, boolean, boolean);
    descriptor: (Ljava/lang/String;ZZ)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.lang.String message
        start local 1 // boolean expected
        start local 2 // boolean actual
         0: .line 117
            iload 1 /* expected */
            ifeq 3
         1: .line 118
            aload 0 /* message */
            iload 2 /* actual */
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
         2: .line 119
            goto 4
         3: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* message */
            iload 2 /* actual */
            invokestatic org.junit.Assert.assertFalse:(Ljava/lang/String;Z)V
         4: .line 122
      StackMap locals:
      StackMap stack:
            return
        end local 2 // boolean actual
        end local 1 // boolean expected
        end local 0 // java.lang.String message
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0   message  Ljava/lang/String;
            0    5     1  expected  Z
            0    5     2    actual  Z
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
          Name  Flags
      message   
      expected  
      actual    

  private static void assertBooleanOptional(java.lang.String, boolean, boolean);
    descriptor: (Ljava/lang/String;ZZ)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.lang.String message
        start local 1 // boolean expected
        start local 2 // boolean actual
         0: .line 126
            iload 1 /* expected */
            ifeq 2
         1: .line 127
            aload 0 /* message */
            iload 2 /* actual */
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
         2: .line 129
      StackMap locals:
      StackMap stack:
            return
        end local 2 // boolean actual
        end local 1 // boolean expected
        end local 0 // java.lang.String message
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0   message  Ljava/lang/String;
            0    3     1  expected  Z
            0    3     2    actual  Z
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
          Name  Flags
      message   
      expected  
      actual    

  public void testKeyInfo(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.KeyInfoNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget keyInfo
         0: .line 178
            aload 1 /* keyInfo */
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.KeyInfoNFITest.object:Ljava/util/function/Supplier;
            invokeinterface java.util.function.Supplier.get:()Ljava/lang/Object;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.KeyInfoNFITest.symbol:Ljava/lang/String;
            aastore
            dup
            iconst_2
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.KeyInfoNFITest.read:Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_3
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.KeyInfoNFITest.invoke:Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_4
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.KeyInfoNFITest.optional:Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 179
            return
        end local 1 // com.oracle.truffle.api.CallTarget keyInfo
        end local 0 // com.oracle.truffle.nfi.test.KeyInfoNFITest this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lcom/oracle/truffle/nfi/test/KeyInfoNFITest;
            0    2     1  keyInfo  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/KeyInfoNFITest$KeyInfoNode;)
    MethodParameters:
         Name  Flags
      keyInfo  

  private static java.lang.Object lambda$0();
    descriptor: ()Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 76
            getstatic com.oracle.truffle.nfi.test.KeyInfoNFITest.testLibrary:Ljava/lang/Object;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static java.lang.Object lambda$1();
    descriptor: ()Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 77
            getstatic com.oracle.truffle.nfi.test.KeyInfoNFITest.testLibrary:Ljava/lang/Object;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static java.lang.Object lambda$2();
    descriptor: ()Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 81
            getstatic com.oracle.truffle.nfi.test.KeyInfoNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            getstatic com.oracle.truffle.nfi.test.KeyInfoNFITest.testLibrary:Ljava/lang/Object;
            ldc "increment_SINT32"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
         1: areturn
         2: .line 82
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            astore 0 /* e */
        start local 0 // com.oracle.truffle.api.interop.InteropException e
         3: .line 83
            new java.lang.AssertionError
            dup
            aload 0 /* e */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 0 // com.oracle.truffle.api.interop.InteropException e
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            3    4     0     e  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           0     1       2  Class com.oracle.truffle.api.interop.InteropException

  private static java.lang.Object lambda$3();
    descriptor: ()Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 89
            ldc "increment_SINT32"
            ldc "(sint32):sint32"
            invokestatic com.oracle.truffle.nfi.test.KeyInfoNFITest.lookupAndBind:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "KeyInfoNFITest.java"
NestMembers:
  com.oracle.truffle.nfi.test.KeyInfoNFITest$KeyInfoNode  com.oracle.truffle.nfi.test.KeyInfoNFITest$VerifyKeyInfoNode
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  public KeyInfoNode = com.oracle.truffle.nfi.test.KeyInfoNFITest$KeyInfoNode of com.oracle.truffle.nfi.test.KeyInfoNFITest
  abstract VerifyKeyInfoNode = com.oracle.truffle.nfi.test.KeyInfoNFITest$VerifyKeyInfoNode of com.oracle.truffle.nfi.test.KeyInfoNFITest
  public abstract Inject = com.oracle.truffle.tck.TruffleRunner$Inject of com.oracle.truffle.tck.TruffleRunner
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public abstract Parameter = org.junit.runners.Parameterized$Parameter of org.junit.runners.Parameterized
  public abstract Parameters = org.junit.runners.Parameterized$Parameters of org.junit.runners.Parameterized
  public abstract UseParametersRunnerFactory = org.junit.runners.Parameterized$UseParametersRunnerFactory of org.junit.runners.Parameterized
    RuntimeVisibleAnnotations: 
      org.junit.runner.RunWith(value = Lorg/junit/runners/Parameterized;)
      org.junit.runners.Parameterized$UseParametersRunnerFactory(value = Lcom/oracle/truffle/tck/TruffleRunner$ParametersFactory;)