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