RFR: 7903181: port jextract for foreign-preview changes
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Fri May 20 13:36:33 UTC 2022
On Fri, 20 May 2022 11:02:49 GMT, Athijegannathan Sundararajan <sundar at openjdk.org> wrote:
> 7903181: port jextract for foreign-preview changes
samples/cblas/TestBlas.java line 58:
> 56:
> 57: try (var session = MemorySession.openConfined()) {
> 58: var a = session.allocateArray(C_DOUBLE, new double[] {
Note: this could use varargs (maybe for later)
samples/dlopen/Dlopen.java line 42:
> 40: // implementation of Symbol lookup that loads a given shared object using dlopen
> 41: // and looks up symbols using dlsym
> 42: private static Function<String, Optional<MemorySegment>> lookup(String libraryName, MemorySession session) {
Does this sample still make sense with the new `libraryLookup` ?
samples/lapack/TestLapack.java line 42:
> 40:
> 41: /* Locals */
> 42: try (var session = MemorySession.openConfined()) {
Note: this sample could use varargs (maybe for later)
samples/libffmpeg/LibffmpegMain.java line 42:
> 40: import libffmpeg.AVStream;
> 41: import static libffmpeg.Libffmpeg.*;
> 42: import static java.lang.foreign.MemoryAddress.*;
Most of other samples statically import just NULL
src/main/java/org/openjdk/jextract/clang/libclang/CXString.java line 56:
> 54: }
> 55: public static MemoryAddress data$get(MemorySegment seg, long index) {
> 56: return (java.lang.foreign.MemoryAddress)CXString.data$VH.get(seg.asSlice(index*sizeof()));
Maybe jextract should not emit a fully qualified name for the cast target? There's an import anyways.
src/main/java/org/openjdk/jextract/impl/FunctionalInterfaceBuilder.java line 95:
> 93: incrAlign();
> 94: indent();
> 95: append(MEMBER_MODS + " MemorySegment allocate(" + className() + " fi, MemorySession scope) {\n");
We should replace "scope" with session. Probably true for other API points generated by jextract
src/main/java/org/openjdk/jextract/impl/StructBuilder.java line 157:
> 155: indent();
> 156: append(MEMBER_MODS + " ");
> 157: append(fiName + " " + javaName + " (MemorySegment segment, MemorySession scope) {\n");
s/scope/session
src/main/java/org/openjdk/jextract/impl/StructBuilder.java line 261:
> 259: indent();
> 260: append(MEMBER_MODS);
> 261: append(" MemorySegment ofAddress(MemoryAddress addr, MemorySession scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }\n");
s/scope/session
src/main/resources/org/openjdk/jextract/impl/resources/RuntimeHelper.java.template line 73:
> 71: }
> 72:
> 73: static final <Z> MemorySegment upcallStub(Class<Z> fi, Z z, FunctionDescriptor fdesc, MemorySession scope) {
s/scope/session
src/main/resources/org/openjdk/jextract/impl/resources/RuntimeHelper.java.template line 83:
> 81: }
> 82:
> 83: static MemorySegment asArray(MemoryAddress addr, MemoryLayout layout, int numElements, MemorySession scope) {
s/scope/session
test/jtreg/generator/test8244938/Test8244938.java line 50:
> 48: @Test
> 49: public void testNestedStructReturn() {
> 50: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8246341/LibTest8246341Test.java line 33:
> 31: import static org.testng.Assert.assertTrue;
> 32: import static test.jextract.test8246341.test8246341_h.*;
> 33: import static java.lang.foreign.Linker.*;
is this static import needed?
test/jtreg/generator/test8246341/LibTest8246341Test.java line 55:
> 53: public void testPointerArray() {
> 54: boolean[] callbackCalled = new boolean[1];
> 55: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8246341/LibTest8246341Test.java line 72:
> 70: @Test
> 71: public void testPointerAllocate() {
> 72: try (var scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8246400/LibTest8246400Test.java line 54:
> 52: public void testSegmentRegister() {
> 53: MemorySegment sum = null;
> 54: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8252016/Test8252016.java line 33:
> 31: import static org.testng.Assert.assertEquals;
> 32: import static test.jextract.vsprintf.vsprintf_h.*;
> 33: import static java.lang.foreign.Linker.*;
redundant? E.g. we only need to import VaList
test/jtreg/generator/test8254983/LibTest8254983Test.java line 51:
> 49: @Test
> 50: public void testOuterStruct() {
> 51: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8254983/LibTest8254983Test.java line 62:
> 60: public void testInnerStruct() {
> 61: assertEquals(((GroupLayout)Foo._union._struct.$LAYOUT()).memberLayouts().size(), 2);
> 62: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8257892/LibUnsupportedTest.java line 56:
> 54: @Test
> 55: public void testAllocateFoo() {
> 56: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8257892/LibUnsupportedTest.java line 67:
> 65: @Test
> 66: public void testGetFoo() {
> 67: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8258605/LibTest8258605Test.java line 51:
> 49: @Test
> 50: public void testFunctionCallback() {
> 51: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8258605/LibTest8258605Test.java line 63:
> 61: @Test
> 62: public void testStructFunctionPointerCallback() {
> 63: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/test8261511/Test8261511.java line 49:
> 47: @Test
> 48: public void test() {
> 49: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/testFunctionPointer/LibFuncPtrTest.java line 46:
> 44: @Test
> 45: public void test() {
> 46: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/testStruct/LibStructTest.java line 52:
> 50: @Test
> 51: public void testMakePoint() {
> 52: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/testStruct/LibStructTest.java line 61:
> 59: @Test
> 60: public void testAllocate() {
> 61: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/jtreg/generator/testStruct/LibStructTest.java line 72:
> 70: @Test
> 71: public void testAllocateArray() {
> 72: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/testng/org/openjdk/jextract/test/toolprovider/TestClassGeneration.java line 183:
> 181: Method layout_getter = checkMethod(structCls, "$LAYOUT", MemoryLayout.class);
> 182: MemoryLayout structLayout = (MemoryLayout) layout_getter.invoke(null);
> 183: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/testng/org/openjdk/jextract/test/toolprovider/TestNested.java line 158:
> 156: Method slicer = cls.getMethod(fieldName + "$slice", MemorySegment.class);
> 157: assertEquals(slicer.getReturnType(), MemorySegment.class);
> 158: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
test/testng/org/openjdk/jextract/test/toolprovider/TestNested.java line 170:
> 168:
> 169: Object zero = MethodHandles.zero(type).invoke();
> 170: try (MemorySession scope = MemorySession.openConfined()) {
s/scope/session
-------------
PR: https://git.openjdk.java.net/jextract/pull/35
More information about the jextract-dev
mailing list