@@ -23,9 +23,9 @@ use rustc_parse::{parse_crate_from_file, parse_crate_from_source_str, validate_a
2323use rustc_passes:: { self , hir_stats, layout_test} ;
2424use rustc_plugin_impl as plugin;
2525use rustc_query_impl:: { OnDiskCache , Queries as TcxQueries } ;
26- use rustc_resolve:: { Resolver , ResolverArenas } ;
26+ use rustc_resolve:: Resolver ;
2727use rustc_session:: config:: { CrateType , Input , OutputFilenames , OutputType } ;
28- use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , MetadataLoaderDyn , Untracked } ;
28+ use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , Untracked } ;
2929use rustc_session:: output:: filename_for_input;
3030use rustc_session:: search_paths:: PathKind ;
3131use rustc_session:: { Limit , Session } ;
@@ -37,9 +37,7 @@ use rustc_trait_selection::traits;
3737use std:: any:: Any ;
3838use std:: ffi:: OsString ;
3939use std:: io:: { self , BufWriter , Write } ;
40- use std:: marker:: PhantomPinned ;
4140use std:: path:: { Path , PathBuf } ;
42- use std:: pin:: Pin ;
4341use std:: sync:: { Arc , LazyLock } ;
4442use std:: { env, fs, iter} ;
4543
@@ -73,90 +71,6 @@ fn count_nodes(krate: &ast::Crate) -> usize {
7371 counter. count
7472}
7573
76- pub use boxed_resolver:: BoxedResolver ;
77- mod boxed_resolver {
78- use super :: * ;
79-
80- pub struct BoxedResolver ( Pin < Box < BoxedResolverInner > > ) ;
81-
82- struct BoxedResolverInner {
83- session : Lrc < Session > ,
84- resolver_arenas : Option < ResolverArenas < ' static > > ,
85- resolver : Option < Resolver < ' static , ' static > > ,
86- _pin : PhantomPinned ,
87- }
88-
89- // Note: Drop order is important to prevent dangling references. Resolver must be dropped first,
90- // then resolver_arenas and session.
91- impl Drop for BoxedResolverInner {
92- fn drop ( & mut self ) {
93- self . resolver . take ( ) ;
94- self . resolver_arenas . take ( ) ;
95- }
96- }
97-
98- impl BoxedResolver {
99- pub ( super ) fn new (
100- session : Lrc < Session > ,
101- make_resolver : impl for <' a , ' tcx > FnOnce (
102- & ' tcx Session ,
103- & ' a ResolverArenas < ' a > ,
104- ) -> Resolver < ' a , ' tcx > ,
105- ) -> BoxedResolver {
106- let mut boxed_resolver = Box :: new ( BoxedResolverInner {
107- session,
108- resolver_arenas : Some ( Resolver :: arenas ( ) ) ,
109- resolver : None ,
110- _pin : PhantomPinned ,
111- } ) ;
112- // SAFETY: `make_resolver` takes a resolver arena with an arbitrary lifetime and
113- // returns a resolver with the same lifetime as the arena. We ensure that the arena
114- // outlives the resolver in the drop impl and elsewhere so these transmutes are sound.
115- unsafe {
116- let resolver = make_resolver (
117- std:: mem:: transmute :: < & Session , & Session > ( & boxed_resolver. session ) ,
118- std:: mem:: transmute :: < & ResolverArenas < ' _ > , & ResolverArenas < ' _ > > (
119- boxed_resolver. resolver_arenas . as_ref ( ) . unwrap ( ) ,
120- ) ,
121- ) ;
122- boxed_resolver. resolver = Some ( resolver) ;
123- BoxedResolver ( Pin :: new_unchecked ( boxed_resolver) )
124- }
125- }
126-
127- pub fn access < F : for <' a , ' tcx > FnOnce ( & mut Resolver < ' a , ' tcx > ) -> R , R > (
128- & mut self ,
129- f : F ,
130- ) -> R {
131- // SAFETY: The resolver doesn't need to be pinned.
132- let mut resolver = unsafe {
133- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
134- } ;
135- f ( ( & mut * resolver) . as_mut ( ) . unwrap ( ) )
136- }
137-
138- pub fn into_outputs ( mut self ) -> ty:: ResolverOutputs {
139- // SAFETY: The resolver doesn't need to be pinned.
140- let mut resolver = unsafe {
141- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
142- } ;
143- resolver. take ( ) . unwrap ( ) . into_outputs ( )
144- }
145- }
146- }
147-
148- pub fn create_resolver (
149- sess : Lrc < Session > ,
150- metadata_loader : Box < MetadataLoaderDyn > ,
151- krate : & ast:: Crate ,
152- crate_name : Symbol ,
153- ) -> BoxedResolver {
154- trace ! ( "create_resolver" ) ;
155- BoxedResolver :: new ( sess, move |sess, resolver_arenas| {
156- Resolver :: new ( sess, krate, crate_name, metadata_loader, resolver_arenas)
157- } )
158- }
159-
16074pub fn register_plugins < ' a > (
16175 sess : & ' a Session ,
16276 metadata_loader : & ' a dyn MetadataLoader ,
0 commit comments