< prev index next > test/jdk/java/foreign/TestUpcall.java
Print this page
* jdk.incubator.foreign/jdk.internal.foreign
* jdk.incubator.foreign/jdk.internal.foreign.abi
* java.base/sun.security.action
* @build NativeTestHelper CallGeneratorHelper TestUpcall
*
- * @run testng/othervm -Dforeign.restricted=permit TestUpcall
+ * @run testng/othervm
+ * -Dforeign.restricted=permit
+ * TestUpcall
+ * @run testng/othervm
+ * -Dforeign.restricted=permit
+ * -Djdk.internal.foreign.ProgrammableInvoker.NO_SPEC=true
+ * TestUpcall
*/
import jdk.incubator.foreign.CSupport;
import jdk.incubator.foreign.FunctionDescriptor;
import jdk.incubator.foreign.GroupLayout;
}
args[params.size()] = makeCallback(ret, params, fields, checks, argChecks);
return args;
}
- @SuppressWarnings("unchecked")
static MemoryAddress makeCallback(Ret ret, List<ParamType> params, List<StructFieldType> fields, List<Consumer<Object>> checks, List<Consumer<Object[]>> argChecks) {
if (params.isEmpty()) {
return dummyAddress;
}
Class<?> carrier = paramCarrier(layout);
mh = mh.asType(mh.type().changeParameterType(i, carrier));
final int finalI = i;
if (carrier == MemorySegment.class) {
- argChecks.add(o -> assertStructEquals((MemorySegment) o[finalI], (MemorySegment) box.get()[finalI], layout));
+ argChecks.add(o -> assertStructEquals((MemorySegment) box.get()[finalI], (MemorySegment) o[finalI], layout));
} else {
- argChecks.add(o -> assertEquals(o[finalI], box.get()[finalI]));
+ argChecks.add(o -> assertEquals(box.get()[finalI], o[finalI]));
}
}
ParamType firstParam = params.get(0);
MemoryLayout firstlayout = firstParam.layout(fields);
Class<?> firstCarrier = paramCarrier(firstlayout);
if (firstCarrier == MemorySegment.class) {
- checks.add(o -> assertStructEquals((MemorySegment) o, (MemorySegment) box.get()[0], firstlayout));
+ checks.add(o -> assertStructEquals((MemorySegment) box.get()[0], (MemorySegment) o, firstlayout));
} else {
checks.add(o -> assertEquals(o, box.get()[0]));
}
mh = mh.asType(mh.type().changeReturnType(ret == Ret.VOID ? void.class : firstCarrier));
: FunctionDescriptor.ofVoid(paramLayouts);
MemoryAddress stub = abi.upcallStub(mh, func).baseAddress();
return stub;
}
- private static void assertStructEquals(MemorySegment s1, MemorySegment s2, MemoryLayout layout) {
- assertEquals(s1.byteSize(), s2.byteSize());
+ private static void assertStructEquals(MemorySegment actual, MemorySegment expected, MemoryLayout layout) {
+ assertEquals(actual.byteSize(), expected.byteSize());
GroupLayout g = (GroupLayout) layout;
for (MemoryLayout field : g.memberLayouts()) {
if (field instanceof ValueLayout) {
VarHandle vh = g.varHandle(vhCarrier(field), MemoryLayout.PathElement.groupElement(field.name().orElseThrow()));
- assertEquals(vh.get(s1.baseAddress()), vh.get(s2.baseAddress()));
+ assertEquals(vh.get(actual.baseAddress()), vh.get(expected.baseAddress()));
}
}
}
private static Class<?> vhCarrier(MemoryLayout layout) {
< prev index next >