Allow parsing into Zoir.Node.Index
(it's easier to parse build.zig.zon at runtime now)
#22973
+475
−440
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.
Some schemas can't be represented by Zig types.
For example, as #22775 points out,
build.zig.zon
's schema can't be represented by a Zig type since it uses field names as map keys:This will be addressed for importing zon at comptime by #22907.
It's possible to handle this case at runtime by dropping down to
std.zig.Zoir
, but this is cumbersome--especially if most of your type conforms to a Zig type, but a few fields don't.This PR makes it possible to, for example, parse the
build.zig.zon
above at runtime using the following schema:Name and paths will be parsed as expected.
dependencies
will get the index of the Zoir node, allowing you to handle that field as you like--possibly even calling back intostd.zon.fromZoirNode
at some point on pieces of it if you want!This allows you to mix and match the higher and lower level parsing APIs at will, making it much easier to parse
build.zig.zon
and other schemas that don't map directly to Zig types at runtime.Other Changes