syntax: unify all MacResult's into a single trait. #13527
Merged
+245
−174
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
AnyMacro
trait or theMRItem
/MRExpr
variants of the
MacResult
enum. 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-passes
on 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
AnyMacro
traitanyway).
Summary of changes for dynamic syntax extension maintainers:
MacResult
is now a trait, and is returned as~MacResult
MRExpr
&MRItem
are nowMacExpr::new
andMacItem:new
respectively (which return~MacResult
s)MacResult::dummy_...
isDummyResult::any
orDummyResult::expr