Skip to content

Commit 2d18504

Browse files
Remove Option from resolver
1 parent 3710002 commit 2d18504

File tree

3 files changed

+19
-21
lines changed

3 files changed

+19
-21
lines changed

src/librustc_interface/passes.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ use std::path::PathBuf;
5858
use std::sync::mpsc;
5959
use std::cell::RefCell;
6060
use std::rc::Rc;
61-
use std::mem;
6261

6362
pub fn parse<'a>(sess: &'a Session, input: &Input) -> PResult<'a, ast::Crate> {
6463
sess.diagnostic()
@@ -204,15 +203,16 @@ impl ExpansionResult {
204203

205204
impl BoxedResolver {
206205
pub fn to_expansion_result(
207-
mut resolver: Rc<Option<RefCell<BoxedResolver>>>,
206+
resolver: Rc<RefCell<BoxedResolver>>,
208207
) -> ExpansionResult {
209-
if let Some(resolver) = Rc::get_mut(&mut resolver) {
210-
mem::replace(resolver, None).unwrap().into_inner().complete()
211-
} else {
212-
let resolver = &*resolver;
213-
resolver.as_ref().unwrap().borrow_mut().access(|resolver| {
214-
ExpansionResult::from_resolver_ref(resolver)
215-
})
208+
match Rc::try_unwrap(resolver) {
209+
Ok(resolver) => resolver.into_inner().complete(),
210+
Err(resolver) => {
211+
let resolver = &*resolver;
212+
resolver.borrow_mut().access(|resolver| {
213+
ExpansionResult::from_resolver_ref(resolver)
214+
})
215+
}
216216
}
217217
}
218218
}

src/librustc_interface/queries.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub(crate) struct Queries {
7676
parse: Query<ast::Crate>,
7777
crate_name: Query<String>,
7878
register_plugins: Query<(ast::Crate, PluginInfo)>,
79-
expansion: Query<(ast::Crate, Rc<Option<RefCell<BoxedResolver>>>)>,
79+
expansion: Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>)>,
8080
dep_graph: Query<DepGraph>,
8181
lower_to_hir: Query<(Steal<hir::map::Forest>, ExpansionResult)>,
8282
prepare_outputs: Query<OutputFilenames>,
@@ -142,7 +142,7 @@ impl Compiler {
142142

143143
pub fn expansion(
144144
&self
145-
) -> Result<&Query<(ast::Crate, Rc<Option<RefCell<BoxedResolver>>>)>> {
145+
) -> Result<&Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>)>> {
146146
self.queries.expansion.compute(|| {
147147
let crate_name = self.crate_name()?.peek().clone();
148148
let (krate, plugin_info) = self.register_plugins()?.take();
@@ -152,7 +152,7 @@ impl Compiler {
152152
krate,
153153
&crate_name,
154154
plugin_info,
155-
).map(|(krate, resolver)| (krate, Rc::new(Some(RefCell::new(resolver)))))
155+
).map(|(krate, resolver)| (krate, Steal::new(Rc::new(RefCell::new(resolver)))))
156156
})
157157
}
158158

@@ -176,9 +176,10 @@ impl Compiler {
176176
pub fn lower_to_hir(&self) -> Result<&Query<(Steal<hir::map::Forest>, ExpansionResult)>> {
177177
self.queries.lower_to_hir.compute(|| {
178178
let expansion_result = self.expansion()?;
179-
let (krate, resolver) = expansion_result.take();
180-
let resolver_ref = &*resolver;
181-
let hir = Steal::new(resolver_ref.as_ref().unwrap().borrow_mut().access(|resolver| {
179+
let peeked = expansion_result.peek();
180+
let krate = &peeked.0;
181+
let resolver = peeked.1.steal();
182+
let hir = Steal::new(resolver.borrow_mut().access(|resolver| {
182183
passes::lower_to_hir(
183184
self.session(),
184185
self.cstore(),
@@ -187,7 +188,6 @@ impl Compiler {
187188
&krate
188189
)
189190
})?);
190-
expansion_result.give((krate, Rc::new(None)));
191191
Ok((hir, BoxedResolver::to_expansion_result(resolver)))
192192
})
193193
}

src/librustdoc/core.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub type ExternalPaths = FxHashMap<DefId, (Vec<String>, clean::TypeKind)>;
4545
pub struct DocContext<'tcx> {
4646

4747
pub tcx: TyCtxt<'tcx>,
48-
pub resolver: Rc<Option<RefCell<interface::BoxedResolver>>>,
48+
pub resolver: Rc<RefCell<interface::BoxedResolver>>,
4949
/// The stack of module NodeIds up till this point
5050
pub crate_name: Option<String>,
5151
pub cstore: Lrc<CStore>,
@@ -83,9 +83,7 @@ impl<'tcx> DocContext<'tcx> {
8383

8484
pub fn enter_resolver<F, R>(&self, f: F) -> R
8585
where F: FnOnce(&mut resolve::Resolver<'_>) -> R {
86-
let resolver = &*self.resolver;
87-
let resolver = resolver.as_ref().unwrap();
88-
resolver.borrow_mut().access(f)
86+
self.resolver.borrow_mut().access(f)
8987
}
9088

9189
/// Call the closure with the given parameters set as
@@ -344,7 +342,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
344342
// We need to hold on to the complete resolver, so we cause everything to be
345343
// cloned for the analysis passes to use. Suboptimal, but necessary in the
346344
// current architecture.
347-
let resolver = abort_on_err(compiler.expansion(), sess).peek().1.clone();
345+
let resolver = abort_on_err(compiler.expansion(), sess).peek().1.borrow().clone();
348346

349347
if sess.has_errors() {
350348
sess.fatal("Compilation failed, aborting rustdoc");

0 commit comments

Comments
 (0)