public class com.oracle.truffle.js.test.interop.AsyncInteropTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.js.test.interop.AsyncInteropTest
  super_class: java.lang.Object
{
  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 65
            ldc Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.truffle.js.test.interop.AsyncInteropTest.$assertionsDisabled:Z
            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.js.test.interop.AsyncInteropTest this
         0: .line 65
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;

  public void testJavaThenable();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=8, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 72
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 73
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 74
            ldc "false"
         4: .line 73
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 74
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 73
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 75
            invokedynamic then()Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$0(Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V (6)
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
            astore 5 /* then2 */
        start local 5 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable then2
         8: .line 76
            aload 5 /* then2 */
            invokedynamic then(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;)Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$1(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V (6)
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
            astore 6 /* then1 */
        start local 6 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable then1
         9: .line 77
            aload 4 /* context */
            ldc "js"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc "myJavaThenable"
            aload 6 /* then1 */
            invokevirtual org.graalvm.polyglot.Value.putMember:(Ljava/lang/String;Ljava/lang/Object;)V
        10: .line 78
            aload 4 /* context */
            ldc "js"
            ldc "(async function () {  let x = await myJavaThenable;  console.log(x);})"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 7 /* asyncFn */
        start local 7 // org.graalvm.polyglot.Value asyncFn
        11: .line 83
            aload 7 /* asyncFn */
            iconst_0
            anewarray java.lang.Object
            invokevirtual org.graalvm.polyglot.Value.executeVoid:([Ljava/lang/Object;)V
        end local 7 // org.graalvm.polyglot.Value asyncFn
        end local 6 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable then1
        end local 5 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable then2
        12: .line 84
            aload 4 /* context */
            ifnull 18
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 18
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        13: astore 2
            aload 4 /* context */
            ifnull 14
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        14: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: astore 3
            aload 2
            ifnonnull 16
            aload 3
            astore 2
            goto 17
      StackMap locals:
      StackMap stack:
        16: aload 2
            aload 3
            if_acmpeq 17
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        17: aload 2
            athrow
        18: .line 85
      StackMap locals:
      StackMap stack:
            ldc "42\n"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        19: .line 86
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   20     0     this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   20     1      out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   14     4  context  Lorg/graalvm/polyglot/Context;
            8   12     5    then2  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;
            9   12     6    then1  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;
           11   12     7  asyncFn  Lorg/graalvm/polyglot/Value;
      Exception table:
        from    to  target  type
           7    12      13  any
           2    15      15  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testJavaExecutor();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 94
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 95
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 96
            ldc "false"
         4: .line 95
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 96
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 95
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 97
            invokedynamic onPromiseCreation()Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Executable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$2(Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V (6)
                  (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
            astore 5 /* javaExecutable */
        start local 5 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Executable javaExecutable
         8: .line 98
            aload 4 /* context */
            ldc "js"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc "javaExecutable"
            aload 5 /* javaExecutable */
            invokevirtual org.graalvm.polyglot.Value.putMember:(Ljava/lang/String;Ljava/lang/Object;)V
         9: .line 99
            aload 4 /* context */
            ldc "js"
            ldc "new Promise(javaExecutable).then(x => console.log(x));"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 6 /* asyncFn */
        start local 6 // org.graalvm.polyglot.Value asyncFn
        10: .line 100
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$3(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 7 /* javaThen */
        start local 7 // java.util.function.Consumer javaThen
        11: .line 101
            aload 6 /* asyncFn */
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* javaThen */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        end local 7 // java.util.function.Consumer javaThen
        end local 6 // org.graalvm.polyglot.Value asyncFn
        end local 5 // com.oracle.truffle.js.test.interop.AsyncInteropTest$Executable javaExecutable
        12: .line 102
            aload 4 /* context */
            ifnull 18
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 18
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        13: astore 2
            aload 4 /* context */
            ifnull 14
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        14: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: astore 3
            aload 2
            ifnonnull 16
            aload 3
            astore 2
            goto 17
      StackMap locals:
      StackMap stack:
        16: aload 2
            aload 3
            if_acmpeq 17
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        17: aload 2
            athrow
        18: .line 103
      StackMap locals:
      StackMap stack:
            ldc "42\nAll done :)"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        19: .line 104
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   20     0            this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   20     1             out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   14     4         context  Lorg/graalvm/polyglot/Context;
            8   12     5  javaExecutable  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Executable;
           10   12     6         asyncFn  Lorg/graalvm/polyglot/Value;
           11   12     7        javaThen  Ljava/util/function/Consumer<Ljava/lang/Object;>;
      Exception table:
        from    to  target  type
           7    12      13  any
           2    15      15  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testPromiseJavaThen();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=7, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 111
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 112
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 113
            ldc "false"
         4: .line 112
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 113
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 112
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 114
            aload 4 /* context */
            ldc "js"
            ldc "Promise.resolve(42);"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 5 /* jsPromise */
        start local 5 // org.graalvm.polyglot.Value jsPromise
         8: .line 115
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$4(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 6 /* javaThen */
        start local 6 // java.util.function.Consumer javaThen
         9: .line 116
            aload 5 /* jsPromise */
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* javaThen */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        end local 6 // java.util.function.Consumer javaThen
        end local 5 // org.graalvm.polyglot.Value jsPromise
        10: .line 117
            aload 4 /* context */
            ifnull 16
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 16
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        11: astore 2
            aload 4 /* context */
            ifnull 12
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        12: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: astore 3
            aload 2
            ifnonnull 14
            aload 3
            astore 2
            goto 15
      StackMap locals:
      StackMap stack:
        14: aload 2
            aload 3
            if_acmpeq 15
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        15: aload 2
            athrow
        16: .line 118
      StackMap locals:
      StackMap stack:
            ldc "Resolved from JavaScript: 42"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        17: .line 119
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   18     0       this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   18     1        out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   12     4    context  Lorg/graalvm/polyglot/Context;
            8   10     5  jsPromise  Lorg/graalvm/polyglot/Value;
            9   10     6   javaThen  Ljava/util/function/Consumer<Ljava/lang/Object;>;
      Exception table:
        from    to  target  type
           7    10      11  any
           2    13      13  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testPromiseJavaThenAsync();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 126
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 127
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 128
            ldc "false"
         4: .line 127
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 128
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 127
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 129
            aload 4 /* context */
            ldc "js"
            ldc "(async function () {  return await 42;})"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 5 /* asyncFn */
        start local 5 // org.graalvm.polyglot.Value asyncFn
         8: .line 133
            aload 5 /* asyncFn */
            iconst_0
            anewarray java.lang.Object
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            astore 6 /* jsPromise */
        start local 6 // org.graalvm.polyglot.Value jsPromise
         9: .line 134
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$5(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 7 /* then */
        start local 7 // java.util.function.Consumer then
        10: .line 135
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$6(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 8 /* catchy */
        start local 8 // java.util.function.Consumer catchy
        11: .line 136
            aload 6 /* jsPromise */
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* then */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc "catch"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* catchy */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        end local 8 // java.util.function.Consumer catchy
        end local 7 // java.util.function.Consumer then
        end local 6 // org.graalvm.polyglot.Value jsPromise
        end local 5 // org.graalvm.polyglot.Value asyncFn
        12: .line 137
            aload 4 /* context */
            ifnull 18
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 18
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        13: astore 2
            aload 4 /* context */
            ifnull 14
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        14: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: astore 3
            aload 2
            ifnonnull 16
            aload 3
            astore 2
            goto 17
      StackMap locals:
      StackMap stack:
        16: aload 2
            aload 3
            if_acmpeq 17
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        17: aload 2
            athrow
        18: .line 138
      StackMap locals:
      StackMap stack:
            ldc "Resolved from Java: 42"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        19: .line 139
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   20     0       this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   20     1        out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   14     4    context  Lorg/graalvm/polyglot/Context;
            8   12     5    asyncFn  Lorg/graalvm/polyglot/Value;
            9   12     6  jsPromise  Lorg/graalvm/polyglot/Value;
           10   12     7       then  Ljava/util/function/Consumer<Ljava/lang/Object;>;
           11   12     8     catchy  Ljava/util/function/Consumer<Ljava/lang/Object;>;
      Exception table:
        from    to  target  type
           7    12      13  any
           2    15      15  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testPromiseJavaCatch();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 146
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 147
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 148
            ldc "false"
         4: .line 147
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 148
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 147
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 149
            aload 4 /* context */
            ldc "js"
            ldc "(async function () {  throw 42;})"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 5 /* asyncFn */
        start local 5 // org.graalvm.polyglot.Value asyncFn
         8: .line 153
            aload 5 /* asyncFn */
            iconst_0
            anewarray java.lang.Object
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            astore 6 /* promise */
        start local 6 // org.graalvm.polyglot.Value promise
         9: .line 154
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$7(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 7 /* then */
        start local 7 // java.util.function.Consumer then
        10: .line 155
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$8(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 8 /* catchy */
        start local 8 // java.util.function.Consumer catchy
        11: .line 156
            aload 6 /* promise */
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* then */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc "catch"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* catchy */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        end local 8 // java.util.function.Consumer catchy
        end local 7 // java.util.function.Consumer then
        end local 6 // org.graalvm.polyglot.Value promise
        end local 5 // org.graalvm.polyglot.Value asyncFn
        12: .line 157
            aload 4 /* context */
            ifnull 18
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 18
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        13: astore 2
            aload 4 /* context */
            ifnull 14
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        14: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: astore 3
            aload 2
            ifnonnull 16
            aload 3
            astore 2
            goto 17
      StackMap locals:
      StackMap stack:
        16: aload 2
            aload 3
            if_acmpeq 17
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        17: aload 2
            athrow
        18: .line 158
      StackMap locals:
      StackMap stack:
            ldc "Promise failed: 42"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        19: .line 159
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   20     0     this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   20     1      out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   14     4  context  Lorg/graalvm/polyglot/Context;
            8   12     5  asyncFn  Lorg/graalvm/polyglot/Value;
            9   12     6  promise  Lorg/graalvm/polyglot/Value;
           10   12     7     then  Ljava/util/function/Consumer<Ljava/lang/Object;>;
           11   12     8   catchy  Ljava/util/function/Consumer<Ljava/lang/Object;>;
      Exception table:
        from    to  target  type
           7    12      13  any
           2    15      15  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testJavaCompletableFutureToPromise();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=8, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 166
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 167
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 168
            ldc "false"
         4: .line 167
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 168
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 167
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 169
            new java.util.concurrent.CompletableFuture
            dup
            invokespecial java.util.concurrent.CompletableFuture.<init>:()V
            astore 5 /* javaFuture */
        start local 5 // java.util.concurrent.CompletableFuture javaFuture
         8: .line 171
            aload 4 /* context */
            aload 5 /* javaFuture */
            invokestatic com.oracle.truffle.js.test.interop.AsyncInteropTest.wrapPromise:(Lorg/graalvm/polyglot/Context;Ljava/util/concurrent/CompletableFuture;)Lorg/graalvm/polyglot/Value;
            astore 6 /* jsPromise */
        start local 6 // org.graalvm.polyglot.Value jsPromise
         9: .line 172
            aload 4 /* context */
            ldc "js"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc "myJsPromise"
            aload 6 /* jsPromise */
            invokevirtual org.graalvm.polyglot.Value.putMember:(Ljava/lang/String;Ljava/lang/Object;)V
        10: .line 173
            aload 4 /* context */
            ldc "js"
            ldc "(async function () {  console.log('pausing...');  var foo = await myJsPromise;  console.log('resumed with value ' + foo);})"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 7 /* asyncFn */
        start local 7 // org.graalvm.polyglot.Value asyncFn
        11: .line 179
            ldc ""
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        12: .line 180
            aload 7 /* asyncFn */
            iconst_0
            anewarray java.lang.Object
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        13: .line 181
            ldc "pausing...\n"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        14: .line 182
            aload 5 /* javaFuture */
            ldc "from Java"
            invokevirtual java.util.concurrent.CompletableFuture.complete:(Ljava/lang/Object;)Z
            pop
        15: .line 183
            ldc "pausing...\nresumed with value from Java\n"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 7 // org.graalvm.polyglot.Value asyncFn
        end local 6 // org.graalvm.polyglot.Value jsPromise
        end local 5 // java.util.concurrent.CompletableFuture javaFuture
        16: .line 184
            aload 4 /* context */
            ifnull 22
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 22
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        17: astore 2
            aload 4 /* context */
            ifnull 18
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        18: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        19: astore 3
            aload 2
            ifnonnull 20
            aload 3
            astore 2
            goto 21
      StackMap locals:
      StackMap stack:
        20: aload 2
            aload 3
            if_acmpeq 21
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        21: aload 2
            athrow
        22: .line 185
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   23     0        this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   23     1         out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   18     4     context  Lorg/graalvm/polyglot/Context;
            8   16     5  javaFuture  Ljava/util/concurrent/CompletableFuture<Ljava/lang/String;>;
            9   16     6   jsPromise  Lorg/graalvm/polyglot/Value;
           11   16     7     asyncFn  Lorg/graalvm/polyglot/Value;
      Exception table:
        from    to  target  type
           7    16      17  any
           2    19      19  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testChainReactions();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 192
            new com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput
            dup
            invokespecial com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.<init>:()V
            astore 1 /* out */
        start local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
         1: .line 193
            aconst_null
            astore 2
            aconst_null
            astore 3
         2: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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 1 /* out */
            invokevirtual org.graalvm.polyglot.Context$Builder.out:(Ljava/io/OutputStream;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         3: .line 194
            ldc "false"
         4: .line 193
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         5: .line 194
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         6: .line 193
            astore 4 /* context */
        start local 4 // org.graalvm.polyglot.Context context
         7: .line 195
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$9(Ljava/lang/Integer;)Ljava/lang/Integer; (6)
                  (Ljava/lang/Integer;)Ljava/lang/Integer;
            astore 5 /* incJava */
        start local 5 // java.util.function.Function incJava
         8: .line 196
            aload 1 /* out */
            invokedynamic accept(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$10(Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V (6)
                  (Ljava/lang/Object;)V
            astore 6 /* print */
        start local 6 // java.util.function.Consumer print
         9: .line 197
            aload 4 /* context */
            ldc "js"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            ldc "incJava"
            aload 5 /* incJava */
            invokevirtual org.graalvm.polyglot.Value.putMember:(Ljava/lang/String;Ljava/lang/Object;)V
        10: .line 198
            aload 4 /* context */
            ldc "js"
            ldc "var incJs = (x) => x + 1;async function foo(val) {  return val + 1;};foo(41).then(incJava).then(incJs);"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 7 /* jsPromise */
        start local 7 // org.graalvm.polyglot.Value jsPromise
        11: .line 203
            ldc ""
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        12: .line 204
            aload 7 /* jsPromise */
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* incJava */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            ldc "then"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* print */
            aastore
            invokevirtual org.graalvm.polyglot.Value.invokeMember:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
        13: .line 205
            ldc "Final result: 45"
            aload 1 /* out */
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.toString:()Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 7 // org.graalvm.polyglot.Value jsPromise
        end local 6 // java.util.function.Consumer print
        end local 5 // java.util.function.Function incJava
        14: .line 206
            aload 4 /* context */
            ifnull 20
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 20
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        15: astore 2
            aload 4 /* context */
            ifnull 16
            aload 4 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 4 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        16: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        17: astore 3
            aload 2
            ifnonnull 18
            aload 3
            astore 2
            goto 19
      StackMap locals:
      StackMap stack:
        18: aload 2
            aload 3
            if_acmpeq 19
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        19: aload 2
            athrow
        20: .line 207
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput out
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   21     0       this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            1   21     1        out  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;
            7   16     4    context  Lorg/graalvm/polyglot/Context;
            8   14     5    incJava  Ljava/util/function/Function<Ljava/lang/Integer;Ljava/lang/Integer;>;
            9   14     6      print  Ljava/util/function/Consumer<Ljava/lang/Object;>;
           11   14     7  jsPromise  Lorg/graalvm/polyglot/Value;
      Exception table:
        from    to  target  type
           7    14      15  any
           2    17      17  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  public void testChainCompletableFuturePromises();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=7, args_size=1
        start local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
         0: .line 214
            aconst_null
            astore 1
            aconst_null
            astore 2
         1: iconst_0
            anewarray java.lang.String
            invokestatic com.oracle.truffle.js.test.JSTest.newContextBuilder:([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;
            ldc "js.console"
            ldc "true"
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            ldc "js.interop-complete-promises"
         2: .line 215
            ldc "false"
         3: .line 214
            invokevirtual org.graalvm.polyglot.Context$Builder.option:(Ljava/lang/String;Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
         4: .line 215
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
         5: .line 214
            astore 3 /* context */
        start local 3 // org.graalvm.polyglot.Context context
         6: .line 216
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$11()Ljava/lang/String; (6)
                  ()Ljava/lang/String;
            invokestatic java.util.concurrent.CompletableFuture.supplyAsync:(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;
            astore 4 /* javaFuture */
        start local 4 // java.util.concurrent.CompletableFuture javaFuture
         7: .line 224
            aload 3 /* context */
            ldc "js"
            ldc "(function jsFunction(v) { return v + 'JS'; })"
            invokevirtual org.graalvm.polyglot.Context.eval:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Value;
            astore 5 /* jsFunction */
        start local 5 // org.graalvm.polyglot.Value jsFunction
         8: .line 225
            aload 4 /* javaFuture */
            aload 5 /* jsFunction */
            invokestatic com.oracle.truffle.js.test.interop.AsyncInteropTest.asChainable:(Lorg/graalvm/polyglot/Value;)Ljava/util/function/Function;
            invokevirtual java.util.concurrent.CompletableFuture.thenCompose:(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;
            invokevirtual java.util.concurrent.CompletableFuture.get:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* result */
        start local 6 // java.lang.String result
         9: .line 226
            ldc "JavaJS"
            aload 6 /* result */
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 6 // java.lang.String result
        end local 5 // org.graalvm.polyglot.Value jsFunction
        end local 4 // java.util.concurrent.CompletableFuture javaFuture
        10: .line 227
            aload 3 /* context */
            ifnull 16
            aload 3 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
            goto 16
      StackMap locals: com.oracle.truffle.js.test.interop.AsyncInteropTest java.lang.Throwable java.lang.Throwable org.graalvm.polyglot.Context
      StackMap stack: java.lang.Throwable
        11: astore 1
            aload 3 /* context */
            ifnull 12
            aload 3 /* context */
            invokevirtual org.graalvm.polyglot.Context.close:()V
        end local 3 // org.graalvm.polyglot.Context context
      StackMap locals:
      StackMap stack:
        12: aload 1
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: astore 2
            aload 1
            ifnonnull 14
            aload 2
            astore 1
            goto 15
      StackMap locals:
      StackMap stack:
        14: aload 1
            aload 2
            if_acmpeq 15
            aload 1
            aload 2
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        15: aload 1
            athrow
        16: .line 228
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.truffle.js.test.interop.AsyncInteropTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   17     0        this  Lcom/oracle/truffle/js/test/interop/AsyncInteropTest;
            6   12     3     context  Lorg/graalvm/polyglot/Context;
            7   10     4  javaFuture  Ljava/util/concurrent/CompletableFuture<Ljava/lang/String;>;
            8   10     5  jsFunction  Lorg/graalvm/polyglot/Value;
            9   10     6      result  Ljava/lang/String;
      Exception table:
        from    to  target  type
           6    10      11  any
           1    13      13  any
    Exceptions:
      throws java.util.concurrent.ExecutionException, java.lang.InterruptedException
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static java.util.function.Function<java.lang.String, java.util.concurrent.CompletionStage<java.lang.String>> asChainable(org.graalvm.polyglot.Value);
    descriptor: (Lorg/graalvm/polyglot/Value;)Ljava/util/function/Function;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.graalvm.polyglot.Value jsFunction
         0: .line 231
            getstatic com.oracle.truffle.js.test.interop.AsyncInteropTest.$assertionsDisabled:Z
            ifne 1
            aload 0 /* jsFunction */
            invokevirtual org.graalvm.polyglot.Value.canExecute:()Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 232
      StackMap locals:
      StackMap stack:
            aload 0 /* jsFunction */
            invokedynamic apply(Lorg/graalvm/polyglot/Value;)Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$12(Lorg/graalvm/polyglot/Value;Ljava/lang/String;)Ljava/util/concurrent/CompletionStage; (6)
                  (Ljava/lang/String;)Ljava/util/concurrent/CompletionStage;
            areturn
        end local 0 // org.graalvm.polyglot.Value jsFunction
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0  jsFunction  Lorg/graalvm/polyglot/Value;
    Signature: (Lorg/graalvm/polyglot/Value;)Ljava/util/function/Function<Ljava/lang/String;Ljava/util/concurrent/CompletionStage<Ljava/lang/String;>;>;
    MethodParameters:
            Name  Flags
      jsFunction  

  private static org.graalvm.polyglot.Value wrapPromise(org.graalvm.polyglot.Context, java.util.concurrent.CompletableFuture<java.lang.String>);
    descriptor: (Lorg/graalvm/polyglot/Context;Ljava/util/concurrent/CompletableFuture;)Lorg/graalvm/polyglot/Value;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.graalvm.polyglot.Context context
        start local 1 // java.util.concurrent.CompletableFuture javaFuture
         0: .line 244
            aload 0 /* context */
            ldc "js"
            invokevirtual org.graalvm.polyglot.Context.getBindings:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 2 /* global */
        start local 2 // org.graalvm.polyglot.Value global
         1: .line 245
            aload 2 /* global */
            ldc "Promise"
            invokevirtual org.graalvm.polyglot.Value.getMember:(Ljava/lang/String;)Lorg/graalvm/polyglot/Value;
            astore 3 /* promiseConstructor */
        start local 3 // org.graalvm.polyglot.Value promiseConstructor
         2: .line 246
            aload 3 /* promiseConstructor */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* javaFuture */
            invokedynamic execute(Ljava/util/concurrent/CompletableFuture;)Lorg/graalvm/polyglot/proxy/ProxyExecutable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ([Lorg/graalvm/polyglot/Value;)Ljava/lang/Object;
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$13(Ljava/util/concurrent/CompletableFuture;[Lorg/graalvm/polyglot/Value;)Ljava/lang/Object; (6)
                  ([Lorg/graalvm/polyglot/Value;)Ljava/lang/Object;
            aastore
            invokevirtual org.graalvm.polyglot.Value.newInstance:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            areturn
        end local 3 // org.graalvm.polyglot.Value promiseConstructor
        end local 2 // org.graalvm.polyglot.Value global
        end local 1 // java.util.concurrent.CompletableFuture javaFuture
        end local 0 // org.graalvm.polyglot.Context context
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    3     0             context  Lorg/graalvm/polyglot/Context;
            0    3     1          javaFuture  Ljava/util/concurrent/CompletableFuture<Ljava/lang/String;>;
            1    3     2              global  Lorg/graalvm/polyglot/Value;
            2    3     3  promiseConstructor  Lorg/graalvm/polyglot/Value;
    Signature: (Lorg/graalvm/polyglot/Context;Ljava/util/concurrent/CompletableFuture<Ljava/lang/String;>;)Lorg/graalvm/polyglot/Value;
    MethodParameters:
            Name  Flags
      context     
      javaFuture  

  private static void lambda$0(org.graalvm.polyglot.Value, org.graalvm.polyglot.Value);
    descriptor: (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.graalvm.polyglot.Value resolve
        start local 1 // org.graalvm.polyglot.Value reject
         0: .line 75
            aload 0 /* resolve */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.executeVoid:([Ljava/lang/Object;)V
            return
        end local 1 // org.graalvm.polyglot.Value reject
        end local 0 // org.graalvm.polyglot.Value resolve
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  resolve  Lorg/graalvm/polyglot/Value;
            0    1     1   reject  Lorg/graalvm/polyglot/Value;

  private static void lambda$1(com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable, org.graalvm.polyglot.Value, org.graalvm.polyglot.Value);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$Thenable;Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=5, locals=3, args_size=3
        start local 1 // org.graalvm.polyglot.Value resolve
        start local 2 // org.graalvm.polyglot.Value reject
         0: .line 76
            aload 1 /* resolve */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0
            aastore
            invokevirtual org.graalvm.polyglot.Value.executeVoid:([Ljava/lang/Object;)V
            return
        end local 2 // org.graalvm.polyglot.Value reject
        end local 1 // org.graalvm.polyglot.Value resolve
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     1  resolve  Lorg/graalvm/polyglot/Value;
            0    1     2   reject  Lorg/graalvm/polyglot/Value;

  private static void lambda$2(org.graalvm.polyglot.Value, org.graalvm.polyglot.Value);
    descriptor: (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.graalvm.polyglot.Value resolve
        start local 1 // org.graalvm.polyglot.Value reject
         0: .line 97
            aload 0 /* resolve */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            bipush 42
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            return
        end local 1 // org.graalvm.polyglot.Value reject
        end local 0 // org.graalvm.polyglot.Value resolve
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  resolve  Lorg/graalvm/polyglot/Value;
            0    1     1   reject  Lorg/graalvm/polyglot/Value;

  private static void lambda$3(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
        start local 1 // java.lang.Object v
         0: .line 100
            aload 0
            ldc "All done :)"
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object v
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     1     v  Ljava/lang/Object;

  private static void lambda$4(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 115
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Resolved from JavaScript: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static void lambda$5(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 134
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Resolved from Java: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static void lambda$6(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 135
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Promise failed!"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static void lambda$7(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 154
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Resolved from Java: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static void lambda$8(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 155
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Promise failed: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static java.lang.Integer lambda$9(java.lang.Integer);
    descriptor: (Ljava/lang/Integer;)Ljava/lang/Integer;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Integer i
         0: .line 195
            aload 0 /* i */
            invokevirtual java.lang.Integer.intValue:()I
            iconst_1
            iadd
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
        end local 0 // java.lang.Integer i
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     i  Ljava/lang/Integer;

  private static void lambda$10(com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/js/test/interop/AsyncInteropTest$TestOutput;Ljava/lang/Object;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=2
        start local 1 // java.lang.Object value
         0: .line 196
            aload 0
            new java.lang.StringBuilder
            dup
            ldc "Final result: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput.write:(Ljava/lang/String;)V
            return
        end local 1 // java.lang.Object value
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     1  value  Ljava/lang/Object;

  private static java.lang.String lambda$11();
    descriptor: ()Ljava/lang/String;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 218
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
            lconst_1
            invokevirtual java.util.concurrent.TimeUnit.sleep:(J)V
         1: .line 219
            goto 4
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         2: pop
         3: .line 220
            getstatic com.oracle.truffle.js.test.interop.AsyncInteropTest.$assertionsDisabled:Z
            ifne 4
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         4: .line 222
      StackMap locals:
      StackMap stack:
            ldc "Java"
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.InterruptedException

  private static java.util.concurrent.CompletionStage lambda$12(org.graalvm.polyglot.Value, java.lang.String);
    descriptor: (Lorg/graalvm/polyglot/Value;Ljava/lang/String;)Ljava/util/concurrent/CompletionStage;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=6, locals=4, args_size=2
        start local 1 // java.lang.String v
         0: .line 233
            new java.util.concurrent.CompletableFuture
            dup
            invokespecial java.util.concurrent.CompletableFuture.<init>:()V
            astore 2 /* future */
        start local 2 // java.util.concurrent.CompletableFuture future
         1: .line 235
            aload 2 /* future */
            aload 0
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* v */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            invokevirtual org.graalvm.polyglot.Value.asString:()Ljava/lang/String;
            invokevirtual java.util.concurrent.CompletableFuture.complete:(Ljava/lang/Object;)Z
            pop
         2: .line 236
            goto 5
      StackMap locals: org.graalvm.polyglot.Value java.lang.String java.util.concurrent.CompletableFuture
      StackMap stack: java.lang.Throwable
         3: astore 3 /* t */
        start local 3 // java.lang.Throwable t
         4: .line 237
            aload 2 /* future */
            aload 3 /* t */
            invokevirtual java.util.concurrent.CompletableFuture.completeExceptionally:(Ljava/lang/Throwable;)Z
            pop
        end local 3 // java.lang.Throwable t
         5: .line 239
      StackMap locals:
      StackMap stack:
            aload 2 /* future */
            areturn
        end local 2 // java.util.concurrent.CompletableFuture future
        end local 1 // java.lang.String v
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     1       v  Ljava/lang/String;
            1    6     2  future  Ljava/util/concurrent/CompletableFuture<Ljava/lang/String;>;
            4    5     3       t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.Throwable

  private static java.lang.Object lambda$13(java.util.concurrent.CompletableFuture, org.graalvm.polyglot.Value[]);
    descriptor: (Ljava/util/concurrent/CompletableFuture;[Lorg/graalvm/polyglot/Value;)Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=4, args_size=2
        start local 1 // org.graalvm.polyglot.Value[] arguments
         0: .line 247
            aload 1 /* arguments */
            iconst_0
            aaload
            astore 2 /* resolve */
        start local 2 // org.graalvm.polyglot.Value resolve
         1: .line 248
            aload 1 /* arguments */
            iconst_1
            aaload
            astore 3 /* reject */
        start local 3 // org.graalvm.polyglot.Value reject
         2: .line 249
            aload 0
            aload 2 /* resolve */
            aload 3 /* reject */
            invokedynamic accept(Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)Ljava/util/function/BiConsumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)V
                  com/oracle/truffle/js/test/interop/AsyncInteropTest.lambda$14(Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;Ljava/lang/String;Ljava/lang/Throwable;)V (6)
                  (Ljava/lang/String;Ljava/lang/Throwable;)V
            invokevirtual java.util.concurrent.CompletableFuture.whenComplete:(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;
            pop
         3: .line 257
            aconst_null
            areturn
        end local 3 // org.graalvm.polyglot.Value reject
        end local 2 // org.graalvm.polyglot.Value resolve
        end local 1 // org.graalvm.polyglot.Value[] arguments
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     1  arguments  [Lorg/graalvm/polyglot/Value;
            1    4     2    resolve  Lorg/graalvm/polyglot/Value;
            2    4     3     reject  Lorg/graalvm/polyglot/Value;

  private static void lambda$14(org.graalvm.polyglot.Value, org.graalvm.polyglot.Value, java.lang.String, java.lang.Throwable);
    descriptor: (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;Ljava/lang/String;Ljava/lang/Throwable;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=5, locals=4, args_size=4
        start local 2 // java.lang.String result
        start local 3 // java.lang.Throwable ex
         0: .line 250
            aload 2 /* result */
            ifnull 3
         1: .line 251
            aload 0
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* result */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
         2: .line 252
            goto 4
         3: .line 253
      StackMap locals:
      StackMap stack:
            aload 1
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* ex */
            aastore
            invokevirtual org.graalvm.polyglot.Value.execute:([Ljava/lang/Object;)Lorg/graalvm/polyglot/Value;
            pop
         4: .line 255
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.Throwable ex
        end local 2 // java.lang.String result
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     2  result  Ljava/lang/String;
            0    5     3      ex  Ljava/lang/Throwable;
}
SourceFile: "AsyncInteropTest.java"
NestMembers:
  com.oracle.truffle.js.test.interop.AsyncInteropTest$Executable  com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput  com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable
InnerClasses:
  public abstract Executable = com.oracle.truffle.js.test.interop.AsyncInteropTest$Executable of com.oracle.truffle.js.test.interop.AsyncInteropTest
  private TestOutput = com.oracle.truffle.js.test.interop.AsyncInteropTest$TestOutput of com.oracle.truffle.js.test.interop.AsyncInteropTest
  public abstract Thenable = com.oracle.truffle.js.test.interop.AsyncInteropTest$Thenable of com.oracle.truffle.js.test.interop.AsyncInteropTest
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public final Builder = org.graalvm.polyglot.Context$Builder of org.graalvm.polyglot.Context