expand: Simplify expansion of derives
And make it more uniform with other macros. By merging placeholders for future derives' outputs into the derive container's output fragment early.
This commit is contained in:
parent
2d3c17a609
commit
7ce85f2dca
7 changed files with 28 additions and 40 deletions
|
|
@ -163,25 +163,15 @@ impl<'a> Resolver<'a> {
|
|||
Some(ext)
|
||||
}
|
||||
|
||||
// FIXME: `extra_placeholders` should be included into the `fragment` as regular placeholders.
|
||||
crate fn build_reduced_graph(
|
||||
&mut self,
|
||||
fragment: &AstFragment,
|
||||
extra_placeholders: &[NodeId],
|
||||
parent_scope: ParentScope<'a>,
|
||||
) -> LegacyScope<'a> {
|
||||
let mut def_collector = DefCollector::new(&mut self.definitions, parent_scope.expansion);
|
||||
fragment.visit_with(&mut def_collector);
|
||||
for placeholder in extra_placeholders {
|
||||
def_collector.visit_macro_invoc(*placeholder);
|
||||
}
|
||||
|
||||
let mut visitor = BuildReducedGraphVisitor { r: self, parent_scope };
|
||||
fragment.visit_with(&mut visitor);
|
||||
for placeholder in extra_placeholders {
|
||||
visitor.parent_scope.legacy = visitor.visit_invoc(*placeholder);
|
||||
}
|
||||
|
||||
visitor.parent_scope.legacy
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,15 +108,11 @@ impl<'a> base::Resolver for Resolver<'a> {
|
|||
});
|
||||
}
|
||||
|
||||
// FIXME: `extra_placeholders` should be included into the `fragment` as regular placeholders.
|
||||
fn visit_ast_fragment_with_placeholders(
|
||||
&mut self, expansion: ExpnId, fragment: &AstFragment, extra_placeholders: &[NodeId]
|
||||
) {
|
||||
fn visit_ast_fragment_with_placeholders(&mut self, expansion: ExpnId, fragment: &AstFragment) {
|
||||
// Integrate the new AST fragment into all the definition and module structures.
|
||||
// We are inside the `expansion` now, but other parent scope components are still the same.
|
||||
let parent_scope = ParentScope { expansion, ..self.invocation_parent_scopes[&expansion] };
|
||||
let output_legacy_scope =
|
||||
self.build_reduced_graph(fragment, extra_placeholders, parent_scope);
|
||||
let output_legacy_scope = self.build_reduced_graph(fragment, parent_scope);
|
||||
self.output_legacy_scopes.insert(expansion, output_legacy_scope);
|
||||
|
||||
parent_scope.module.unexpanded_invocations.borrow_mut().remove(&expansion);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue