public class com.oracle.truffle.nfi.test.StringNFITest 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.StringNFITest
  super_class: com.oracle.truffle.nfi.test.NFITest
{
  private java.lang.String expectedArg;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.Object callbackRet;
    descriptor: Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE

  private final java.lang.Object strArgCallback;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Object strRetCallback;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
         0: .line 62
            aload 0 /* this */
            invokespecial com.oracle.truffle.nfi.test.NFITest.<init>:()V
         1: .line 173
            aload 0 /* this */
            new com.oracle.truffle.nfi.test.interop.TestCallback
            dup
            iconst_1
            aload 0 /* this */
            invokedynamic call(Lcom/oracle/truffle/nfi/test/StringNFITest;)Lcom/oracle/truffle/nfi/test/interop/TestCallback$Function;
              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;)Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/StringNFITest.lambda$1([Ljava/lang/Object;)Ljava/lang/Object; (7)
                  ([Ljava/lang/Object;)Ljava/lang/Object;
            invokespecial com.oracle.truffle.nfi.test.interop.TestCallback.<init>:(ILcom/oracle/truffle/nfi/test/interop/TestCallback$Function;)V
            putfield com.oracle.truffle.nfi.test.StringNFITest.strArgCallback:Ljava/lang/Object;
         2: .line 178
            aload 0 /* this */
            new com.oracle.truffle.nfi.test.interop.TestCallback
            dup
            iconst_0
            aload 0 /* this */
            invokedynamic call(Lcom/oracle/truffle/nfi/test/StringNFITest;)Lcom/oracle/truffle/nfi/test/interop/TestCallback$Function;
              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;)Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/StringNFITest.lambda$0([Ljava/lang/Object;)Ljava/lang/Object; (7)
                  ([Ljava/lang/Object;)Ljava/lang/Object;
            invokespecial com.oracle.truffle.nfi.test.interop.TestCallback.<init>:(ILcom/oracle/truffle/nfi/test/interop/TestCallback$Function;)V
            putfield com.oracle.truffle.nfi.test.StringNFITest.strRetCallback:Ljava/lang/Object;
         3: .line 62
            return
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/oracle/truffle/nfi/test/StringNFITest;

  public void testJavaStringArg(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
         0: .line 73
            aload 1 /* callTarget */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "42"
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* ret */
        start local 2 // java.lang.Object ret
         1: .line 74
            ldc "return value"
            aload 2 /* ret */
            ldc Ljava/lang/Integer;
            invokestatic org.hamcrest.CoreMatchers.instanceOf:(Ljava/lang/Class;)Lorg/hamcrest/Matcher;
            invokestatic org.hamcrest.CoreMatchers.is:(Lorg/hamcrest/Matcher;)Lorg/hamcrest/Matcher;
            invokestatic org.junit.Assert.assertThat:(Ljava/lang/String;Ljava/lang/Object;Lorg/hamcrest/Matcher;)V
         2: .line 75
            ldc "return value"
            ldc 42
            aload 2 /* ret */
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
         3: .line 76
            return
        end local 2 // java.lang.Object ret
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            1    4     2         ret  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringArgNode;)
    MethodParameters:
            Name  Flags
      callTarget  

  public void testBoxedStringArg(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
         0: .line 80
            aload 1 /* callTarget */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            new com.oracle.truffle.nfi.test.interop.BoxedPrimitive
            dup
            ldc "42"
            invokespecial com.oracle.truffle.nfi.test.interop.BoxedPrimitive.<init>:(Ljava/lang/Object;)V
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* ret */
        start local 2 // java.lang.Object ret
         1: .line 81
            ldc "return value"
            aload 2 /* ret */
            ldc Ljava/lang/Integer;
            invokestatic org.hamcrest.CoreMatchers.instanceOf:(Ljava/lang/Class;)Lorg/hamcrest/Matcher;
            invokestatic org.hamcrest.CoreMatchers.is:(Lorg/hamcrest/Matcher;)Lorg/hamcrest/Matcher;
            invokestatic org.junit.Assert.assertThat:(Ljava/lang/String;Ljava/lang/Object;Lorg/hamcrest/Matcher;)V
         2: .line 82
            ldc "return value"
            ldc 42
            aload 2 /* ret */
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
         3: .line 83
            return
        end local 2 // java.lang.Object ret
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            1    4     2         ret  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringArgNode;)
    MethodParameters:
            Name  Flags
      callTarget  

  public void testNativeStringArg(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
         0: .line 106
            aload 1 /* callTarget */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "8472"
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* retObj */
        start local 2 // java.lang.Object retObj
         1: .line 107
            ldc "return value"
            aload 2 /* retObj */
            ldc Ljava/lang/Integer;
            invokestatic org.hamcrest.CoreMatchers.instanceOf:(Ljava/lang/Class;)Lorg/hamcrest/Matcher;
            invokestatic org.hamcrest.CoreMatchers.is:(Lorg/hamcrest/Matcher;)Lorg/hamcrest/Matcher;
            invokestatic org.junit.Assert.assertThat:(Ljava/lang/String;Ljava/lang/Object;Lorg/hamcrest/Matcher;)V
         2: .line 108
            ldc "return value"
            ldc 8472
            aload 2 /* retObj */
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
         3: .line 109
            return
        end local 2 // java.lang.Object retObj
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            1    4     2      retObj  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$NativeStringArgNode;)
    MethodParameters:
            Name  Flags
      callTarget  

  public void testStringRetConst(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
         0: .line 120
            aload 1 /* callTarget */
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* obj */
        start local 2 // java.lang.Object obj
         1: .line 122
            ldc "isString"
            getstatic com.oracle.truffle.nfi.test.StringNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* obj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isString:(Ljava/lang/Object;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
         2: .line 123
            ldc "return value"
            ldc "Hello, World!"
            getstatic com.oracle.truffle.nfi.test.StringNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* obj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.asString:(Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 124
            return
        end local 2 // java.lang.Object obj
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            1    4     2         obj  Ljava/lang/Object;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedMessageException
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringRetConstNode;)
    MethodParameters:
            Name  Flags
      callTarget  

  public void testStringRetDynamic(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.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
         0: .line 160
            aload 1 /* target */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 161
            return
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    2     1  target  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringRetDynamicNode;)
    MethodParameters:
        Name  Flags
      target  

  private void testStringCallback(com.oracle.truffle.api.CallTarget, java.lang.Object, java.lang.String);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;Ljava/lang/Object;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
        start local 2 // java.lang.Object cbRet
        start local 3 // java.lang.String expected
         0: .line 183
            aload 0 /* this */
            aload 3 /* expected */
            putfield com.oracle.truffle.nfi.test.StringNFITest.expectedArg:Ljava/lang/String;
         1: .line 184
            aload 0 /* this */
            aload 2 /* cbRet */
            putfield com.oracle.truffle.nfi.test.StringNFITest.callbackRet:Ljava/lang/Object;
         2: .line 186
            aload 1 /* target */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.StringNFITest.strArgCallback:Ljava/lang/Object;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.StringNFITest.strRetCallback:Ljava/lang/Object;
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* ret */
        start local 4 // java.lang.Object ret
         3: .line 188
            ldc "return value"
            aload 4 /* ret */
            ldc Ljava/lang/Integer;
            invokestatic org.hamcrest.CoreMatchers.instanceOf:(Ljava/lang/Class;)Lorg/hamcrest/Matcher;
            invokestatic org.hamcrest.CoreMatchers.is:(Lorg/hamcrest/Matcher;)Lorg/hamcrest/Matcher;
            invokestatic org.junit.Assert.assertThat:(Ljava/lang/String;Ljava/lang/Object;Lorg/hamcrest/Matcher;)V
         4: .line 189
            ldc "return value"
            ldc 42
            aload 4 /* ret */
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
         5: .line 190
            return
        end local 4 // java.lang.Object ret
        end local 3 // java.lang.String expected
        end local 2 // java.lang.Object cbRet
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    6     1    target  Lcom/oracle/truffle/api/CallTarget;
            0    6     2     cbRet  Ljava/lang/Object;
            0    6     3  expected  Ljava/lang/String;
            3    6     4       ret  Ljava/lang/Object;
    MethodParameters:
          Name  Flags
      target    
      cbRet     
      expected  

  public void testStringCallback(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
         0: .line 194
            aload 0 /* this */
            aload 1 /* target */
            ldc "Hello, Native!"
            ldc "Hello, Truffle!"
            invokevirtual com.oracle.truffle.nfi.test.StringNFITest.testStringCallback:(Lcom/oracle/truffle/api/CallTarget;Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 195
            return
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    2     1  target  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringCallbackNode;)
    MethodParameters:
        Name  Flags
      target  

  public void testUTF8StringCallback(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
         0: .line 199
            aload 0 /* this */
            aload 1 /* target */
            ldc "Hello, UTF-8 \u00E4\u00E9\u00E7!"
            ldc "UTF-8 seems to work \u20AC\u00A2"
            invokevirtual com.oracle.truffle.nfi.test.StringNFITest.testStringCallback:(Lcom/oracle/truffle/api/CallTarget;Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 200
            return
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    2     1  target  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringCallbackNode;)
    MethodParameters:
        Name  Flags
      target  

  public void testBoxedStringCallback(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.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
         0: .line 204
            aload 0 /* this */
            aload 1 /* target */
            new com.oracle.truffle.nfi.test.interop.BoxedPrimitive
            dup
            ldc "Hello, Native!"
            invokespecial com.oracle.truffle.nfi.test.interop.BoxedPrimitive.<init>:(Ljava/lang/Object;)V
            ldc "Hello, Truffle!"
            invokevirtual com.oracle.truffle.nfi.test.StringNFITest.testStringCallback:(Lcom/oracle/truffle/api/CallTarget;Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 205
            return
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    2     1  target  Lcom/oracle/truffle/api/CallTarget;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$StringCallbackNode;)
    MethodParameters:
        Name  Flags
      target  

  public void testNativeStringCallback(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget target
         0: .line 224
            aload 1 /* target */
            iconst_0
            anewarray java.lang.Object
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* obj */
        start local 2 // java.lang.Object obj
         1: .line 226
            ldc "isString"
            getstatic com.oracle.truffle.nfi.test.StringNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* obj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isString:(Ljava/lang/Object;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
         2: .line 227
            ldc "return value"
            ldc "same"
            getstatic com.oracle.truffle.nfi.test.StringNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 2 /* obj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.asString:(Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 228
            return
        end local 2 // java.lang.Object obj
        end local 1 // com.oracle.truffle.api.CallTarget target
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    4     1  target  Lcom/oracle/truffle/api/CallTarget;
            1    4     2     obj  Ljava/lang/Object;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedMessageException
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/StringNFITest$NativeStringCallbackNode;)
    MethodParameters:
        Name  Flags
      target  

  private java.lang.Object lambda$1(java.lang.Object[]);
    descriptor: ([Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // java.lang.Object[] args
         0: .line 174
            ldc "string argument"
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.StringNFITest.expectedArg:Ljava/lang/String;
            aload 1 /* args */
            iconst_0
            aaload
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         1: .line 175
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
        end local 1 // java.lang.Object[] args
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    2     1  args  [Ljava/lang/Object;

  private java.lang.Object lambda$0(java.lang.Object[]);
    descriptor: ([Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.StringNFITest this
        start local 1 // java.lang.Object[] args
         0: .line 179
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.StringNFITest.callbackRet:Ljava/lang/Object;
            areturn
        end local 1 // java.lang.Object[] args
        end local 0 // com.oracle.truffle.nfi.test.StringNFITest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/test/StringNFITest;
            0    1     1  args  [Ljava/lang/Object;
}
SourceFile: "StringNFITest.java"
NestMembers:
  com.oracle.truffle.nfi.test.StringNFITest$NativeStringArgNode  com.oracle.truffle.nfi.test.StringNFITest$NativeStringCallbackNode  com.oracle.truffle.nfi.test.StringNFITest$StringArgNode  com.oracle.truffle.nfi.test.StringNFITest$StringCallbackNode  com.oracle.truffle.nfi.test.StringNFITest$StringRetConstNode  com.oracle.truffle.nfi.test.StringNFITest$StringRetDynamicNode
InnerClasses:
  public NativeStringArgNode = com.oracle.truffle.nfi.test.StringNFITest$NativeStringArgNode of com.oracle.truffle.nfi.test.StringNFITest
  public NativeStringCallbackNode = com.oracle.truffle.nfi.test.StringNFITest$NativeStringCallbackNode of com.oracle.truffle.nfi.test.StringNFITest
  public StringArgNode = com.oracle.truffle.nfi.test.StringNFITest$StringArgNode of com.oracle.truffle.nfi.test.StringNFITest
  public StringCallbackNode = com.oracle.truffle.nfi.test.StringNFITest$StringCallbackNode of com.oracle.truffle.nfi.test.StringNFITest
  public StringRetConstNode = com.oracle.truffle.nfi.test.StringNFITest$StringRetConstNode of com.oracle.truffle.nfi.test.StringNFITest
  public StringRetDynamicNode = com.oracle.truffle.nfi.test.StringNFITest$StringRetDynamicNode of com.oracle.truffle.nfi.test.StringNFITest
  public abstract Function = com.oracle.truffle.nfi.test.interop.TestCallback$Function of com.oracle.truffle.nfi.test.interop.TestCallback
  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
    RuntimeVisibleAnnotations: 
      org.junit.runner.RunWith(value = Lcom/oracle/truffle/tck/TruffleRunner;)