Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/expr_store/expander.rs')
| -rw-r--r-- | crates/hir-def/src/expr_store/expander.rs | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/crates/hir-def/src/expr_store/expander.rs b/crates/hir-def/src/expr_store/expander.rs index 2fffa02c13..c79a1db847 100644 --- a/crates/hir-def/src/expr_store/expander.rs +++ b/crates/hir-def/src/expr_store/expander.rs @@ -5,10 +5,8 @@ use std::mem; use base_db::Crate; use cfg::CfgOptions; use drop_bomb::DropBomb; -use hir_expand::AstId; -use hir_expand::span_map::SpanMapRef; use hir_expand::{ - ExpandError, ExpandErrorKind, ExpandResult, HirFileId, InFile, Lookup, MacroCallId, + AstId, ExpandError, ExpandErrorKind, ExpandResult, HirFileId, InFile, Lookup, MacroCallId, eager::EagerCallBackFn, mod_path::ModPath, span_map::SpanMap, }; use span::{AstIdMap, SyntaxContext}; @@ -23,7 +21,7 @@ use crate::{ #[derive(Debug)] pub(super) struct Expander<'db> { - span_map: SpanMap, + span_map: SpanMap<'db>, current_file_id: HirFileId, ast_id_map: &'db AstIdMap, /// `recursion_depth == usize::MAX` indicates that the recursion limit has been reached. @@ -58,11 +56,11 @@ impl<'db> Expander<'db> { } pub(super) fn hygiene_for_range(&self, db: &dyn DefDatabase, range: TextRange) -> HygieneId { - match self.span_map.as_ref() { - hir_expand::span_map::SpanMapRef::ExpansionSpanMap(span_map) => { + match self.span_map { + SpanMap::ExpansionSpanMap(span_map) => { HygieneId::new(span_map.span_at(range.start()).ctx.opaque_and_semiopaque(db)) } - hir_expand::span_map::SpanMapRef::RealSpanMap(_) => HygieneId::ROOT, + SpanMap::RealSpanMap(_) => HygieneId::ROOT, } } @@ -193,15 +191,15 @@ impl<'db> Expander<'db> { let res = db.parse_macro_expansion(call_id); - let err = err.or(res.err); + let err = err.or_else(|| res.err.clone()); ExpandResult { value: { - let parse = res.value.0.cast::<T>(); + let parse = res.value.0.clone().cast::<T>(); self.recursion_depth += 1; let old_file_id = std::mem::replace(&mut self.current_file_id, call_id.into()); let old_span_map = - std::mem::replace(&mut self.span_map, db.span_map(self.current_file_id)); + std::mem::replace(&mut self.span_map, SpanMap::ExpansionSpanMap(&res.value.1)); let prev_ast_id_map = mem::replace(&mut self.ast_id_map, db.ast_id_map(self.current_file_id)); let mark = Mark { @@ -222,15 +220,15 @@ impl<'db> Expander<'db> { } #[inline] - pub(super) fn span_map(&self) -> SpanMapRef<'_> { - self.span_map.as_ref() + pub(super) fn span_map(&self) -> SpanMap<'_> { + self.span_map } } #[derive(Debug)] pub(super) struct Mark<'db> { file_id: HirFileId, - span_map: SpanMap, + span_map: SpanMap<'db>, ast_id_map: &'db AstIdMap, bomb: DropBomb, } |