public class com.oracle.truffle.sl.test.SLJavaInteropTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.sl.test.SLJavaInteropTest
  super_class: java.lang.Object
{
  private org.graalvm.polyglot.Context context;
    descriptor: Lorg/graalvm/polyglot/Context;
    flags: (0x0002) ACC_PRIVATE

  private java.io.ByteArrayOutputStream os;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0002) ACC_PRIVATE

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

  public void create();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 68
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            putfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
         1: .line 69
            aload 0 /* this */
            iconst_0
            anewarray java.lang.String
            invokestatic org.graalvm.polyglot.Context.newBuilder:([Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            getstatic org.graalvm.polyglot.HostAccess.ALL:Lorg/graalvm/polyglot/HostAccess;
            invokevirtual org.graalvm.polyglot.Context$Builder.allowHostAccess:(Lorg/graalvm/polyglot/HostAccess;)Lorg/graalvm/polyglot/Context$Builder;
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
            putfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
         2: .line 70
            return
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
    RuntimeVisibleAnnotations: 
      org.junit.Before()

  public void dispose();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 74
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            invokevirtual org.graalvm.polyglot.Context.close:()V
         1: .line 75
            return
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
    RuntimeVisibleAnnotations: 
      org.junit.After()

  public void asFunction();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 79
            ldc "function test() {\n    println(\"Called!\");\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 80
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 81
            aload 0 /* this */
            ldc "test"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* main */
        start local 2 // org.graalvm.polyglot.Value main
         3: .line 82
            aload 2 /* main */
            ldc Ljava/lang/Runnable;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast java.lang.Runnable
            astore 3 /* runnable */
        start local 3 // java.lang.Runnable runnable
         4: .line 83
            aload 3 /* runnable */
            invokeinterface java.lang.Runnable.run:()V
         5: .line 85
            ldc "Called!\n"
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.toUnixString:(Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 86
            return
        end local 3 // java.lang.Runnable runnable
        end local 2 // org.graalvm.polyglot.Value main
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1    7     1  scriptText  Ljava/lang/String;
            3    7     2        main  Lorg/graalvm/polyglot/Value;
            4    7     3    runnable  Ljava/lang/Runnable;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private org.graalvm.polyglot.Value lookup(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
        start local 1 // java.lang.String symbol
         0: .line 89
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            aload 1 /* symbol */
            invokevirtual org.graalvm.polyglot.Value.getMember:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            areturn
        end local 1 // java.lang.String symbol
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            0    1     1  symbol  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      symbol  

  public void asFunctionWithArg();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 94
            ldc "function values(a, b) {\n  println(\"Called with \" + a + \" and \" + b);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 97
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 98
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 99
            aload 2 /* fn */
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInValues;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues
            astore 3 /* valuesIn */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues valuesIn
         4: .line 100
            aload 3 /* valuesIn */
            ldc "OK"
            ldc "Fine"
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues.call:(Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 102
            ldc "Called with OK and Fine\n"
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.toUnixString:(Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 103
            return
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues valuesIn
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1    7     1  scriptText  Ljava/lang/String;
            3    7     2          fn  Lorg/graalvm/polyglot/Value;
            4    7     3    valuesIn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInValues;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static void assertNumber(double, java.lang.Object);
    descriptor: (DLjava/lang/Object;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // double exp
        start local 2 // java.lang.Object real
         0: .line 106
            aload 2 /* real */
            instanceof java.lang.Number
            ifeq 3
         1: .line 107
            dload 0 /* exp */
            aload 2 /* real */
            checkcast java.lang.Number
            invokevirtual java.lang.Number.doubleValue:()D
            ldc 0.1
            invokestatic org.junit.Assert.assertEquals:(DDD)V
         2: .line 108
            goto 4
         3: .line 109
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "Expecting a number, but was "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* real */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.fail:(Ljava/lang/String;)V
         4: .line 111
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.Object real
        end local 0 // double exp
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0   exp  D
            0    5     2  real  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      exp   
      real  

  public void asFunctionWithArr();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 120
            ldc "function values(a, b) {\n  println(\"Called with \" + a[0] + a[1] + \" and \" + b);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 123
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 124
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 125
            aload 2 /* fn */
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInArray;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray
            astore 3 /* valuesIn */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray valuesIn
         4: .line 126
            aload 3 /* valuesIn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "OK"
            aastore
            dup
            iconst_1
            ldc "Fine"
            aastore
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray.call:([Ljava/lang/Object;)V
         5: .line 127
            ldc "Called with OKFine and NULL\n"
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.toUnixString:(Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 128
            return
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray valuesIn
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1    7     1  scriptText  Ljava/lang/String;
            3    7     2          fn  Lorg/graalvm/polyglot/Value;
            4    7     3    valuesIn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInArray;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void asFunctionWithVarArgs();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 132
            ldc "function values(a, b) {\n  println(\"Called with \" + a + \" and \" + b);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 135
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 136
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 137
            aload 2 /* fn */
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInVarArg;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg
            astore 3 /* valuesIn */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg valuesIn
         4: .line 139
            aload 3 /* valuesIn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "OK"
            aastore
            dup
            iconst_1
            ldc "Fine"
            aastore
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg.call:([Ljava/lang/Object;)V
         5: .line 140
            ldc "Called with OK and Fine\n"
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.toUnixString:(Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 141
            return
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg valuesIn
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1    7     1  scriptText  Ljava/lang/String;
            3    7     2          fn  Lorg/graalvm/polyglot/Value;
            4    7     3    valuesIn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInVarArg;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void asFunctionWithArgVarArgs();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 145
            ldc "function values(a, b, c) {\n  println(\"Called with \" + a + \" and \" + b + c);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 148
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 149
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 150
            aload 2 /* fn */
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInArgAndVarArg;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg
            astore 3 /* valuesIn */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg valuesIn
         4: .line 152
            aload 3 /* valuesIn */
            ldc "OK"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "Fine"
            aastore
            dup
            iconst_1
            ldc "Well"
            aastore
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg.call:(Ljava/lang/Object;[Ljava/lang/Object;)V
         5: .line 153
            ldc "Called with OK and FineWell\n"
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.os:Ljava/io/ByteArrayOutputStream;
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.toUnixString:(Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         6: .line 154
            return
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg valuesIn
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1    7     1  scriptText  Ljava/lang/String;
            3    7     2          fn  Lorg/graalvm/polyglot/Value;
            4    7     3    valuesIn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PassInArgAndVarArg;
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairs();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=8, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 158
            ldc "function values(sum, k, v) {\n  obj = new();\n  obj.key = k;\n  obj.value = v;\n  return sum.sum(obj);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 164
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 165
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 167
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* javaSum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
         4: .line 168
            aload 3 /* javaSum */
            astore 4 /* sum */
        start local 4 // java.lang.Object sum
         5: .line 169
            aload 2 /* fn */
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* sum */
            aastore
            dup
            iconst_1
            ldc "one"
            aastore
            dup
            iconst_2
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            invokevirtual org.graalvm.polyglot.Value.asHostObject:()Ljava/lang/Object;
            astore 5 /* ret1 */
        start local 5 // java.lang.Object ret1
         6: .line 170
            aload 2 /* fn */
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* sum */
            aastore
            dup
            iconst_1
            ldc "two"
            aastore
            dup
            iconst_2
            iconst_2
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc Ljava/lang/Object;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            astore 6 /* ret2 */
        start local 6 // java.lang.Object ret2
         7: .line 171
            aload 2 /* fn */
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* sum */
            aastore
            dup
            iconst_1
            ldc "three"
            aastore
            dup
            iconst_2
            iconst_3
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            astore 7 /* ret3 */
        start local 7 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum ret3
         8: .line 173
            ldc 6
            aload 3 /* javaSum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
         9: .line 174
            aload 5 /* ret1 */
            aload 6 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 175
            aload 7 /* ret3 */
            aload 6 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 176
            aload 4 /* sum */
            aload 6 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        12: .line 177
            return
        end local 7 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum ret3
        end local 6 // java.lang.Object ret2
        end local 5 // java.lang.Object ret1
        end local 4 // java.lang.Object sum
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   13     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   13     1  scriptText  Ljava/lang/String;
            3   13     2          fn  Lorg/graalvm/polyglot/Value;
            4   13     3     javaSum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            5   13     4         sum  Ljava/lang/Object;
            6   13     5        ret1  Ljava/lang/Object;
            7   13     6        ret2  Ljava/lang/Object;
            8   13     7        ret3  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairsFunctionalInterface();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 181
            ldc "function values(sum, k, v) {\n  obj = new();\n  obj.key = k;\n  obj.value = v;\n  return sum.sum(obj);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 187
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 188
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Values;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$Values
            astore 2 /* fn */
        start local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$Values fn
         3: .line 190
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* sum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
         4: .line 191
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "one"
            iconst_1
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$Values.values:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;I)Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            astore 4 /* ret1 */
        start local 4 // java.lang.Object ret1
         5: .line 192
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "two"
            iconst_2
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$Values.values:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;I)Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            astore 5 /* ret2 */
        start local 5 // java.lang.Object ret2
         6: .line 193
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "three"
            iconst_3
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$Values.values:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;I)Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            astore 6 /* ret3 */
        start local 6 // java.lang.Object ret3
         7: .line 195
            ldc 6
            aload 3 /* sum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
         8: .line 196
            aload 4 /* ret1 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 197
            aload 6 /* ret3 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 198
            aload 3 /* sum */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 199
            return
        end local 6 // java.lang.Object ret3
        end local 5 // java.lang.Object ret2
        end local 4 // java.lang.Object ret1
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
        end local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$Values fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   12     1  scriptText  Ljava/lang/String;
            3   12     2          fn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Values;
            4   12     3         sum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            5   12     4        ret1  Ljava/lang/Object;
            6   12     5        ret2  Ljava/lang/Object;
            7   12     6        ret3  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairsFunctionalRawInterface();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 203
            ldc "function values(sum, k, v) {\n  obj = new();\n  obj.key = k;\n  obj.value = v;\n  return sum.sum(obj);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 209
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 210
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$ValuesRaw;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw
            astore 2 /* fn */
        start local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw fn
         3: .line 212
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* sum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
         4: .line 213
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "one"
            iconst_1
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw.values:(Ljava/lang/Object;Ljava/lang/String;I)Ljava/lang/Object;
            astore 4 /* ret1 */
        start local 4 // java.lang.Object ret1
         5: .line 214
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "two"
            iconst_2
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw.values:(Ljava/lang/Object;Ljava/lang/String;I)Ljava/lang/Object;
            astore 5 /* ret2 */
        start local 5 // java.lang.Object ret2
         6: .line 215
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "three"
            iconst_3
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw.values:(Ljava/lang/Object;Ljava/lang/String;I)Ljava/lang/Object;
            astore 6 /* ret3 */
        start local 6 // java.lang.Object ret3
         7: .line 217
            ldc 6
            aload 3 /* sum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
         8: .line 218
            aload 4 /* ret1 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 219
            aload 6 /* ret3 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 220
            aload 3 /* sum */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 221
            return
        end local 6 // java.lang.Object ret3
        end local 5 // java.lang.Object ret2
        end local 4 // java.lang.Object ret1
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
        end local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   12     1  scriptText  Ljava/lang/String;
            3   12     2          fn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$ValuesRaw;
            4   12     3         sum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            5   12     4        ret1  Ljava/lang/Object;
            6   12     5        ret2  Ljava/lang/Object;
            7   12     6        ret3  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairsIndirect();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 225
            ldc "function values(sum, k, v) {\n  obj = new();\n  obj.key = k;\n  obj.value = v;\n  return sum.sum(obj);\n}\nfunction create() {\n  obj = new();\n  obj.doSum1 = values;\n  obj.doSum2 = values;\n  return obj;\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 237
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 238
            aload 0 /* this */
            ldc "create"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            iconst_0
            anewarray java.lang.Object
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc Lcom/oracle/truffle/sl/test/SLJavaInteropTest$DoSums;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums
            astore 2 /* fn */
        start local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums fn
         3: .line 240
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* sum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
         4: .line 241
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "one"
            iconst_1
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums.doSum1:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;I)Ljava/lang/Object;
            astore 4 /* ret1 */
        start local 4 // java.lang.Object ret1
         5: .line 242
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "two"
            iconst_2
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums.doSum2:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;Ljava/lang/Integer;)Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            astore 5 /* ret2 */
        start local 5 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum ret2
         6: .line 243
            aload 2 /* fn */
            aload 3 /* sum */
            ldc "three"
            iconst_3
            invokeinterface com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums.doSum1:(Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;Ljava/lang/String;I)Ljava/lang/Object;
            astore 6 /* ret3 */
        start local 6 // java.lang.Object ret3
         7: .line 245
            ldc 6
            aload 3 /* sum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
         8: .line 246
            aload 4 /* ret1 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 247
            aload 6 /* ret3 */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        10: .line 248
            aload 3 /* sum */
            aload 5 /* ret2 */
            invokestatic org.junit.Assert.assertSame:(Ljava/lang/Object;Ljava/lang/Object;)V
        11: .line 249
            return
        end local 6 // java.lang.Object ret3
        end local 5 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum ret2
        end local 4 // java.lang.Object ret1
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum sum
        end local 2 // com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   12     1  scriptText  Ljava/lang/String;
            3   12     2          fn  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$DoSums;
            4   12     3         sum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            5   12     4        ret1  Ljava/lang/Object;
            6   12     5        ret2  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            7   12     6        ret3  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairsInArray();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 253
            ldc "function values(sum, arr) {\n  sum.sumArray(arr);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 256
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 257
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 259
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* javaSum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
         4: .line 261
            iconst_3
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         5: .line 262
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "one"
            iconst_1
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            dup
            iconst_1
         6: .line 263
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "two"
            iconst_2
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            dup
            iconst_2
         7: .line 264
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "three"
            iconst_3
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
         8: .line 261
            astore 4 /* arr */
        start local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[] arr
         9: .line 266
            aload 2 /* fn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* javaSum */
            aastore
            dup
            iconst_1
            aload 4 /* arr */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        10: .line 267
            ldc 6
            aload 3 /* javaSum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        11: .line 268
            return
        end local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[] arr
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   12     1  scriptText  Ljava/lang/String;
            3   12     2          fn  Lorg/graalvm/polyglot/Value;
            4   12     3     javaSum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
            9   12     4         arr  [Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PairImpl;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairsInArrayOfArray();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=10, locals=5, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 272
            ldc "function values(sum, arr) {\n  sum.sumArrayArray(arr);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 275
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 276
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 278
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* javaSum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
         4: .line 280
            iconst_2
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[]
            dup
            iconst_0
         5: .line 281
            iconst_1
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         6: .line 282
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "one"
            iconst_1
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            aastore
            dup
            iconst_1
         7: .line 284
            iconst_2
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         8: .line 285
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "two"
            iconst_2
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            dup
            iconst_1
         9: .line 286
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "three"
            iconst_3
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            aastore
        10: .line 280
            astore 4 /* arr */
        start local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[][] arr
        11: .line 289
            aload 2 /* fn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* javaSum */
            aastore
            dup
            iconst_1
            aload 4 /* arr */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        12: .line 290
            ldc 6
            aload 3 /* javaSum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        13: .line 291
            return
        end local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[][] arr
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   14     1  scriptText  Ljava/lang/String;
            3   14     2          fn  Lorg/graalvm/polyglot/Value;
            4   14     3     javaSum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
           11   14     4         arr  [[Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PairImpl;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumMapInArrayOfArray();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=10, locals=5, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 295
            ldc "function values(sum, arr) {\n  sum.sumArrayMap(arr);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 298
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 299
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 301
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* javaSum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
         4: .line 303
            iconst_2
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[]
            dup
            iconst_0
         5: .line 304
            iconst_1
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         6: .line 305
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "one"
            iconst_1
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            aastore
            dup
            iconst_1
         7: .line 307
            iconst_2
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         8: .line 308
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "two"
            iconst_2
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            dup
            iconst_1
         9: .line 309
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "three"
            iconst_3
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            aastore
        10: .line 303
            astore 4 /* arr */
        start local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[][] arr
        11: .line 312
            aload 2 /* fn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* javaSum */
            aastore
            dup
            iconst_1
            aload 4 /* arr */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        12: .line 313
            ldc 6
            aload 3 /* javaSum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        13: .line 314
            return
        end local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl[][] arr
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   14     1  scriptText  Ljava/lang/String;
            3   14     2          fn  Lorg/graalvm/polyglot/Value;
            4   14     3     javaSum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
           11   14     4         arr  [[Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PairImpl;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void sumPairInMapOfArray();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=10, locals=5, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 318
            ldc "function values(sum, arr) {\n  sum.sumMapArray(arr);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 321
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 322
            aload 0 /* this */
            ldc "values"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* fn */
        start local 2 // org.graalvm.polyglot.Value fn
         3: .line 324
            new com.oracle.truffle.sl.test.SLJavaInteropTest$Sum
            dup
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.<init>:()V
            astore 3 /* javaSum */
        start local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
         4: .line 326
            new com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl
            dup
         5: .line 327
            iconst_1
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         6: .line 328
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "one"
            iconst_1
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
         7: .line 330
            iconst_2
            anewarray com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            iconst_0
         8: .line 331
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "two"
            iconst_2
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
            dup
            iconst_1
         9: .line 332
            new com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl
            dup
            ldc "three"
            iconst_3
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl.<init>:(Ljava/lang/String;I)V
            aastore
        10: .line 326
            invokespecial com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl.<init>:([Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PairImpl;[Lcom/oracle/truffle/sl/test/SLJavaInteropTest$PairImpl;)V
            astore 4 /* groups */
        start local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl groups
        11: .line 334
            aload 2 /* fn */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* javaSum */
            aastore
            dup
            iconst_1
            aload 4 /* groups */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        12: .line 335
            ldc 6
            aload 3 /* javaSum */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest$Sum.sum:I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        13: .line 336
            return
        end local 4 // com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl groups
        end local 3 // com.oracle.truffle.sl.test.SLJavaInteropTest$Sum javaSum
        end local 2 // org.graalvm.polyglot.Value fn
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   14     1  scriptText  Ljava/lang/String;
            3   14     2          fn  Lorg/graalvm/polyglot/Value;
            4   14     3     javaSum  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$Sum;
           11   14     4      groups  Lcom/oracle/truffle/sl/test/SLJavaInteropTest$TwoPairsImpl;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void accessJavaMap();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=1
        start local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
         0: .line 340
            ldc "function write(map, key, value) {\n  map.put(key, value);\n}\nfunction read(map, key) {\n  return map.get(key);\n}\n"
            astore 1 /* scriptText */
        start local 1 // java.lang.String scriptText
         1: .line 346
            aload 0 /* this */
            getfield com.oracle.truffle.sl.test.SLJavaInteropTest.context:Lorg/graalvm/polyglot/Context;
            ldc "sl"
            aload 1 /* scriptText */
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 347
            aload 0 /* this */
            ldc "read"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* read */
        start local 2 // org.graalvm.polyglot.Value read
         3: .line 348
            aload 0 /* this */
            ldc "write"
            invokevirtual com.oracle.truffle.sl.test.SLJavaInteropTest.lookup:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 3 /* write */
        start local 3 // org.graalvm.polyglot.Value write
         4: .line 350
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 4 /* map */
        start local 4 // java.util.Map map
         5: .line 351
            aload 4 /* map */
            ldc "a"
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 353
            aload 2 /* read */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* map */
            aastore
            dup
            iconst_1
            ldc "a"
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc Ljava/lang/Object;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            astore 5 /* b */
        start local 5 // java.lang.Object b
         7: .line 354
            ldc 42.0
            aload 5 /* b */
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.assertNumber:(DLjava/lang/Object;)V
         8: .line 356
            aload 3 /* write */
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* map */
            aastore
            dup
            iconst_1
            ldc "a"
            aastore
            dup
            iconst_2
            bipush 33
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
         9: .line 358
            aload 2 /* read */
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* map */
            aastore
            dup
            iconst_1
            ldc "a"
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc Ljava/lang/Object;
            invokevirtual org.graalvm.polyglot.Value.as:(Ljava/lang/Class;)Ljava/lang/Object;
            astore 6 /* c */
        start local 6 // java.lang.Object c
        10: .line 359
            ldc 33.0
            aload 6 /* c */
            invokestatic com.oracle.truffle.sl.test.SLJavaInteropTest.assertNumber:(DLjava/lang/Object;)V
        11: .line 360
            return
        end local 6 // java.lang.Object c
        end local 5 // java.lang.Object b
        end local 4 // java.util.Map map
        end local 3 // org.graalvm.polyglot.Value write
        end local 2 // org.graalvm.polyglot.Value read
        end local 1 // java.lang.String scriptText
        end local 0 // com.oracle.truffle.sl.test.SLJavaInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lcom/oracle/truffle/sl/test/SLJavaInteropTest;
            1   12     1  scriptText  Ljava/lang/String;
            3   12     2        read  Lorg/graalvm/polyglot/Value;
            4   12     3       write  Lorg/graalvm/polyglot/Value;
            5   12     4         map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
            7   12     5           b  Ljava/lang/Object;
           10   12     6           c  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  static java.lang.String toUnixString(java.io.ByteArrayOutputStream);
    descriptor: (Ljava/io/ByteArrayOutputStream;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.io.ByteArrayOutputStream stream
         0: .line 367
            aload 0 /* stream */
            ldc "UTF-8"
            invokevirtual java.io.ByteArrayOutputStream.toString:(Ljava/lang/String;)Ljava/lang/String;
            ldc "\r\n"
            ldc "\n"
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
         1: areturn
         2: .line 368
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 1 /* e */
        start local 1 // java.io.UnsupportedEncodingException e
         3: .line 369
            new java.lang.IllegalStateException
            dup
            aload 1 /* e */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.io.UnsupportedEncodingException e
        end local 0 // java.io.ByteArrayOutputStream stream
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0  stream  Ljava/io/ByteArrayOutputStream;
            3    4     1       e  Ljava/io/UnsupportedEncodingException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.UnsupportedEncodingException
    MethodParameters:
        Name  Flags
      stream  
}
SourceFile: "SLJavaInteropTest.java"
NestMembers:
  com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums  com.oracle.truffle.sl.test.SLJavaInteropTest$Pair  com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl  com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg  com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray  com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues  com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg  com.oracle.truffle.sl.test.SLJavaInteropTest$Sum  com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl  com.oracle.truffle.sl.test.SLJavaInteropTest$Values  com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw
InnerClasses:
  public abstract DoSums = com.oracle.truffle.sl.test.SLJavaInteropTest$DoSums of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract Pair = com.oracle.truffle.sl.test.SLJavaInteropTest$Pair of com.oracle.truffle.sl.test.SLJavaInteropTest
  public final PairImpl = com.oracle.truffle.sl.test.SLJavaInteropTest$PairImpl of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract PassInArgAndVarArg = com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArgAndVarArg of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract PassInArray = com.oracle.truffle.sl.test.SLJavaInteropTest$PassInArray of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract PassInValues = com.oracle.truffle.sl.test.SLJavaInteropTest$PassInValues of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract PassInVarArg = com.oracle.truffle.sl.test.SLJavaInteropTest$PassInVarArg of com.oracle.truffle.sl.test.SLJavaInteropTest
  public Sum = com.oracle.truffle.sl.test.SLJavaInteropTest$Sum of com.oracle.truffle.sl.test.SLJavaInteropTest
  public final TwoPairsImpl = com.oracle.truffle.sl.test.SLJavaInteropTest$TwoPairsImpl of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract Values = com.oracle.truffle.sl.test.SLJavaInteropTest$Values of com.oracle.truffle.sl.test.SLJavaInteropTest
  public abstract ValuesRaw = com.oracle.truffle.sl.test.SLJavaInteropTest$ValuesRaw of com.oracle.truffle.sl.test.SLJavaInteropTest
  public final Builder = org.graalvm.polyglot.Context$Builder of org.graalvm.polyglot.Context