[foreign-jextract] Integrated: API refresh - part two (jextract edition)
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Fri Oct 8 12:26:29 UTC 2021
On Thu, 7 Oct 2021 17:06:20 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
> This patch fixes jextract to work with the latest API changes.
>
> The patch reintroduces overloads for foreign function wrappers which take a scope (since ResourceScope is no longer a subtype of SegmentAllocator).
>
> We will consider later whether to drop these overloads; it is likely that the majority of jextract clients will already have an allocator somewhere, so the extra code is not necessary. On the other hand, if we want overloads, then I think it would also be useful to add an overload that takes a `MemorySegment` and converts it into a `prefixAllocator` (so that clients can store result of foreign function which returns a struct-by-value in a pre-existing segments).
>
> I've made some improvements to the string conversion logic; in a lot of places we were creating a scope, then doing a malloc to allocate a temporary CXString, then extract a Java String from the CXString, and dispose/free the CXString. Since jextract is single-threaded, I replaced all that with an high-order function which takes a segment supplier, and uses a prefix allocator under the hood. This should be way more efficient than what we had - and string conversion is quite frequent in libclang (e.g. `CXCursor::spelling`).
>
> The patch passes all tests.
This pull request has now been integrated.
Changeset: 09af0869
Author: Maurizio Cimadamore <mcimadamore at openjdk.org>
URL: https://git.openjdk.java.net/panama-foreign/commit/09af08693b8c591e8b2f0f761715ff253f6d7cdc
Stats: 201 lines in 18 files changed: 99 ins; 26 del; 76 mod
API refresh - part two (jextract edition)
Reviewed-by: jvernee
-------------
PR: https://git.openjdk.java.net/panama-foreign/pull/594
More information about the panama-dev
mailing list