Low-level metadata library for ECMA-335 #3560
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.
This update introduces a low-level library for reading and writing the ECMA-335 format used by Windows to describe APIs.
I have written numerous parsers for ECMA-335 over the years but have struggled to come up with a decent generator, but I think I have finally landed on a capable low-level library design and implementation for both reading and writing metadata efficiently and concisely. As an example, I used it to write an MDMERGE knockoff in about 100 LOC.
You might say this is a reversal of #3266 where I made the decision to focus on
windows-bindgen, but I think that Rust binding generation is now sufficiently mature that I can once again revisit metadata generation, as the weakest link in the toolchain. So this is the first step in that direction.This update includes:
windows-ecma335library crate with the low-level reader and writer.test_ecma335crate with basic test coverage for this library.tool_mergeas a basic MDMERGE-like tool for merging .winmd files.Next steps:
windows-bindgento use this metadata reader so we only have one Rust parser.windows-ecma335library.