< prev index next > test/jdk/java/foreign/TestAdaptVarHandles.java
Print this page
*
*/
/*
* @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
*/
} 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 {
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() {
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 >