various wit-dylib API tweaks
#2362
Merged
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.
I've recently ported
componentize-pyto usewit-dylibinstead of its own Wasm code generator and found it useful to tweak thewit-dylibAPIs a bit.The main idea here is to give
componentize-py(and any similar build tool) access to the metadata generated bywit-dylibbefore the guest runs, as well as match the types in that metadata up with thewit_parser::TypeIds from the input world. That allows the build tool to generate high-level binding code ahead of time and later match it up with the metadata at runtime.Specifically, this commit does the following:
wit_dylib::create_with_metadatafunction which returns both the generated module and theMetadataobject produced for it.id: TypeIdfields to all the "WIT type types" so that they can be matched up with the correspondingwit-parsertypesindexmethods to thewit-dylib-ffiwrapper types, allowing the interpreter to determine where the instance appears in its respective arrayFunctiontype into separateImportFunctionandExportFunctiontypes, each with its own array in theWitstructure. Imported and exported functions are used very differently by interpreters; separating them makes them easier to deal with.