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.rs24
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,
}