Repository navigation
Low-level metadata library for ECMA-335 - #3560
Merged
Merged
Conversation
This was referenced May 14, 2025
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.