syntax: unify all MacResult's into a single trait. #13527
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.
There's now one unified way to return things from a macro, instead of
being able to choose the
AnyMacrotrait or theMRItem/MRExprvariants of the
MacResultenum. This does simplify the logic handlingthe expansions, but the biggest value of this is it makes macros in (for
example) type position easier to implement, as there's this single thing
to modify.
By my measurements (using
-Z time-passeson libstd and librustc etc.),this appears to have little-to-no impact on expansion speed. There are
presumably larger costs than the small number of extra allocations and
virtual calls this adds (notably, all
macro_rules!-defined macros havenot changed in behaviour, since they had to use the
AnyMacrotraitanyway).
Summary of changes for dynamic syntax extension maintainers:
MacResultis now a trait, and is returned as~MacResultMRExpr&MRItemare nowMacExpr::newandMacItem:newrespectively (which return~MacResults)MacResult::dummy_...isDummyResult::anyorDummyResult::expr