< prev index next >

test/jdk/java/foreign/TestVarArgs.java

Print this page
@@ -22,12 +22,10 @@
   *
   */
  
  /*
   * @test
-  * @enablePreview
-  * @requires jdk.foreign.linker != "UNSUPPORTED"
   * @modules java.base/jdk.internal.foreign
   * @run testng/othervm --enable-native-access=ALL-UNNAMED -Dgenerator.sample.factor=17 TestVarArgs
   */
  
  import java.lang.foreign.Arena;

@@ -38,10 +36,11 @@
  import java.lang.foreign.MemorySegment;
  
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;
  
+ import java.lang.foreign.ValueLayout;
  import java.lang.invoke.MethodHandle;
  import java.lang.invoke.MethodHandles;
  import java.lang.invoke.MethodType;
  import java.lang.invoke.VarHandle;
  import java.util.ArrayList;

@@ -49,11 +48,10 @@
  
  import static java.lang.foreign.MemoryLayout.PathElement.*;
  
  public class TestVarArgs extends CallGeneratorHelper {
  
-     static final VarHandle VH_IntArray = C_INT.arrayElementVarHandle();
      static final MethodHandle MH_CHECK;
  
      static final Linker LINKER = Linker.nativeLinker();
      static {
          System.loadLibrary("VarArgs");

@@ -80,11 +78,11 @@
  
              CallInfo.writeback(callInfo, writeBack);
              CallInfo.argIDs(callInfo, argIDs);
  
              for (int i = 0; i < args.size(); i++) {
-                 VH_IntArray.set(argIDs, (long) i, args.get(i).id.ordinal());
+                 argIDs.setAtIndex(ValueLayout.JAVA_INT, i, args.get(i).id.ordinal());
              }
  
              List<MemoryLayout> argLayouts = new ArrayList<>();
              argLayouts.add(C_POINTER); // call info
              argLayouts.add(C_INT); // size

@@ -195,14 +193,14 @@
  
          static final VarHandle VH_writeback = LAYOUT.varHandle(groupElement("writeback"));
          static final VarHandle VH_argIDs = LAYOUT.varHandle(groupElement("argIDs"));
  
          static void writeback(MemorySegment seg, MemorySegment addr) {
-             VH_writeback.set(seg, addr);
+             VH_writeback.set(seg, 0L, addr);
          }
          static void argIDs(MemorySegment seg, MemorySegment addr) {
-             VH_argIDs.set(seg, addr);
+             VH_argIDs.set(seg, 0L, addr);
          }
      }
  
      private static final class Arg {
          private final TestValue value;

@@ -217,11 +215,13 @@
              this.value = value;
              this.getter = getter;
          }
  
          private static Arg primitiveArg(NativeType id, MemoryLayout layout, TestValue value) {
-             return new Arg(id, layout, value, layout.varHandle().toMethodHandle(VarHandle.AccessMode.GET));
+             MethodHandle getterHandle = layout.varHandle().toMethodHandle(VarHandle.AccessMode.GET);
+             getterHandle = MethodHandles.insertArguments(getterHandle, 1, 0L); // align signature with getter for structs
+             return new Arg(id, layout, value, getterHandle);
          }
  
          private static Arg structArg(NativeType id, MemoryLayout layout, TestValue value) {
              return new Arg(id, layout, value, MethodHandles.identity(MemorySegment.class));
          }
< prev index next >