Skip to content

Commit b3f0175

Browse files
Inline recurse into only callsite
1 parent edfd555 commit b3f0175

File tree

1 file changed

+40
-57
lines changed

1 file changed

+40
-57
lines changed

src/librustdoc/html/render.rs

+40-57
Original file line numberDiff line numberDiff line change
@@ -1885,31 +1885,6 @@ impl Context {
18851885
"../".repeat(self.current.len())
18861886
}
18871887

1888-
/// Recurse in the directory structure and change the "root path" to make
1889-
/// sure it always points to the top (relatively).
1890-
fn recurse<T, F>(&mut self, s: String, f: F) -> T where
1891-
F: FnOnce(&mut Context) -> T,
1892-
{
1893-
if s.is_empty() {
1894-
panic!("Unexpected empty destination: {:?}", self.current);
1895-
}
1896-
let prev = self.dst.clone();
1897-
self.dst.push(&s);
1898-
self.current.push(s);
1899-
1900-
info!("Recursing into {}", self.dst.display());
1901-
1902-
let ret = f(self);
1903-
1904-
info!("Recursed; leaving {}", self.dst.display());
1905-
1906-
// Go back to where we were at
1907-
self.dst = prev;
1908-
self.current.pop().unwrap();
1909-
1910-
ret
1911-
}
1912-
19131888
/// Main method for rendering a crate.
19141889
///
19151890
/// This currently isn't parallelized, but it'd be pretty easy to add
@@ -2090,42 +2065,50 @@ impl Context {
20902065
// modules are special because they add a namespace. We also need to
20912066
// recurse into the items of the module as well.
20922067
let name = item.name.as_ref().unwrap().to_string();
2093-
let mut item = Some(item);
2094-
let scx = self.shared.clone();
2095-
self.recurse(name, |this| {
2096-
let item = item.take().unwrap();
2097-
2098-
let mut buf = Vec::new();
2099-
this.render_item(&mut buf, &item, false).unwrap();
2100-
// buf will be empty if the module is stripped and there is no redirect for it
2101-
if !buf.is_empty() {
2102-
this.shared.ensure_dir(&this.dst)?;
2103-
let joint_dst = this.dst.join("index.html");
2104-
scx.fs.write(&joint_dst, buf)?;
2105-
}
2068+
let scx = &self.shared;
2069+
if name.is_empty() {
2070+
panic!("Unexpected empty destination: {:?}", self.current);
2071+
}
2072+
let prev = self.dst.clone();
2073+
self.dst.push(&name);
2074+
self.current.push(name);
21062075

2107-
let m = match item.inner {
2108-
clean::StrippedItem(box clean::ModuleItem(m)) |
2109-
clean::ModuleItem(m) => m,
2110-
_ => unreachable!()
2111-
};
2076+
info!("Recursing into {}", self.dst.display());
21122077

2113-
// Render sidebar-items.js used throughout this module.
2114-
if !this.render_redirect_pages {
2115-
let items = this.build_sidebar_items(&m);
2116-
let js_dst = this.dst.join("sidebar-items.js");
2117-
let mut v = Vec::new();
2118-
try_err!(write!(&mut v, "initSidebarItems({});",
2119-
as_json(&items)), &js_dst);
2120-
scx.fs.write(&js_dst, &v)?;
2121-
}
2078+
let mut buf = Vec::new();
2079+
self.render_item(&mut buf, &item, false).unwrap();
2080+
// buf will be empty if the module is stripped and there is no redirect for it
2081+
if !buf.is_empty() {
2082+
self.shared.ensure_dir(&self.dst)?;
2083+
let joint_dst = self.dst.join("index.html");
2084+
scx.fs.write(&joint_dst, buf)?;
2085+
}
21222086

2123-
for item in m.items {
2124-
f(this, item);
2125-
}
2087+
let m = match item.inner {
2088+
clean::StrippedItem(box clean::ModuleItem(m)) |
2089+
clean::ModuleItem(m) => m,
2090+
_ => unreachable!()
2091+
};
2092+
2093+
// Render sidebar-items.js used throughout this module.
2094+
if !self.render_redirect_pages {
2095+
let items = self.build_sidebar_items(&m);
2096+
let js_dst = self.dst.join("sidebar-items.js");
2097+
let mut v = Vec::new();
2098+
try_err!(write!(&mut v, "initSidebarItems({});",
2099+
as_json(&items)), &js_dst);
2100+
scx.fs.write(&js_dst, &v)?;
2101+
}
2102+
2103+
for item in m.items {
2104+
f(self, item);
2105+
}
2106+
2107+
info!("Recursed; leaving {}", self.dst.display());
21262108

2127-
Ok(())
2128-
})?;
2109+
// Go back to where we were at
2110+
self.dst = prev;
2111+
self.current.pop().unwrap();
21292112
} else if item.name.is_some() {
21302113
let mut buf = Vec::new();
21312114
self.render_item(&mut buf, &item, true).unwrap();

0 commit comments

Comments
 (0)