public class com.oracle.truffle.nfi.test.GlobalNFITest extends com.oracle.truffle.nfi.test.NFITest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.nfi.test.GlobalNFITest
  super_class: com.oracle.truffle.nfi.test.NFITest
{
  static java.lang.Object registerGlobalCallback;
    descriptor: Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC

  static java.lang.Object testGlobalCallback;
    descriptor: Ljava/lang/Object;
    flags: (0x0008) ACC_STATIC

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

  public java.util.function.DoubleFunction<?> op;
    descriptor: Ljava/util/function/DoubleFunction;
    flags: (0x0001) ACC_PUBLIC
    Signature: Ljava/util/function/DoubleFunction<*>;
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 1)

  public com.oracle.truffle.nfi.test.interop.TestCallback callback;
    descriptor: Lcom/oracle/truffle/nfi/test/interop/TestCallback;
    flags: (0x0001) ACC_PUBLIC
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameter(value = 2)

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

  public static void initContext();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=0
         0: .line 72
            ldc "registerGlobalCallback"
            ldc "((double):double):object"
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.lookupAndBind:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            putstatic com.oracle.truffle.nfi.test.GlobalNFITest.registerGlobalCallback:Ljava/lang/Object;
         1: .line 73
            ldc "testGlobalCallback"
            ldc "(double):double"
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.lookupAndBind:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            putstatic com.oracle.truffle.nfi.test.GlobalNFITest.testGlobalCallback:Ljava/lang/Object;
         2: .line 74
            ldc "initializeGlobalContext"
            ldc "(env):void"
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.lookupAndBind:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            astore 0 /* initializeGlobalContext */
        start local 0 // java.lang.Object initializeGlobalContext
         3: .line 76
            getstatic com.oracle.truffle.nfi.test.GlobalNFITest.UNCACHED_INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* initializeGlobalContext */
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.execute:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 77
            goto 7
      StackMap locals: java.lang.Object
      StackMap stack: com.oracle.truffle.api.interop.InteropException
         5: astore 1 /* ex */
        start local 1 // com.oracle.truffle.api.interop.InteropException ex
         6: .line 78
            new java.lang.AssertionError
            dup
            aload 1 /* ex */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 1 // com.oracle.truffle.api.interop.InteropException ex
         7: .line 80
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.Object initializeGlobalContext
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            3    8     0  initializeGlobalContext  Ljava/lang/Object;
            6    7     1                       ex  Lcom/oracle/truffle/api/interop/InteropException;
      Exception table:
        from    to  target  type
           3     4       5  Class com.oracle.truffle.api.interop.InteropException
    RuntimeVisibleAnnotations: 
      org.junit.BeforeClass()

  private static void register(java.util.ArrayList<java.lang.Object[]>, java.lang.String, java.util.function.DoubleFunction<?>);
    descriptor: (Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/function/DoubleFunction;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=8, locals=3, args_size=3
        start local 0 // java.util.ArrayList ret
        start local 1 // java.lang.String name
        start local 2 // java.util.function.DoubleFunction op
         0: .line 83
            aload 0 /* ret */
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* name */
            aastore
            dup
            iconst_1
            aload 2 /* op */
            aastore
            dup
            iconst_2
            new com.oracle.truffle.nfi.test.interop.TestCallback
            dup
            iconst_1
            aload 2 /* op */
            invokedynamic call(Ljava/util/function/DoubleFunction;)Lcom/oracle/truffle/nfi/test/interop/TestCallback$Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ([Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/GlobalNFITest.lambda$0(Ljava/util/function/DoubleFunction;[Ljava/lang/Object;)Ljava/lang/Object; (6)
                  ([Ljava/lang/Object;)Ljava/lang/Object;
            invokespecial com.oracle.truffle.nfi.test.interop.TestCallback.<init>:(ILcom/oracle/truffle/nfi/test/interop/TestCallback$Function;)V
            aastore
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
         1: .line 84
            return
        end local 2 // java.util.function.DoubleFunction op
        end local 1 // java.lang.String name
        end local 0 // java.util.ArrayList ret
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0   ret  Ljava/util/ArrayList<[Ljava/lang/Object;>;
            0    2     1  name  Ljava/lang/String;
            0    2     2    op  Ljava/util/function/DoubleFunction<*>;
    Signature: (Ljava/util/ArrayList<[Ljava/lang/Object;>;Ljava/lang/String;Ljava/util/function/DoubleFunction<*>;)V
    MethodParameters:
      Name  Flags
      ret   
      name  
      op    

  public static java.util.Collection<java.lang.Object[]> data();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 88
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 0 /* ret */
        start local 0 // java.util.ArrayList ret
         1: .line 89
            aload 0 /* ret */
            ldc "sqrt"
            invokedynamic apply()Ljava/util/function/DoubleFunction;
              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:
                  (D)Ljava/lang/Object;
                  java/lang/Math.sqrt(D)D (6)
                  (D)Ljava/lang/Object;
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.register:(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/function/DoubleFunction;)V
         2: .line 90
            aload 0 /* ret */
            ldc "timesTwo"
            invokedynamic apply()Ljava/util/function/DoubleFunction;
              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:
                  (D)Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/GlobalNFITest.lambda$2(D)Ljava/lang/Object; (6)
                  (D)Ljava/lang/Object;
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.register:(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/function/DoubleFunction;)V
         3: .line 91
            aload 0 /* ret */
            ldc "half"
            invokedynamic apply()Ljava/util/function/DoubleFunction;
              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:
                  (D)Ljava/lang/Object;
                  com/oracle/truffle/nfi/test/GlobalNFITest.lambda$3(D)Ljava/lang/Object; (6)
                  (D)Ljava/lang/Object;
            invokestatic com.oracle.truffle.nfi.test.GlobalNFITest.register:(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/function/DoubleFunction;)V
         4: .line 92
            aload 0 /* ret */
            areturn
        end local 0 // java.util.ArrayList ret
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    5     0   ret  Ljava/util/ArrayList<[Ljava/lang/Object;>;
    Signature: ()Ljava/util/Collection<[Ljava/lang/Object;>;
    RuntimeVisibleAnnotations: 
      org.junit.runners.Parameterized$Parameters(name = "{0}")

  public void test(com.oracle.truffle.api.CallTarget);
    descriptor: (Lcom/oracle/truffle/api/CallTarget;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // com.oracle.truffle.nfi.test.GlobalNFITest this
        start local 1 // com.oracle.truffle.api.CallTarget callTarget
         0: .line 118
            aload 1 /* callTarget */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            ldc 42.0
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            invokeinterface com.oracle.truffle.api.CallTarget.call:([Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* ret */
        start local 2 // java.lang.Object ret
         1: .line 119
            ldc "return value"
            aload 2 /* ret */
            ldc Ljava/lang/Double;
            invokestatic org.hamcrest.CoreMatchers.instanceOf:(Ljava/lang/Class;)Lorg/hamcrest/Matcher;
            invokestatic org.hamcrest.CoreMatchers.is:(Lorg/hamcrest/Matcher;)Lorg/hamcrest/Matcher;
            invokestatic org.junit.Assert.assertThat:(Ljava/lang/String;Ljava/lang/Object;Lorg/hamcrest/Matcher;)V
         2: .line 120
            ldc "return value"
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.test.GlobalNFITest.op:Ljava/util/function/DoubleFunction;
            ldc 42.0
            invokeinterface java.util.function.DoubleFunction.apply:(D)Ljava/lang/Object;
            aload 2 /* ret */
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 121
            return
        end local 2 // java.lang.Object ret
        end local 1 // com.oracle.truffle.api.CallTarget callTarget
        end local 0 // com.oracle.truffle.nfi.test.GlobalNFITest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/nfi/test/GlobalNFITest;
            0    4     1  callTarget  Lcom/oracle/truffle/api/CallTarget;
            1    4     2         ret  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.junit.Test()
    RuntimeVisibleParameterAnnotations: 
      0:
        com.oracle.truffle.tck.TruffleRunner$Inject(value = Lcom/oracle/truffle/nfi/test/GlobalNFITest$TestGlobalMethod;)
    MethodParameters:
            Name  Flags
      callTarget  

  private static java.lang.Object lambda$0(java.util.function.DoubleFunction, java.lang.Object[]);
    descriptor: (Ljava/util/function/DoubleFunction;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=2, args_size=2
        start local 1 // java.lang.Object[] x
         0: .line 83
            aload 0
            aload 1 /* x */
            iconst_0
            aaload
            checkcast java.lang.Double
            invokevirtual java.lang.Double.doubleValue:()D
            invokeinterface java.util.function.DoubleFunction.apply:(D)Ljava/lang/Object;
            areturn
        end local 1 // java.lang.Object[] x
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     1     x  [Ljava/lang/Object;

  private static java.lang.Object lambda$2(double);
    descriptor: (D)Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // double x
         0: .line 90
            ldc 2.0
            dload 0 /* x */
            dmul
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        end local 0 // double x
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     x  D

  private static java.lang.Object lambda$3(double);
    descriptor: (D)Ljava/lang/Object;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // double x
         0: .line 91
            dload 0 /* x */
            ldc 2.0
            ddiv
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        end local 0 // double x
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     x  D
}
SourceFile: "GlobalNFITest.java"
NestMembers:
  com.oracle.truffle.nfi.test.GlobalNFITest$TestGlobalMethod
InnerClasses:
  public TestGlobalMethod = com.oracle.truffle.nfi.test.GlobalNFITest$TestGlobalMethod of com.oracle.truffle.nfi.test.GlobalNFITest
  public abstract Function = com.oracle.truffle.nfi.test.interop.TestCallback$Function of com.oracle.truffle.nfi.test.interop.TestCallback
  public abstract Inject = com.oracle.truffle.tck.TruffleRunner$Inject of com.oracle.truffle.tck.TruffleRunner
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public abstract Parameter = org.junit.runners.Parameterized$Parameter of org.junit.runners.Parameterized
  public abstract Parameters = org.junit.runners.Parameterized$Parameters of org.junit.runners.Parameterized
  public abstract UseParametersRunnerFactory = org.junit.runners.Parameterized$UseParametersRunnerFactory of org.junit.runners.Parameterized
    RuntimeVisibleAnnotations: 
      org.junit.runner.RunWith(value = Lorg/junit/runners/Parameterized;)
      org.junit.runners.Parameterized$UseParametersRunnerFactory(value = Lcom/oracle/truffle/tck/TruffleRunner$ParametersFactory;)