@@ -5,10 +5,8 @@ use std::mem;
55use base_db:: Crate ;
66use cfg:: CfgOptions ;
77use drop_bomb:: DropBomb ;
8- use hir_expand:: AstId ;
9- use hir_expand:: span_map:: SpanMapRef ;
108use hir_expand:: {
11- ExpandError , ExpandErrorKind , ExpandResult , HirFileId , InFile , Lookup , MacroCallId ,
9+ AstId , ExpandError , ExpandErrorKind , ExpandResult , HirFileId , InFile , Lookup , MacroCallId ,
1210 eager:: EagerCallBackFn , mod_path:: ModPath , span_map:: SpanMap ,
1311} ;
1412use span:: { AstIdMap , SyntaxContext } ;
@@ -23,7 +21,7 @@ use crate::{
2321
2422#[ derive( Debug ) ]
2523pub ( super ) struct Expander < ' db > {
26- span_map : SpanMap ,
24+ span_map : SpanMap < ' db > ,
2725 current_file_id : HirFileId ,
2826 ast_id_map : & ' db AstIdMap ,
2927 /// `recursion_depth == usize::MAX` indicates that the recursion limit has been reached.
@@ -58,11 +56,11 @@ impl<'db> Expander<'db> {
5856 }
5957
6058 pub ( super ) fn hygiene_for_range ( & self , db : & dyn DefDatabase , range : TextRange ) -> HygieneId {
61- match self . span_map . as_ref ( ) {
62- hir_expand :: span_map :: SpanMapRef :: ExpansionSpanMap ( span_map) => {
59+ match self . span_map {
60+ SpanMap :: ExpansionSpanMap ( span_map) => {
6361 HygieneId :: new ( span_map. span_at ( range. start ( ) ) . ctx . opaque_and_semiopaque ( db) )
6462 }
65- hir_expand :: span_map :: SpanMapRef :: RealSpanMap ( _) => HygieneId :: ROOT ,
63+ SpanMap :: RealSpanMap ( _) => HygieneId :: ROOT ,
6664 }
6765 }
6866
@@ -193,15 +191,15 @@ impl<'db> Expander<'db> {
193191
194192 let res = db. parse_macro_expansion ( call_id) ;
195193
196- let err = err. or ( res. err ) ;
194+ let err = err. or_else ( || res. err . clone ( ) ) ;
197195 ExpandResult {
198196 value : {
199- let parse = res. value . 0 . cast :: < T > ( ) ;
197+ let parse = res. value . 0 . clone ( ) . cast :: < T > ( ) ;
200198
201199 self . recursion_depth += 1 ;
202200 let old_file_id = std:: mem:: replace ( & mut self . current_file_id , call_id. into ( ) ) ;
203201 let old_span_map =
204- std:: mem:: replace ( & mut self . span_map , db . span_map ( self . current_file_id ) ) ;
202+ std:: mem:: replace ( & mut self . span_map , SpanMap :: ExpansionSpanMap ( & res . value . 1 ) ) ;
205203 let prev_ast_id_map =
206204 mem:: replace ( & mut self . ast_id_map , db. ast_id_map ( self . current_file_id ) ) ;
207205 let mark = Mark {
@@ -222,15 +220,15 @@ impl<'db> Expander<'db> {
222220 }
223221
224222 #[ inline]
225- pub ( super ) fn span_map ( & self ) -> SpanMapRef < ' _ > {
226- self . span_map . as_ref ( )
223+ pub ( super ) fn span_map ( & self ) -> SpanMap < ' _ > {
224+ self . span_map
227225 }
228226}
229227
230228#[ derive( Debug ) ]
231229pub ( super ) struct Mark < ' db > {
232230 file_id : HirFileId ,
233- span_map : SpanMap ,
231+ span_map : SpanMap < ' db > ,
234232 ast_id_map : & ' db AstIdMap ,
235233 bomb : DropBomb ,
236234}
0 commit comments