@@ -104,40 +104,6 @@ impl Importer for DefaultImporter {
104104 }
105105}
106106
107- pub struct DatabaseSnapshot {
108- snapshot : Option < salsa:: Snapshot < CompilerDatabase > > ,
109- }
110-
111- impl Deref for DatabaseSnapshot {
112- type Target = CompilerDatabase ;
113- fn deref ( & self ) -> & Self :: Target {
114- self . snapshot . as_ref ( ) . unwrap ( )
115- }
116- }
117-
118- impl < ' a > From < & ' a mut DatabaseSnapshot > for salsa:: OwnedDb < ' a , dyn Compilation > {
119- fn from ( db : & ' a mut DatabaseSnapshot ) -> Self {
120- salsa:: cast_owned_db!( salsa:: OwnedDb :: <CompilerDatabase >:: from( db. snapshot. as_mut( ) . unwrap( ) ) => & mut dyn Compilation )
121- }
122- }
123-
124- pub struct DatabaseFork {
125- fork : Option < salsa:: Snapshot < CompilerDatabase > > ,
126- }
127-
128- impl Deref for DatabaseFork {
129- type Target = CompilerDatabase ;
130- fn deref ( & self ) -> & Self :: Target {
131- self . fork . as_ref ( ) . unwrap ( )
132- }
133- }
134-
135- impl < ' a > From < & ' a mut DatabaseFork > for salsa:: OwnedDb < ' a , dyn Compilation > {
136- fn from ( db : & ' a mut DatabaseFork ) -> Self {
137- salsa:: cast_owned_db!( salsa:: OwnedDb :: <CompilerDatabase >:: from( db. fork. as_mut( ) . unwrap( ) ) => & mut dyn Compilation )
138- }
139- }
140-
141107pub struct DatabaseMut {
142108 // Only needed to ensure that the the `Compiler` the guard points to lives long enough
143109 _import : Arc < dyn Macro > ,
@@ -181,8 +147,12 @@ pub(crate) trait ImportApi: Send + Sync {
181147 vm : & Thread ,
182148 module_id : & Symbol ,
183149 ) -> SalvageResult < ArcType > ;
184- fn snapshot ( & self , thread : RootedThread ) -> DatabaseSnapshot ;
185- fn fork ( & mut self , forker : salsa:: ForkState , thread : RootedThread ) -> DatabaseFork ;
150+ fn snapshot ( & self , thread : RootedThread ) -> salsa:: Snapshot < CompilerDatabase > ;
151+ fn fork (
152+ & mut self ,
153+ forker : salsa:: ForkState ,
154+ thread : RootedThread ,
155+ ) -> salsa:: Snapshot < CompilerDatabase > ;
186156}
187157
188158#[ async_trait]
@@ -209,10 +179,14 @@ where
209179
210180 self . importer . import ( compiler, vm, & modulename) . await
211181 }
212- fn snapshot ( & self , thread : RootedThread ) -> DatabaseSnapshot {
182+ fn snapshot ( & self , thread : RootedThread ) -> salsa :: Snapshot < CompilerDatabase > {
213183 Self :: snapshot ( self , thread)
214184 }
215- fn fork ( & mut self , forker : salsa:: ForkState , thread : RootedThread ) -> DatabaseFork {
185+ fn fork (
186+ & mut self ,
187+ forker : salsa:: ForkState ,
188+ thread : RootedThread ,
189+ ) -> salsa:: Snapshot < CompilerDatabase > {
216190 Self :: fork ( self , forker, thread)
217191 }
218192}
@@ -309,18 +283,16 @@ impl<I> Import<I> {
309283 compiler
310284 }
311285
312- pub fn snapshot ( & self , thread : RootedThread ) -> DatabaseSnapshot {
313- let snapshot = self . compiler . lock ( ) . unwrap ( ) . snapshot ( thread) ;
314-
315- DatabaseSnapshot {
316- snapshot : Some ( snapshot) ,
317- }
286+ pub fn snapshot ( & self , thread : RootedThread ) -> salsa:: Snapshot < CompilerDatabase > {
287+ self . compiler . lock ( ) . unwrap ( ) . snapshot ( thread)
318288 }
319289
320- pub fn fork ( & self , forker : salsa:: ForkState , thread : RootedThread ) -> DatabaseFork {
321- let fork = self . compiler . lock ( ) . unwrap ( ) . fork ( forker, thread) ;
322-
323- DatabaseFork { fork : Some ( fork) }
290+ pub fn fork (
291+ & mut self ,
292+ forker : salsa:: ForkState ,
293+ thread : RootedThread ,
294+ ) -> salsa:: Snapshot < CompilerDatabase > {
295+ self . compiler . lock ( ) . unwrap ( ) . fork ( forker, thread)
324296 }
325297
326298 pub ( crate ) fn get_module_source (
@@ -489,7 +461,7 @@ where
489461 Some ( Box :: new (
490462 arc_self. clone ( ) . downcast_arc :: < Self > ( ) . ok ( ) . unwrap ( ) as Arc < dyn ImportApi > ,
491463 ) )
492- } else if id == TypeId :: of :: < DatabaseSnapshot > ( ) {
464+ } else if id == TypeId :: of :: < salsa :: Snapshot < CompilerDatabase > > ( ) {
493465 Some ( Box :: new ( self . snapshot ( thread. root_thread ( ) ) ) )
494466 } else if id == TypeId :: of :: < DatabaseMut > ( ) {
495467 Some ( Box :: new (
@@ -541,14 +513,13 @@ where
541513
542514 info ! ( "import! {}" , modulename) ;
543515
544- let db = try_future ! ( macros
516+ let mut db = try_future ! ( macros
545517 . userdata
546518 . fork( macros. vm. root_thread( ) )
547519 . downcast:: <salsa:: Snapshot <CompilerDatabase >>( )
548520 . map_err( |_| MacroError :: new( Error :: String (
549521 "`import` requires a `CompilerDatabase` as user data during macro expansion" . into( ) ,
550522 ) ) ) ) ;
551- let mut db = DatabaseFork { fork : Some ( * db) } ;
552523
553524 let span = args[ 0 ] . span ;
554525
@@ -559,23 +530,18 @@ where
559530 let ( tx, rx) = tokio:: sync:: oneshot:: channel ( ) ;
560531 spawn
561532 . spawn ( Box :: pin ( async move {
562- let result = {
563- let mut db = salsa:: OwnedDb :: < dyn Compilation > :: from ( & mut db) ;
564- std:: panic:: AssertUnwindSafe ( db. import ( modulename) )
565- . catch_unwind ( )
566- . await
567- . map ( |r| r. map_err ( |err| MacroError :: message ( err. to_string ( ) ) ) )
568- . unwrap_or_else ( |err| {
569- Err ( MacroError :: message (
570- err. downcast :: < String > ( )
571- . map ( |s| * s)
572- . or_else ( |e| {
573- e. downcast :: < & str > ( ) . map ( |s| String :: from ( & s[ ..] ) )
574- } )
575- . unwrap_or_else ( |_| "Unknown panic" . to_string ( ) ) ,
576- ) )
577- } )
578- } ;
533+ let result = std:: panic:: AssertUnwindSafe ( db. import ( modulename) )
534+ . catch_unwind ( )
535+ . await
536+ . map ( |r| r. map_err ( |err| MacroError :: message ( err. to_string ( ) ) ) )
537+ . unwrap_or_else ( |err| {
538+ Err ( MacroError :: message (
539+ err. downcast :: < String > ( )
540+ . map ( |s| * s)
541+ . or_else ( |e| e. downcast :: < & str > ( ) . map ( |s| String :: from ( & s[ ..] ) ) )
542+ . unwrap_or_else ( |_| "Unknown panic" . to_string ( ) ) ,
543+ ) )
544+ } ) ;
579545 // Drop the database before sending the result, otherwise the forker may drop before the forked database
580546 drop ( db) ;
581547 let _ = tx. send ( result) ;
@@ -595,13 +561,11 @@ where
595561 Box :: pin ( async move {
596562 Ok ( From :: from ( move || {
597563 async move {
598- let result = {
599- let mut db = salsa:: OwnedDb :: < dyn Compilation > :: from ( & mut db) ;
600- db. import ( modulename)
601- . await
602- . map_err ( |err| MacroError :: message ( err. to_string ( ) ) )
603- . map ( move |id| pos:: spanned ( span, Expr :: Ident ( id) ) )
604- } ;
564+ let result = db
565+ . import ( modulename)
566+ . await
567+ . map_err ( |err| MacroError :: message ( err. to_string ( ) ) )
568+ . map ( move |id| pos:: spanned ( span, Expr :: Ident ( id) ) ) ;
605569 drop ( db) ;
606570 result
607571 }
0 commit comments