< prev index next >

test/jdk/java/foreign/TestVarArgs.java

Print this page
*** 22,12 ***
   *
   */
  
  /*
   * @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;
--- 22,10 ---

*** 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 ***
  
  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");
--- 48,10 ---

*** 80,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());
              }
  
              List<MemoryLayout> argLayouts = new ArrayList<>();
              argLayouts.add(C_POINTER); // call info
              argLayouts.add(C_INT); // size
--- 78,11 ---
  
              CallInfo.writeback(callInfo, writeBack);
              CallInfo.argIDs(callInfo, argIDs);
  
              for (int i = 0; i < args.size(); i++) {
!                 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 ***
  
          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);
          }
          static void argIDs(MemorySegment seg, MemorySegment addr) {
!             VH_argIDs.set(seg, addr);
          }
      }
  
      private static final class Arg {
          private final TestValue value;
--- 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, 0L, addr);
          }
          static void argIDs(MemorySegment seg, MemorySegment addr) {
!             VH_argIDs.set(seg, 0L, addr);
          }
      }
  
      private static final class Arg {
          private final TestValue value;

*** 217,11 ***
              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));
          }
  
          private static Arg structArg(NativeType id, MemoryLayout layout, TestValue value) {
              return new Arg(id, layout, value, MethodHandles.identity(MemorySegment.class));
          }
--- 215,13 ---
              this.value = value;
              this.getter = getter;
          }
  
          private static Arg primitiveArg(NativeType id, MemoryLayout layout, TestValue value) {
!             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 >