public class com.oracle.truffle.api.test.host.JavaStringCoercionTest extends com.oracle.truffle.api.test.polyglot.AbstractPolyglotTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.api.test.host.JavaStringCoercionTest
  super_class: com.oracle.truffle.api.test.polyglot.AbstractPolyglotTest
{
  private static final com.oracle.truffle.api.interop.InteropLibrary INTEROP;
    descriptor: Lcom/oracle/truffle/api/interop/InteropLibrary;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 70
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.getUncached:()Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.interop.InteropLibrary
            putstatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

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

  public void before();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 74
            invokestatic org.graalvm.polyglot.HostAccess.newBuilder:()Lorg/graalvm/polyglot/HostAccess$Builder;
            iconst_1
            invokevirtual org.graalvm.polyglot.HostAccess$Builder.allowPublicAccess:(Z)Lorg/graalvm/polyglot/HostAccess$Builder;
            invokestatic com.oracle.truffle.api.test.examples.TargetMappings.enableStringCoercions:(Lorg/graalvm/polyglot/HostAccess$Builder;)Lorg/graalvm/polyglot/HostAccess$Builder;
            invokevirtual org.graalvm.polyglot.HostAccess$Builder.build:()Lorg/graalvm/polyglot/HostAccess;
            astore 1 /* access */
        start local 1 // org.graalvm.polyglot.HostAccess access
         1: .line 75
            aload 0 /* this */
            iconst_0
            anewarray java.lang.String
            invokestatic org.graalvm.polyglot.Context.newBuilder:([Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            aload 1 /* access */
            invokevirtual org.graalvm.polyglot.Context$Builder.allowHostAccess:(Lorg/graalvm/polyglot/HostAccess;)Lorg/graalvm/polyglot/Context$Builder;
            iconst_1
            invokevirtual org.graalvm.polyglot.Context$Builder.allowAllAccess:(Z)Lorg/graalvm/polyglot/Context$Builder;
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         2: .line 76
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$1
            dup
            aload 0 /* this */
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$1.<init>:(Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;)V
            invokestatic com.oracle.truffle.api.test.polyglot.ProxyLanguage.setDelegate:(Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;)Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;
         3: .line 75
            invokevirtual com.oracle.truffle.api.test.host.JavaStringCoercionTest.setupEnv:(Lorg/graalvm/polyglot/Context;Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;)V
         4: .line 94
            return
        end local 1 // org.graalvm.polyglot.HostAccess access
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            1    5     1  access  Lorg/graalvm/polyglot/HostAccess;
    RuntimeVisibleAnnotations: 
      org.junit.Before()

  public void testStringCoercionSingleMethod();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 114
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer1
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer1.<init>:()V
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 1 /* api */
        start local 1 // com.oracle.truffle.api.interop.TruffleObject api
         1: .line 115
            aload 1 /* api */
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.testStringCoercion:(Lcom/oracle/truffle/api/interop/TruffleObject;)V
         2: .line 116
            return
        end local 1 // com.oracle.truffle.api.interop.TruffleObject api
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            1    3     1   api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testStringCoercionOverloadedMethod();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 120
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2.<init>:()V
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 1 /* api */
        start local 1 // com.oracle.truffle.api.interop.TruffleObject api
         1: .line 121
            aload 1 /* api */
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.testStringCoercion:(Lcom/oracle/truffle/api/interop/TruffleObject;)V
         2: .line 122
            return
        end local 1 // com.oracle.truffle.api.interop.TruffleObject api
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            1    3     1   api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testPreferWrappingToStringCoercion();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 126
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2.<init>:()V
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 1 /* api */
        start local 1 // com.oracle.truffle.api.interop.TruffleObject api
         1: .line 127
            aload 1 /* api */
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$UnboxableArrayObject
            dup
            iconst_4
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$UnboxableArrayObject.<init>:(I)V
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* list */
        start local 2 // java.lang.Object list
         2: .line 128
            ldc "4"
            aload 2 /* list */
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 129
            return
        end local 2 // java.lang.Object list
        end local 1 // com.oracle.truffle.api.interop.TruffleObject api
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            1    4     1   api  Lcom/oracle/truffle/api/interop/TruffleObject;
            2    4     2  list  Ljava/lang/Object;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static void testStringCoercion(com.oracle.truffle.api.interop.TruffleObject);
    descriptor: (Lcom/oracle/truffle/api/interop/TruffleObject;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.interop.TruffleObject api
         0: .line 132
            ldc "ok"
            aload 0 /* api */
            ldc "ok"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         1: .line 133
            ldc "42"
            aload 0 /* api */
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 134
            ldc "true"
            aload 0 /* api */
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 135
            ldc "-128"
            aload 0 /* api */
            bipush -128
            invokestatic java.lang.Byte.valueOf:(B)Ljava/lang/Byte;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         4: .line 136
            ldc "-32768"
            aload 0 /* api */
            sipush -32768
            invokestatic java.lang.Short.valueOf:(S)Ljava/lang/Short;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 137
            ldc "9223372036854775807"
            aload 0 /* api */
            ldc 9223372036854775807
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 138
            ldc "3.14"
            aload 0 /* api */
            ldc 3.14
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         7: .line 139
            ldc "3.14"
            aload 0 /* api */
            ldc 3.14
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         8: .line 140
            ldc "NaN"
            aload 0 /* api */
            ldc NaN
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 141
            ldc "Infinity"
            aload 0 /* api */
            ldc Infinity
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 142
            ldc "-Infinity"
            aload 0 /* api */
            ldc -Infinity
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 143
            ldc "-0.0"
            aload 0 /* api */
            ldc -0.0
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        12: .line 144
            ldc "\uFFFF"
            aload 0 /* api */
            ldc 65535
            invokestatic java.lang.Character.valueOf:(C)Ljava/lang/Character;
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        13: .line 146
            ldc "42"
            aload 0 /* api */
            new com.oracle.truffle.api.test.host.UnboxableToInt
            dup
            bipush 42
            invokespecial com.oracle.truffle.api.test.host.UnboxableToInt.<init>:(I)V
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        14: .line 148
            aload 0 /* api */
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$NotCoercibleObject
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$NotCoercibleObject.<init>:()V
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        15: .line 149
            return
        end local 0 // com.oracle.truffle.api.interop.TruffleObject api
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0   api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    MethodParameters:
      Name  Flags
      api   

  private static java.lang.Object call(com.oracle.truffle.api.interop.TruffleObject, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // com.oracle.truffle.api.interop.TruffleObject obj
        start local 1 // java.lang.Object value
         0: .line 153
            getstatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* obj */
            ldc "call"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* value */
            aastore
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
         1: areturn
         2: .line 154
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedTypeException
            astore 2 /* e */
        start local 2 // com.oracle.truffle.api.interop.UnsupportedTypeException e
         3: .line 155
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "String coercion failed for: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " ("
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* value */
            ifnonnull 4
            aconst_null
            goto 5
      StackMap locals: com.oracle.truffle.api.interop.TruffleObject java.lang.Object com.oracle.truffle.api.interop.UnsupportedTypeException
      StackMap stack: new 3 new 3 java.lang.StringBuilder
         4: aload 1 /* value */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
      StackMap locals: com.oracle.truffle.api.interop.TruffleObject java.lang.Object com.oracle.truffle.api.interop.UnsupportedTypeException
      StackMap stack: new 3 new 3 java.lang.StringBuilder java.lang.String
         5: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 2 /* e */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // com.oracle.truffle.api.interop.UnsupportedTypeException e
        end local 1 // java.lang.Object value
        end local 0 // com.oracle.truffle.api.interop.TruffleObject obj
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0    obj  Lcom/oracle/truffle/api/interop/TruffleObject;
            0    6     1  value  Ljava/lang/Object;
            3    6     2      e  Lcom/oracle/truffle/api/interop/UnsupportedTypeException;
      Exception table:
        from    to  target  type
           0     1       2  Class com.oracle.truffle.api.interop.UnsupportedTypeException
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    MethodParameters:
       Name  Flags
      obj    
      value  

  private static void callUnsupported(com.oracle.truffle.api.interop.TruffleObject, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.interop.TruffleObject obj
        start local 1 // java.lang.Object value
         0: .line 161
            getstatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* obj */
            ldc "call"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* value */
            aastore
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 162
            ldc "Expected coercion to fail"
            invokestatic org.junit.Assert.fail:(Ljava/lang/String;)V
         2: .line 163
            goto 4
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedTypeException
         3: pop
         4: .line 165
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object value
        end local 0 // com.oracle.truffle.api.interop.TruffleObject obj
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0    obj  Lcom/oracle/truffle/api/interop/TruffleObject;
            0    5     1  value  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           0     2       3  Class com.oracle.truffle.api.interop.UnsupportedTypeException
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    MethodParameters:
       Name  Flags
      obj    
      value  

  public void testStringToPrimitiveSingleMethod();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 231
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntConsumer
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntConsumer.<init>:()V
            aastore
            dup
            iconst_1
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntegerConsumer
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntegerConsumer.<init>:()V
            aastore
            dup
            astore 4
            arraylength
            istore 3
            iconst_0
            istore 2
            goto 12
      StackMap locals: com.oracle.truffle.api.test.host.JavaStringCoercionTest top int int java.lang.Object[]
      StackMap stack:
         1: aload 4
            iload 2
            aaload
            astore 1 /* consumer */
        start local 1 // java.lang.Object consumer
         2: .line 232
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* consumer */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 5 /* api */
        start local 5 // com.oracle.truffle.api.interop.TruffleObject api
         3: .line 233
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         4: .line 234
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "+42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 235
            bipush -42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "-42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 237
            aload 5 /* api */
            ldc "42garbage"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
         7: .line 238
            aload 5 /* api */
            ldc "2147483648"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
         8: .line 239
            aload 5 /* api */
            ldc "42.0"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
         9: .line 240
            aload 5 /* api */
            ldc " 42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        10: .line 241
            aload 5 /* api */
            ldc "42 "
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        end local 5 // com.oracle.truffle.api.interop.TruffleObject api
        end local 1 // java.lang.Object consumer
        11: .line 231
            iinc 2 1
      StackMap locals:
      StackMap stack:
        12: iload 2
            iload 3
            if_icmplt 1
        13: .line 243
            return
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   14     0      this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            2   11     1  consumer  Ljava/lang/Object;
            3   11     5       api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testStringToPrimitiveOverloadedMethod();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 247
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$PrimitiveConsumer
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$PrimitiveConsumer.<init>:()V
            aastore
            dup
            iconst_1
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$BoxedPrimitiveConsumer
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$BoxedPrimitiveConsumer.<init>:()V
            aastore
            dup
            astore 4
            arraylength
            istore 3
            iconst_0
            istore 2
            goto 21
      StackMap locals: com.oracle.truffle.api.test.host.JavaStringCoercionTest top int int java.lang.Object[]
      StackMap stack:
         1: aload 4
            iload 2
            aaload
            astore 1 /* consumer */
        start local 1 // java.lang.Object consumer
         2: .line 248
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            aload 1 /* consumer */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 5 /* api */
        start local 5 // com.oracle.truffle.api.interop.TruffleObject api
         3: .line 249
            ldc 2147483648
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aload 5 /* api */
            ldc "2147483648"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         4: .line 250
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 251
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "+42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 252
            bipush -42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "-42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         7: .line 253
            ldc 4.2
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aload 5 /* api */
            ldc "4.2"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         8: .line 254
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aload 5 /* api */
            ldc "true"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 255
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aload 5 /* api */
            ldc "false"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 256
            ldc 42.0
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aload 5 /* api */
            ldc "42.0"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 258
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        12: .line 259
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aload 5 /* api */
            ldc "true"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        13: .line 260
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aload 5 /* api */
            ldc "false"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        14: .line 261
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 5 /* api */
            ldc "42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        15: .line 263
            aload 5 /* api */
            ldc "42garbage"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        16: .line 264
            aload 5 /* api */
            ldc "0x42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        17: .line 265
            aload 5 /* api */
            ldc "True"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        18: .line 266
            aload 5 /* api */
            ldc " 42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        19: .line 267
            aload 5 /* api */
            ldc "42 "
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.callUnsupported:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)V
        end local 5 // com.oracle.truffle.api.interop.TruffleObject api
        end local 1 // java.lang.Object consumer
        20: .line 247
            iinc 2 1
      StackMap locals:
      StackMap stack:
        21: iload 2
            iload 3
            if_icmplt 1
        22: .line 269
            return
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   23     0      this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            2   20     1  consumer  Ljava/lang/Object;
            3   20     5       api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testStringToPrimitiveLowPriority();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
         0: .line 273
            aload 0 /* this */
            getfield com.oracle.truffle.api.test.host.JavaStringCoercionTest.languageEnv:Lcom/oracle/truffle/api/TruffleLanguage$Env;
            new com.oracle.truffle.api.test.host.JavaStringCoercionTest$ObjectOrIntConsumer
            dup
            invokespecial com.oracle.truffle.api.test.host.JavaStringCoercionTest$ObjectOrIntConsumer.<init>:()V
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.asGuestValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.interop.TruffleObject
            astore 1 /* api */
        start local 1 // com.oracle.truffle.api.interop.TruffleObject api
         1: .line 275
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 1 /* api */
            ldc "42"
            invokestatic com.oracle.truffle.api.test.host.JavaStringCoercionTest.call:(Lcom/oracle/truffle/api/interop/TruffleObject;Ljava/lang/Object;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 276
            return
        end local 1 // com.oracle.truffle.api.interop.TruffleObject api
        end local 0 // com.oracle.truffle.api.test.host.JavaStringCoercionTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/api/test/host/JavaStringCoercionTest;
            1    3     1   api  Lcom/oracle/truffle/api/interop/TruffleObject;
    Exceptions:
      throws com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.Test()
}
SourceFile: "JavaStringCoercionTest.java"
NestMembers:
  com.oracle.truffle.api.test.host.JavaStringCoercionTest$1  com.oracle.truffle.api.test.host.JavaStringCoercionTest$BoxedPrimitiveConsumer  com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntConsumer  com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntegerConsumer  com.oracle.truffle.api.test.host.JavaStringCoercionTest$NotCoercibleObject  com.oracle.truffle.api.test.host.JavaStringCoercionTest$ObjectOrIntConsumer  com.oracle.truffle.api.test.host.JavaStringCoercionTest$PrimitiveConsumer  com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer1  com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2  com.oracle.truffle.api.test.host.JavaStringCoercionTest$UnboxableArrayObject
InnerClasses:
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  com.oracle.truffle.api.test.host.JavaStringCoercionTest$1
  public BoxedPrimitiveConsumer = com.oracle.truffle.api.test.host.JavaStringCoercionTest$BoxedPrimitiveConsumer of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public IntConsumer = com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntConsumer of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public IntegerConsumer = com.oracle.truffle.api.test.host.JavaStringCoercionTest$IntegerConsumer of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  final NotCoercibleObject = com.oracle.truffle.api.test.host.JavaStringCoercionTest$NotCoercibleObject of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public ObjectOrIntConsumer = com.oracle.truffle.api.test.host.JavaStringCoercionTest$ObjectOrIntConsumer of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public PrimitiveConsumer = com.oracle.truffle.api.test.host.JavaStringCoercionTest$PrimitiveConsumer of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public StringConsumer1 = com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer1 of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public StringConsumer2 = com.oracle.truffle.api.test.host.JavaStringCoercionTest$StringConsumer2 of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  final UnboxableArrayObject = com.oracle.truffle.api.test.host.JavaStringCoercionTest$UnboxableArrayObject of com.oracle.truffle.api.test.host.JavaStringCoercionTest
  public final Builder = org.graalvm.polyglot.Context$Builder of org.graalvm.polyglot.Context
  public final Builder = org.graalvm.polyglot.HostAccess$Builder of org.graalvm.polyglot.HostAccess