RFR: 7903783: Jextract should tolerate more CPP constructs when running with xc++
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Aug 1 12:43:11 UTC 2024
On Thu, 1 Aug 2024 12:37:32 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
> This PR fixes a bunch of issues with trying to run jextract in CPP mode, using a `compile_flags.txt` file containing the `-xc++` flag.
>
> I've found at least three issues:
> * extern C clauses are not recursively scanned
> * the first time we see a cursor with language != C, we stop with an exception (instead of skipping)
> * typing of enum constant is different in C++ and causes infinite recursion
>
> These issues were preventing jextract to work with real world libraries (I tested OpenGL) when `-xc++` was specified.
>
> Now jextract will try to parse as much as possible. Unrecognized constructs/languages will be skipped and a diagnostic will be reported by the log.
src/main/java/org/openjdk/jextract/clang/CursorKind.java line 104:
> 102: */
> 103: StaticAssert(CXCursor_StaticAssert()),
> 104: Unsupported(-1);
I've added this, otherwise jextract will crash every time it sees a cursor it doesn't understand, as `Parser` calls `getKind` on the cursors it sees. Alternatives would be to (a) add an enum constant here for all the cases libclang support, or (b) skip this enum entirely, and just use jextract constants. I've held off a bigger refactoring for now, but this feels an area where we seem to be creating more work for ourselves than needed.
src/main/java/org/openjdk/jextract/impl/TreeMaker.java line 131:
> 129: private boolean isAllowedCXXDecl(Cursor cursor) {
> 130: return switch (cursor.kind()) {
> 131: case StaticAssert, StructDecl, UnionDecl -> true;
When in C++ mode, both structs and unions are reported to have language C++ (understandable, since they can also contain more members, such as methods). So we need to add a list of the constructs we like, regardless of the language.
-------------
PR Review Comment: https://git.openjdk.org/jextract/pull/256#discussion_r1700070753
PR Review Comment: https://git.openjdk.org/jextract/pull/256#discussion_r1700072211
More information about the jextract-dev
mailing list