[GR-60209] Implement new foreign configuration file syntax. #11023
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements a new, more user-friendly FFM API configuration file syntax.
Before this change, the configuration file syntax was based on the reverse-engineered
toStringrepresentation of the function descriptors and memory layouts which turned out to be very tricky to use.We therefore decided to introduce a syntax that aligns with the
MemoryLayoutfactory methods.The configuration file is still a JSON file. We now use a more JSON-style way to define a function descriptor:
{ "downcalls": [ { "returnType": "Layout", "parameterTypes": ["Layout", "Layout"] }, ] }The syntax for a single
returnTypeorparameterTypeis:Example:
{ "returnType": "double", "parameterTypes": ["sequence(10, long)", "struct(long, padding(8), long)", "union(int, double)"] }Furthermore, for direct upcalls it is now possible to skip declaration of
returnTypeandparameterTypesif the Java signature can be represented asFunctionDescriptorwithout ambiguity. This is the case if the Java signature does not contain anyMemorySegmentparameter or return type. For example:Java:
Configuration File:
{ "directUpcalls": [ { "class", "MyClass", "method": "foo" }, ] }This will register both overloads of
MyClass.foofor direct upcalls.An appropriate update of the docs (i.e.
ForeignInterface.md) will follow in a separate PR.