Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/db.rs')
-rw-r--r--crates/hir-expand/src/db.rs24
1 files changed, 10 insertions, 14 deletions
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index 69bacad54d..52ab072f9c 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -107,13 +107,6 @@ pub trait ExpandDatabase: SourceDatabase {
id: AstId<ast::Macro>,
) -> &DeclarativeMacroExpander;
- /// Special case of the previous query for procedural macros. We can't LRU
- /// proc macros, since they are not deterministic in general, and
- /// non-determinism breaks salsa in a very, very, very bad way.
- /// @edwin0cheng heroically debugged this once! See #4315 for details
- #[salsa::invoke(expand_proc_macro)]
- #[salsa::transparent]
- fn expand_proc_macro(&self, call: MacroCallId) -> &ExpandResult<tt::TopSubtree>;
/// Retrieves the span to be used for a proc-macro expansions spans.
/// This is a firewall query as it requires parsing the file, which we don't want proc-macros to
/// directly depend on as that would cause to frequent invalidations, mainly because of the
@@ -275,7 +268,7 @@ pub fn expand_speculative(
}
MacroDefKind::Declarative(it, _) => db
.decl_macro_expander(loc.krate, it)
- .expand_unhygienic(db, tt, loc.kind.call_style(), span),
+ .expand_unhygienic(db, &tt, loc.kind.call_style(), span),
MacroDefKind::BuiltIn(_, it) => {
it.expand(db, actual_macro_call, &tt, span).map_err(Into::into)
}
@@ -535,8 +528,7 @@ fn macro_expand<'db>(
let (ExpandResult { value: (tt, matched_arm), err }, span) = match loc.def.kind {
MacroDefKind::ProcMacro(..) => {
- return db
- .expand_proc_macro(macro_call_id)
+ return expand_proc_macro(db, macro_call_id)
.as_ref()
.map(|it| (Cow::Borrowed(it), None));
}
@@ -547,9 +539,9 @@ fn macro_expand<'db>(
let arg = macro_arg;
let res = match loc.def.kind {
- MacroDefKind::Declarative(id, _) => db
- .decl_macro_expander(loc.def.krate, id)
- .expand(db, arg.clone(), macro_call_id, span),
+ MacroDefKind::Declarative(id, _) => {
+ db.decl_macro_expander(loc.def.krate, id).expand(db, arg, macro_call_id, span)
+ }
MacroDefKind::BuiltIn(_, it) => {
it.expand(db, macro_call_id, arg, span).map_err(Into::into).zip_val(None)
}
@@ -589,7 +581,7 @@ fn macro_expand<'db>(
}
MacroDefKind::ProcMacro(_, _, _) => unreachable!(),
};
- (ExpandResult { value: res.value, err: res.err }, span)
+ (res, span)
}
};
@@ -617,6 +609,10 @@ fn proc_macro_span(db: &dyn ExpandDatabase, ast: AstId<ast::Fn>) -> Span {
span_map.span_for_range(range)
}
+/// Special case of [`macro_expand`] for procedural macros. We can't LRU
+/// proc macros, since they are not deterministic in general, and
+/// non-determinism breaks salsa in a very, very, very bad way.
+/// @edwin0cheng heroically debugged this once! See #4315 for details
#[salsa_macros::tracked(returns(ref))]
fn expand_proc_macro(db: &dyn ExpandDatabase, id: MacroCallId) -> ExpandResult<tt::TopSubtree> {
let loc = id.loc(db);