< prev index next >

test/jdk/java/foreign/TestAdaptVarHandles.java

Print this page
@@ -22,11 +22,10 @@
   *
   */
  
  /*
   * @test
-  * @enablePreview
   * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=true -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=false -Xverify:all TestAdaptVarHandles
   * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=true -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true -Xverify:all TestAdaptVarHandles
   * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=false -Xverify:all TestAdaptVarHandles
   * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true -Xverify:all TestAdaptVarHandles
   */

@@ -81,33 +80,34 @@
          } catch (Throwable ex) {
              throw new ExceptionInInitializerError();
          }
      }
  
-     static final VarHandle intHandleIndexed = ValueLayout.JAVA_INT.arrayElementVarHandle();
+     static final VarHandle intHandleIndexed = MethodHandles.collectCoordinates(ValueLayout.JAVA_INT.varHandle(),
+             1, MethodHandles.insertArguments(ValueLayout.JAVA_INT.scaleHandle(), 0, 0L));
  
-     static final VarHandle intHandle = ValueLayout.JAVA_INT.varHandle();
+     static final VarHandle intHandle = MethodHandles.insertCoordinates(ValueLayout.JAVA_INT.varHandle(), 1, 0L);
  
-     static final VarHandle floatHandle = ValueLayout.JAVA_FLOAT.varHandle();
+     static final VarHandle floatHandle = MethodHandles.insertCoordinates(ValueLayout.JAVA_FLOAT.varHandle(), 1, 0L);
  
      @Test
      public void testFilterValue() throws Throwable {
          ValueLayout layout = ValueLayout.JAVA_INT;
          Arena scope = Arena.ofAuto();
          MemorySegment segment = scope.allocate(layout);
          VarHandle intHandle = layout.varHandle();
          VarHandle i2SHandle = MethodHandles.filterValue(intHandle, S2I, I2S);
-         i2SHandle.set(segment, "1");
-         String oldValue = (String)i2SHandle.getAndAdd(segment, "42");
+         i2SHandle.set(segment, 0L, "1");
+         String oldValue = (String)i2SHandle.getAndAdd(segment, 0L, "42");
          assertEquals(oldValue, "1");
-         String value = (String)i2SHandle.get(segment);
+         String value = (String)i2SHandle.get(segment, 0L);
          assertEquals(value, "43");
-         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, "43", "12");
+         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, 0L, "43", "12");
          assertTrue(swapped);
-         oldValue = (String)i2SHandle.compareAndExchange(segment, "12", "42");
+         oldValue = (String)i2SHandle.compareAndExchange(segment, 0L, "12", "42");
          assertEquals(oldValue, "12");
-         value = (String)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment);
+         value = (String)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment, 0L);
          assertEquals(value, "42");
      }
  
      @Test
      public void testFilterValueComposite() throws Throwable {

@@ -115,41 +115,41 @@
          Arena scope = Arena.ofAuto();
          MemorySegment segment = scope.allocate(layout);
          VarHandle intHandle = layout.varHandle();
          MethodHandle CTX_S2I = MethodHandles.dropArguments(S2I, 0, String.class, String.class);
          VarHandle i2SHandle = MethodHandles.filterValue(intHandle, CTX_S2I, CTX_I2S);
-         i2SHandle = MethodHandles.insertCoordinates(i2SHandle, 1, "a", "b");
-         i2SHandle.set(segment, "1");
-         String oldValue = (String)i2SHandle.getAndAdd(segment, "42");
+         i2SHandle = MethodHandles.insertCoordinates(i2SHandle, 2, "a", "b");
+         i2SHandle.set(segment, 0L, "1");
+         String oldValue = (String)i2SHandle.getAndAdd(segment, 0L, "42");
          assertEquals(oldValue, "ab1");
-         String value = (String)i2SHandle.get(segment);
+         String value = (String)i2SHandle.get(segment, 0L);
          assertEquals(value, "ab43");
-         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, "43", "12");
+         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, 0L, "43", "12");
          assertTrue(swapped);
-         oldValue = (String)i2SHandle.compareAndExchange(segment, "12", "42");
+         oldValue = (String)i2SHandle.compareAndExchange(segment, 0L, "12", "42");
          assertEquals(oldValue, "ab12");
-         value = (String)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment);
+         value = (String)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment, 0L);
          assertEquals(value, "ab42");
      }
  
      @Test
      public void testFilterValueLoose() throws Throwable {
          ValueLayout layout = ValueLayout.JAVA_INT;
          Arena scope = Arena.ofAuto();
          MemorySegment segment = scope.allocate(layout);
          VarHandle intHandle = layout.varHandle();
          VarHandle i2SHandle = MethodHandles.filterValue(intHandle, O2I, I2O);
-         i2SHandle.set(segment, "1");
-         String oldValue = (String)i2SHandle.getAndAdd(segment, "42");
+         i2SHandle.set(segment, 0L, "1");
+         String oldValue = (String)i2SHandle.getAndAdd(segment, 0L, "42");
          assertEquals(oldValue, "1");
-         String value = (String)i2SHandle.get(segment);
+         String value = (String)i2SHandle.get(segment, 0L);
          assertEquals(value, "43");
-         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, "43", "12");
+         boolean swapped = (boolean)i2SHandle.compareAndSet(segment, 0L, "43", "12");
          assertTrue(swapped);
-         oldValue = (String)i2SHandle.compareAndExchange(segment, "12", "42");
+         oldValue = (String)i2SHandle.compareAndExchange(segment, 0L, "12", "42");
          assertEquals(oldValue, "12");
-         value = (String)(Object)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment);
+         value = (String)(Object)i2SHandle.toMethodHandle(VarHandle.AccessMode.GET).invokeExact(segment, 0L);
          assertEquals(value, "42");
      }
  
      @Test(expectedExceptions = IllegalArgumentException.class)
      public void testBadFilterCarrier() {

@@ -192,22 +192,22 @@
      public void testBadFilterBoxHandleException() {
          VarHandle intHandle = ValueLayout.JAVA_INT.varHandle();
          VarHandle vh = MethodHandles.filterValue(intHandle, S2I, I2S_EX);
          try (Arena arena = Arena.ofConfined()) {
              MemorySegment seg = arena.allocate(ValueLayout.JAVA_INT);
-             vh.set(seg, "42");
-             String x = (String) vh.get(seg); // should throw
+             vh.set(seg, 0L, "42");
+             String x = (String) vh.get(seg, 0L); // should throw
          }
      }
  
      @Test(expectedExceptions = IllegalStateException.class)
      public void testBadFilterUnboxHandleException() {
          VarHandle intHandle = ValueLayout.JAVA_INT.varHandle();
          VarHandle vh = MethodHandles.filterValue(intHandle, S2I_EX, I2S);
          try (Arena arena = Arena.ofConfined()) {
              MemorySegment seg = arena.allocate(ValueLayout.JAVA_INT);
-             vh.set(seg, "42"); // should throw
+             vh.set(seg, 0L, "42"); // should throw
          }
      }
  
      @Test
      public void testFilterCoordinates() throws Throwable {
< prev index next >