rustdoc: Various bits of modernization

This commit is contained in:
Brian Anderson 2013-01-30 13:14:35 -08:00
parent 49472ec4c9
commit 1ee94529d9
23 changed files with 259 additions and 259 deletions

View File

@ -22,6 +22,7 @@ use core::prelude::*;
use parse; use parse;
use util; use util;
use core::pipes::stream;
use core::oldcomm; use core::oldcomm;
use core::vec; use core::vec;
use rustc::back::link; use rustc::back::link;
@ -62,18 +63,18 @@ impl Srv: Clone {
} }
pub fn from_str<T>(source: ~str, owner: SrvOwner<T>) -> T { pub fn from_str<T>(source: ~str, owner: SrvOwner<T>) -> T {
run(owner, source, parse::from_str_sess) run(owner, copy source, parse::from_str_sess)
} }
pub fn from_file<T>(file: ~str, owner: SrvOwner<T>) -> T { pub fn from_file<T>(file: ~str, owner: SrvOwner<T>) -> T {
run(owner, file, |sess, f| parse::from_file_sess(sess, &Path(f))) run(owner, copy file, |sess, f| parse::from_file_sess(sess, &Path(f)))
} }
fn run<T>(owner: SrvOwner<T>, source: ~str, +parse: Parser) -> T { fn run<T>(owner: SrvOwner<T>, source: ~str, +parse: Parser) -> T {
let srv_ = Srv({ let srv_ = Srv({
ch: do util::spawn_listener |move parse, po| { ch: do util::spawn_listener |copy source, move parse, po| {
act(po, source, parse); act(po, copy source, parse);
} }
}); });
@ -87,7 +88,7 @@ fn act(po: oldcomm::Port<Msg>, source: ~str, parse: Parser) {
let ctxt = build_ctxt( let ctxt = build_ctxt(
sess, sess,
parse(sess, source) parse(sess, copy source)
); );
let mut keep_going = true; let mut keep_going = true;
@ -107,13 +108,12 @@ pub fn exec<T:Owned>(
srv: Srv, srv: Srv,
+f: fn~(ctxt: Ctxt) -> T +f: fn~(ctxt: Ctxt) -> T
) -> T { ) -> T {
let po = oldcomm::Port(); let (po, ch) = stream();
let ch = oldcomm::Chan(&po);
let msg = HandleRequest(fn~(move f, ctxt: Ctxt) { let msg = HandleRequest(fn~(move f, ctxt: Ctxt) {
oldcomm::send(ch, f(ctxt)) ch.send(f(ctxt))
}); });
oldcomm::send(srv.ch, move msg); oldcomm::send(srv.ch, move msg);
oldcomm::recv(po) po.recv()
} }
fn build_ctxt(sess: Session, fn build_ctxt(sess: Session,
@ -123,7 +123,7 @@ fn build_ctxt(sess: Session,
let ast = config::strip_unconfigured_items(ast); let ast = config::strip_unconfigured_items(ast);
let ast = syntax::ext::expand::expand_crate(sess.parse_sess, let ast = syntax::ext::expand::expand_crate(sess.parse_sess,
sess.opts.cfg, ast); copy sess.opts.cfg, ast);
let ast = front::test::modify_for_testing(sess, ast); let ast = front::test::modify_for_testing(sess, ast);
let ast_map = ast_map::map_crate(sess.diagnostic(), *ast); let ast_map = ast_map::map_crate(sess.diagnostic(), *ast);

View File

@ -65,17 +65,18 @@ fn fold_crate(
let doc = fold::default_seq_fold_crate(fold, doc); let doc = fold::default_seq_fold_crate(fold, doc);
let attrs = do astsrv::exec(srv) |ctxt| { let attrs = do astsrv::exec(srv) |ctxt| {
let attrs = ctxt.ast.node.attrs; let attrs = copy ctxt.ast.node.attrs;
attr_parser::parse_crate(attrs) attr_parser::parse_crate(attrs)
}; };
doc::CrateDoc { doc::CrateDoc {
topmod: doc::ModDoc { topmod: doc::ModDoc {
item: doc::ItemDoc { item: doc::ItemDoc {
name: option::get_or_default(attrs.name, doc.topmod.name()), name: option::get_or_default(copy attrs.name,
.. doc.topmod.item doc.topmod.name()),
.. copy doc.topmod.item
}, },
.. doc.topmod .. copy doc.topmod
} }
} }
} }
@ -97,7 +98,7 @@ fn fold_item(
let desc = if doc.id == ast::crate_node_id { let desc = if doc.id == ast::crate_node_id {
// This is the top-level mod, use the crate attributes // This is the top-level mod, use the crate attributes
do astsrv::exec(srv) |ctxt| { do astsrv::exec(srv) |ctxt| {
attr_parser::parse_desc(ctxt.ast.node.attrs) attr_parser::parse_desc(copy ctxt.ast.node.attrs)
} }
} else { } else {
parse_item_attrs(srv, doc.id, attr_parser::parse_desc) parse_item_attrs(srv, doc.id, attr_parser::parse_desc)
@ -115,8 +116,8 @@ fn parse_item_attrs<T:Owned>(
+parse_attrs: fn~(+a: ~[ast::attribute]) -> T) -> T { +parse_attrs: fn~(+a: ~[ast::attribute]) -> T) -> T {
do astsrv::exec(srv) |move parse_attrs, ctxt| { do astsrv::exec(srv) |move parse_attrs, ctxt| {
let attrs = match ctxt.ast_map.get(id) { let attrs = match ctxt.ast_map.get(id) {
ast_map::node_item(item, _) => item.attrs, ast_map::node_item(item, _) => copy item.attrs,
ast_map::node_foreign_item(item, _, _) => item.attrs, ast_map::node_foreign_item(item, _, _) => copy item.attrs,
_ => fail ~"parse_item_attrs: not an item" _ => fail ~"parse_item_attrs: not an item"
}; };
parse_attrs(attrs) parse_attrs(attrs)
@ -164,18 +165,18 @@ fn fold_enum(
doc::EnumDoc { doc::EnumDoc {
variants: do par::map(doc.variants) |variant| { variants: do par::map(doc.variants) |variant| {
let variant = *variant; let variant = copy *variant;
let desc = do astsrv::exec(srv) |ctxt| { let desc = do astsrv::exec(srv) |ctxt, copy variant| {
match ctxt.ast_map.get(doc_id) { match ctxt.ast_map.get(doc_id) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_enum(enum_definition, _), _ node: ast::item_enum(ref enum_definition, _), _
}, _) => { }, _) => {
let ast_variant = option::get( let ast_variant = option::get(
vec::find(enum_definition.variants, |v| { vec::find(enum_definition.variants, |v| {
to_str(v.node.name) == variant.name to_str(v.node.name) == variant.name
})); }));
attr_parser::parse_desc(ast_variant.node.attrs) attr_parser::parse_desc(copy ast_variant.node.attrs)
} }
_ => fail fmt!("Enum variant %s has id that's not bound \ _ => fail fmt!("Enum variant %s has id that's not bound \
to an enum item", variant.name) to an enum item", variant.name)
@ -212,7 +213,7 @@ fn fold_trait(
let doc = fold::default_seq_fold_trait(fold, doc); let doc = fold::default_seq_fold_trait(fold, doc);
doc::TraitDoc { doc::TraitDoc {
methods: merge_method_attrs(srv, doc.id(), doc.methods), methods: merge_method_attrs(srv, doc.id(), copy doc.methods),
.. doc .. doc
} }
} }
@ -227,25 +228,26 @@ fn merge_method_attrs(
let attrs: ~[(~str, Option<~str>)] = do astsrv::exec(srv) |ctxt| { let attrs: ~[(~str, Option<~str>)] = do astsrv::exec(srv) |ctxt| {
match ctxt.ast_map.get(item_id) { match ctxt.ast_map.get(item_id) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_trait(_, _, methods), _ node: ast::item_trait(_, _, ref methods), _
}, _) => { }, _) => {
vec::map(methods, |method| { vec::map(*methods, |method| {
match *method { match copy *method {
ast::required(ty_m) => { ast::required(ty_m) => {
(to_str(ty_m.ident), attr_parser::parse_desc(ty_m.attrs)) (to_str(ty_m.ident),
attr_parser::parse_desc(copy ty_m.attrs))
} }
ast::provided(m) => { ast::provided(m) => {
(to_str(m.ident), attr_parser::parse_desc(m.attrs)) (to_str(m.ident), attr_parser::parse_desc(copy m.attrs))
} }
} }
}) })
} }
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_impl(_, _, _, methods), _ node: ast::item_impl(_, _, _, ref methods), _
}, _) => { }, _) => {
vec::map(methods, |method| { vec::map(*methods, |method| {
(to_str(method.ident), (to_str(method.ident),
attr_parser::parse_desc(method.attrs)) attr_parser::parse_desc(copy method.attrs))
}) })
} }
_ => fail ~"unexpected item" _ => fail ~"unexpected item"
@ -258,7 +260,7 @@ fn merge_method_attrs(
doc::MethodDoc { doc::MethodDoc {
desc: desc, desc: desc,
..*doc .. copy *doc
} }
} }
} }
@ -288,7 +290,7 @@ fn fold_impl(
let doc = fold::default_seq_fold_impl(fold, doc); let doc = fold::default_seq_fold_impl(fold, doc);
doc::ImplDoc { doc::ImplDoc {
methods: merge_method_attrs(srv, doc.id(), doc.methods), methods: merge_method_attrs(srv, doc.id(), copy doc.methods),
.. doc .. doc
} }
} }
@ -318,7 +320,7 @@ mod test {
use extract; use extract;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
run(srv, doc) run(srv, doc)
} }

View File

@ -96,7 +96,7 @@ pub fn usage() {
pub fn default_config(input_crate: &Path) -> Config { pub fn default_config(input_crate: &Path) -> Config {
Config { Config {
input_crate: *input_crate, input_crate: copy *input_crate,
output_dir: Path("."), output_dir: Path("."),
output_format: PandocHtml, output_format: PandocHtml,
output_style: DocPerMod, output_style: DocPerMod,
@ -156,21 +156,21 @@ fn config_from_opts(
let output_dir = getopts::opt_maybe_str(matches, opt_output_dir()); let output_dir = getopts::opt_maybe_str(matches, opt_output_dir());
let output_dir = output_dir.map(|s| Path(*s)); let output_dir = output_dir.map(|s| Path(*s));
result::Ok(Config { result::Ok(Config {
output_dir: output_dir.get_or_default(config.output_dir), output_dir: output_dir.get_or_default(copy config.output_dir),
.. config .. config
}) })
}; };
let result = do result::chain(result) |config| { let result = do result::chain(result) |config| {
let output_format = getopts::opt_maybe_str( let output_format = getopts::opt_maybe_str(
matches, opt_output_format()); matches, opt_output_format());
do output_format.map_default(result::Ok(config)) do output_format.map_default(result::Ok(copy config))
|output_format| { |output_format| {
do result::chain(parse_output_format(*output_format)) do result::chain(parse_output_format(*output_format))
|output_format| { |output_format| {
result::Ok(Config { result::Ok(Config {
output_format: output_format, output_format: output_format,
.. config .. copy config
}) })
} }
} }
@ -178,13 +178,13 @@ fn config_from_opts(
let result = do result::chain(result) |config| { let result = do result::chain(result) |config| {
let output_style = let output_style =
getopts::opt_maybe_str(matches, opt_output_style()); getopts::opt_maybe_str(matches, opt_output_style());
do output_style.map_default(result::Ok(config)) do output_style.map_default(result::Ok(copy config))
|output_style| { |output_style| {
do result::chain(parse_output_style(*output_style)) do result::chain(parse_output_style(*output_style))
|output_style| { |output_style| {
result::Ok(Config { result::Ok(Config {
output_style: output_style, output_style: output_style,
.. config .. copy config
}) })
} }
} }
@ -197,7 +197,7 @@ fn config_from_opts(
do result::chain(pandoc_cmd) |pandoc_cmd| { do result::chain(pandoc_cmd) |pandoc_cmd| {
result::Ok(Config { result::Ok(Config {
pandoc_cmd: pandoc_cmd, pandoc_cmd: pandoc_cmd,
.. config .. copy config
}) })
} }
}; };

View File

@ -63,7 +63,7 @@ fn fold_trait(fold: &fold::Fold<()>, +doc: doc::TraitDoc) -> doc::TraitDoc {
doc::TraitDoc { doc::TraitDoc {
methods: par::map(doc.methods, |doc| doc::MethodDoc { methods: par::map(doc.methods, |doc| doc::MethodDoc {
brief: extract(doc.desc), brief: extract(doc.desc),
.. *doc .. copy *doc
}), }),
.. doc .. doc
} }
@ -75,7 +75,7 @@ fn fold_impl(fold: &fold::Fold<()>, +doc: doc::ImplDoc) -> doc::ImplDoc {
doc::ImplDoc { doc::ImplDoc {
methods: par::map(doc.methods, |doc| doc::MethodDoc { methods: par::map(doc.methods, |doc| doc::MethodDoc {
brief: extract(doc.desc), brief: extract(doc.desc),
.. *doc .. copy *doc
}), }),
.. doc .. doc
} }
@ -109,7 +109,7 @@ pub mod test {
use extract; use extract;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
let doc = (attr_pass::mk_pass().f)(srv, doc); let doc = (attr_pass::mk_pass().f)(srv, doc);
run(srv, doc) run(srv, doc)
@ -122,14 +122,14 @@ fn extract(desc: Option<~str>) -> Option<~str> {
return None return None
} }
parse_desc(desc.get()) parse_desc((copy desc).get())
} }
fn parse_desc(desc: ~str) -> Option<~str> { fn parse_desc(desc: ~str) -> Option<~str> {
const max_brief_len: uint = 120u; const max_brief_len: uint = 120u;
match first_sentence(desc) { match first_sentence(copy desc) {
Some(first_sentence) => { Some(first_sentence) => {
if str::len(first_sentence) <= max_brief_len { if str::len(first_sentence) <= max_brief_len {
Some(first_sentence) Some(first_sentence)
@ -142,7 +142,7 @@ fn parse_desc(desc: ~str) -> Option<~str> {
} }
fn first_sentence(s: ~str) -> Option<~str> { fn first_sentence(s: ~str) -> Option<~str> {
let paras = paragraphs(s); let paras = paragraphs(copy s);
if !paras.is_empty() { if !paras.is_empty() {
let first_para = vec::head(paras); let first_para = vec::head(paras);
Some(str::replace(first_sentence_(first_para), ~"\n", ~" ")) Some(str::replace(first_sentence_(first_para), ~"\n", ~" "))
@ -176,7 +176,7 @@ fn first_sentence_(s: ~str) -> ~str {
if str::ends_with(s, ~".") { if str::ends_with(s, ~".") {
str::slice(s, 0u, str::len(s)) str::slice(s, 0u, str::len(s))
} else { } else {
s copy s
} }
} }
} }
@ -202,7 +202,7 @@ fn paragraphs(s: ~str) -> ~[~str] {
whitespace_lines = 0; whitespace_lines = 0;
accum = if str::is_empty(accum) { accum = if str::is_empty(accum) {
*line copy *line
} else { } else {
accum + ~"\n" + *line accum + ~"\n" + *line
} }

View File

@ -177,7 +177,7 @@ pub struct IndexEntry {
impl Doc { impl Doc {
fn CrateDoc() -> CrateDoc { fn CrateDoc() -> CrateDoc {
option::get(vec::foldl(None, self.pages, |_m, page| { option::get(vec::foldl(None, self.pages, |_m, page| {
match *page { match copy *page {
doc::CratePage(doc) => Some(doc), doc::CratePage(doc) => Some(doc),
_ => None _ => None
} }
@ -185,7 +185,7 @@ impl Doc {
} }
fn cratemod() -> ModDoc { fn cratemod() -> ModDoc {
self.CrateDoc().topmod copy self.CrateDoc().topmod
} }
} }
@ -193,7 +193,7 @@ impl Doc {
impl ModDoc { impl ModDoc {
fn mods() -> ~[ModDoc] { fn mods() -> ~[ModDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
ModTag(ModDoc) => Some(ModDoc), ModTag(ModDoc) => Some(ModDoc),
_ => None _ => None
} }
@ -202,7 +202,7 @@ impl ModDoc {
fn nmods() -> ~[NmodDoc] { fn nmods() -> ~[NmodDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
NmodTag(nModDoc) => Some(nModDoc), NmodTag(nModDoc) => Some(nModDoc),
_ => None _ => None
} }
@ -211,7 +211,7 @@ impl ModDoc {
fn fns() -> ~[FnDoc] { fn fns() -> ~[FnDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
FnTag(FnDoc) => Some(FnDoc), FnTag(FnDoc) => Some(FnDoc),
_ => None _ => None
} }
@ -220,7 +220,7 @@ impl ModDoc {
fn consts() -> ~[ConstDoc] { fn consts() -> ~[ConstDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
ConstTag(ConstDoc) => Some(ConstDoc), ConstTag(ConstDoc) => Some(ConstDoc),
_ => None _ => None
} }
@ -229,7 +229,7 @@ impl ModDoc {
fn enums() -> ~[EnumDoc] { fn enums() -> ~[EnumDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
EnumTag(EnumDoc) => Some(EnumDoc), EnumTag(EnumDoc) => Some(EnumDoc),
_ => None _ => None
} }
@ -238,7 +238,7 @@ impl ModDoc {
fn traits() -> ~[TraitDoc] { fn traits() -> ~[TraitDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
TraitTag(TraitDoc) => Some(TraitDoc), TraitTag(TraitDoc) => Some(TraitDoc),
_ => None _ => None
} }
@ -247,7 +247,7 @@ impl ModDoc {
fn impls() -> ~[ImplDoc] { fn impls() -> ~[ImplDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
ImplTag(ImplDoc) => Some(ImplDoc), ImplTag(ImplDoc) => Some(ImplDoc),
_ => None _ => None
} }
@ -256,7 +256,7 @@ impl ModDoc {
fn types() -> ~[TyDoc] { fn types() -> ~[TyDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
TyTag(TyDoc) => Some(TyDoc), TyTag(TyDoc) => Some(TyDoc),
_ => None _ => None
} }
@ -265,7 +265,7 @@ impl ModDoc {
fn structs() -> ~[StructDoc] { fn structs() -> ~[StructDoc] {
do vec::filter_map(self.items) |itemtag| { do vec::filter_map(self.items) |itemtag| {
match *itemtag { match copy *itemtag {
StructTag(StructDoc) => Some(StructDoc), StructTag(StructDoc) => Some(StructDoc),
_ => None _ => None
} }
@ -288,7 +288,7 @@ impl ~[Page]: PageUtils {
fn mods(&self) -> ~[ModDoc] { fn mods(&self) -> ~[ModDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(ModTag(ModDoc)) => Some(ModDoc), ItemPage(ModTag(ModDoc)) => Some(ModDoc),
_ => None _ => None
} }
@ -297,7 +297,7 @@ impl ~[Page]: PageUtils {
fn nmods(&self) -> ~[NmodDoc] { fn nmods(&self) -> ~[NmodDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(NmodTag(nModDoc)) => Some(nModDoc), ItemPage(NmodTag(nModDoc)) => Some(nModDoc),
_ => None _ => None
} }
@ -306,7 +306,7 @@ impl ~[Page]: PageUtils {
fn fns(&self) -> ~[FnDoc] { fn fns(&self) -> ~[FnDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(FnTag(FnDoc)) => Some(FnDoc), ItemPage(FnTag(FnDoc)) => Some(FnDoc),
_ => None _ => None
} }
@ -315,7 +315,7 @@ impl ~[Page]: PageUtils {
fn consts(&self) -> ~[ConstDoc] { fn consts(&self) -> ~[ConstDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(ConstTag(ConstDoc)) => Some(ConstDoc), ItemPage(ConstTag(ConstDoc)) => Some(ConstDoc),
_ => None _ => None
} }
@ -324,7 +324,7 @@ impl ~[Page]: PageUtils {
fn enums(&self) -> ~[EnumDoc] { fn enums(&self) -> ~[EnumDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(EnumTag(EnumDoc)) => Some(EnumDoc), ItemPage(EnumTag(EnumDoc)) => Some(EnumDoc),
_ => None _ => None
} }
@ -333,7 +333,7 @@ impl ~[Page]: PageUtils {
fn traits(&self) -> ~[TraitDoc] { fn traits(&self) -> ~[TraitDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(TraitTag(TraitDoc)) => Some(TraitDoc), ItemPage(TraitTag(TraitDoc)) => Some(TraitDoc),
_ => None _ => None
} }
@ -342,7 +342,7 @@ impl ~[Page]: PageUtils {
fn impls(&self) -> ~[ImplDoc] { fn impls(&self) -> ~[ImplDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(ImplTag(ImplDoc)) => Some(ImplDoc), ItemPage(ImplTag(ImplDoc)) => Some(ImplDoc),
_ => None _ => None
} }
@ -351,7 +351,7 @@ impl ~[Page]: PageUtils {
fn types(&self) -> ~[TyDoc] { fn types(&self) -> ~[TyDoc] {
do vec::filter_map(*self) |page| { do vec::filter_map(*self) |page| {
match *page { match copy *page {
ItemPage(TyTag(TyDoc)) => Some(TyDoc), ItemPage(TyTag(TyDoc)) => Some(TyDoc),
_ => None _ => None
} }
@ -365,46 +365,46 @@ pub trait Item {
impl ItemTag: Item { impl ItemTag: Item {
pure fn item(&self) -> ItemDoc { pure fn item(&self) -> ItemDoc {
match *self { match self {
doc::ModTag(doc) => doc.item, &doc::ModTag(ref doc) => copy doc.item,
doc::NmodTag(doc) => doc.item, &doc::NmodTag(ref doc) => copy doc.item,
doc::FnTag(doc) => doc.item, &doc::FnTag(ref doc) => copy doc.item,
doc::ConstTag(doc) => doc.item, &doc::ConstTag(ref doc) => copy doc.item,
doc::EnumTag(doc) => doc.item, &doc::EnumTag(ref doc) => copy doc.item,
doc::TraitTag(doc) => doc.item, &doc::TraitTag(ref doc) => copy doc.item,
doc::ImplTag(doc) => doc.item, &doc::ImplTag(ref doc) => copy doc.item,
doc::TyTag(doc) => doc.item, &doc::TyTag(ref doc) => copy doc.item,
doc::StructTag(doc) => doc.item &doc::StructTag(ref doc) => copy doc.item
} }
} }
} }
impl SimpleItemDoc: Item { impl SimpleItemDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl ModDoc: Item { impl ModDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl NmodDoc: Item { impl NmodDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl EnumDoc: Item { impl EnumDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl TraitDoc: Item { impl TraitDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl ImplDoc: Item { impl ImplDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
impl StructDoc: Item { impl StructDoc: Item {
pure fn item(&self) -> ItemDoc { self.item } pure fn item(&self) -> ItemDoc { copy self.item }
} }
pub trait ItemUtils { pub trait ItemUtils {
@ -422,22 +422,22 @@ impl<A:Item> A: ItemUtils {
} }
pure fn name(&self) -> ~str { pure fn name(&self) -> ~str {
self.item().name copy self.item().name
} }
pure fn path(&self) -> ~[~str] { pure fn path(&self) -> ~[~str] {
self.item().path copy self.item().path
} }
pure fn brief(&self) -> Option<~str> { pure fn brief(&self) -> Option<~str> {
self.item().brief copy self.item().brief
} }
pure fn desc(&self) -> Option<~str> { pure fn desc(&self) -> Option<~str> {
self.item().desc copy self.item().desc
} }
pure fn sections(&self) -> ~[Section] { pure fn sections(&self) -> ~[Section] {
self.item().sections copy self.item().sections
} }
} }

View File

@ -34,7 +34,7 @@ macro_rules! interner_key (
pub fn to_str(id: ast::ident) -> ~str { pub fn to_str(id: ast::ident) -> ~str {
let intr = unsafe{ local_data_get(interner_key!()) }; let intr = unsafe{ local_data_get(interner_key!()) };
return *(*intr.get()).get(id); return copy *(*intr.get()).get(id);
} }
pub fn interner() -> @syntax::parse::token::ident_interner { pub fn interner() -> @syntax::parse::token::ident_interner {
@ -49,7 +49,7 @@ pub fn from_srv(
//! Use the AST service to create a document tree //! Use the AST service to create a document tree
do astsrv::exec(srv) |ctxt| { do astsrv::exec(srv) |ctxt| {
extract(ctxt.ast, default_name) extract(ctxt.ast, copy default_name)
} }
} }
@ -94,7 +94,7 @@ fn moddoc_from_mod(
item: itemdoc, item: itemdoc,
items: do vec::filter_map(module_.items) |item| { items: do vec::filter_map(module_.items) |item| {
let ItemDoc = mk_itemdoc(item.id, to_str(item.ident)); let ItemDoc = mk_itemdoc(item.id, to_str(item.ident));
match item.node { match copy item.node {
ast::item_mod(m) => { ast::item_mod(m) => {
Some(doc::ModTag( Some(doc::ModTag(
moddoc_from_mod(ItemDoc, m) moddoc_from_mod(ItemDoc, m)
@ -117,7 +117,7 @@ fn moddoc_from_mod(
} }
ast::item_enum(enum_definition, _) => { ast::item_enum(enum_definition, _) => {
Some(doc::EnumTag( Some(doc::EnumTag(
enumdoc_from_enum(ItemDoc, enum_definition.variants) enumdoc_from_enum(ItemDoc, copy enum_definition.variants)
)) ))
} }
ast::item_trait(_, _, methods) => { ast::item_trait(_, _, methods) => {
@ -233,7 +233,7 @@ fn traitdoc_from_trait(
doc::TraitDoc { doc::TraitDoc {
item: itemdoc, item: itemdoc,
methods: do vec::map(methods) |method| { methods: do vec::map(methods) |method| {
match *method { match copy *method {
ast::required(ty_m) => { ast::required(ty_m) => {
doc::MethodDoc { doc::MethodDoc {
name: to_str(ty_m.ident), name: to_str(ty_m.ident),
@ -398,7 +398,7 @@ mod test {
pub fn extract_fns() { pub fn extract_fns() {
let doc = mk_doc( let doc = mk_doc(
~"fn a() { } \ ~"fn a() { } \
mod b { mod b { fn c() {
} }"); } }");
assert doc.cratemod().fns()[0].name() == ~"a"; assert doc.cratemod().fns()[0].name() == ~"a";
assert doc.cratemod().mods()[0].fns()[0].name() == ~"c"; assert doc.cratemod().mods()[0].fns()[0].name() == ~"c";

View File

@ -160,7 +160,7 @@ pub fn default_par_fold<T:Owned Clone>(+ctxt: T) -> Fold<T> {
pub fn default_seq_fold_doc<T>(fold: &Fold<T>, +doc: doc::Doc) -> doc::Doc { pub fn default_seq_fold_doc<T>(fold: &Fold<T>, +doc: doc::Doc) -> doc::Doc {
doc::Doc { doc::Doc {
pages: do vec::map(doc.pages) |page| { pages: do vec::map(doc.pages) |page| {
match *page { match copy *page {
doc::CratePage(doc) => { doc::CratePage(doc) => {
doc::CratePage((fold.fold_crate)(fold, doc)) doc::CratePage((fold.fold_crate)(fold, doc))
} }
@ -178,7 +178,7 @@ pub fn default_seq_fold_crate<T>(
+doc: doc::CrateDoc +doc: doc::CrateDoc
) -> doc::CrateDoc { ) -> doc::CrateDoc {
doc::CrateDoc { doc::CrateDoc {
topmod: (fold.fold_mod)(fold, doc.topmod) topmod: (fold.fold_mod)(fold, copy doc.topmod)
} }
} }
@ -195,9 +195,9 @@ pub fn default_any_fold_mod<T:Owned Clone>(
) -> doc::ModDoc { ) -> doc::ModDoc {
let fold_copy = fold.clone(); let fold_copy = fold.clone();
doc::ModDoc { doc::ModDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
items: par::map(doc.items, |ItemTag, move fold_copy| { items: par::map(doc.items, |ItemTag, move fold_copy| {
fold_ItemTag(&fold_copy, *ItemTag) fold_ItemTag(&fold_copy, copy *ItemTag)
}), }),
.. doc .. doc
} }
@ -208,9 +208,9 @@ pub fn default_seq_fold_mod<T>(
+doc: doc::ModDoc +doc: doc::ModDoc
) -> doc::ModDoc { ) -> doc::ModDoc {
doc::ModDoc { doc::ModDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
items: vec::map(doc.items, |ItemTag| { items: vec::map(doc.items, |ItemTag| {
fold_ItemTag(fold, *ItemTag) fold_ItemTag(fold, copy *ItemTag)
}), }),
.. doc .. doc
} }
@ -222,9 +222,9 @@ pub fn default_par_fold_mod<T:Owned Clone>(
) -> doc::ModDoc { ) -> doc::ModDoc {
let fold_copy = fold.clone(); let fold_copy = fold.clone();
doc::ModDoc { doc::ModDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
items: par::map(doc.items, |ItemTag, move fold_copy| { items: par::map(doc.items, |ItemTag, move fold_copy| {
fold_ItemTag(&fold_copy, *ItemTag) fold_ItemTag(&fold_copy, copy *ItemTag)
}), }),
.. doc .. doc
} }
@ -236,9 +236,9 @@ pub fn default_any_fold_nmod<T:Owned Clone>(
) -> doc::NmodDoc { ) -> doc::NmodDoc {
let fold_copy = fold.clone(); let fold_copy = fold.clone();
doc::NmodDoc { doc::NmodDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
fns: par::map(doc.fns, |FnDoc, move fold_copy| { fns: par::map(doc.fns, |FnDoc, move fold_copy| {
(fold_copy.fold_fn)(&fold_copy, *FnDoc) (fold_copy.fold_fn)(&fold_copy, copy *FnDoc)
}), }),
.. doc .. doc
} }
@ -249,9 +249,9 @@ pub fn default_seq_fold_nmod<T>(
+doc: doc::NmodDoc +doc: doc::NmodDoc
) -> doc::NmodDoc { ) -> doc::NmodDoc {
doc::NmodDoc { doc::NmodDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
fns: vec::map(doc.fns, |FnDoc| { fns: vec::map(doc.fns, |FnDoc| {
(fold.fold_fn)(fold, *FnDoc) (fold.fold_fn)(fold, copy *FnDoc)
}), }),
.. doc .. doc
} }
@ -263,9 +263,9 @@ pub fn default_par_fold_nmod<T:Owned Clone>(
) -> doc::NmodDoc { ) -> doc::NmodDoc {
let fold_copy = fold.clone(); let fold_copy = fold.clone();
doc::NmodDoc { doc::NmodDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
fns: par::map(doc.fns, |FnDoc, move fold_copy| { fns: par::map(doc.fns, |FnDoc, move fold_copy| {
(fold_copy.fold_fn)(&fold_copy, *FnDoc) (fold_copy.fold_fn)(&fold_copy, copy *FnDoc)
}), }),
.. doc .. doc
} }
@ -308,7 +308,7 @@ pub fn default_seq_fold_fn<T>(
+doc: doc::FnDoc +doc: doc::FnDoc
) -> doc::FnDoc { ) -> doc::FnDoc {
doc::SimpleItemDoc { doc::SimpleItemDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -318,7 +318,7 @@ pub fn default_seq_fold_const<T>(
+doc: doc::ConstDoc +doc: doc::ConstDoc
) -> doc::ConstDoc { ) -> doc::ConstDoc {
doc::SimpleItemDoc { doc::SimpleItemDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -328,7 +328,7 @@ pub fn default_seq_fold_enum<T>(
+doc: doc::EnumDoc +doc: doc::EnumDoc
) -> doc::EnumDoc { ) -> doc::EnumDoc {
doc::EnumDoc { doc::EnumDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -338,7 +338,7 @@ pub fn default_seq_fold_trait<T>(
+doc: doc::TraitDoc +doc: doc::TraitDoc
) -> doc::TraitDoc { ) -> doc::TraitDoc {
doc::TraitDoc { doc::TraitDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -348,7 +348,7 @@ pub fn default_seq_fold_impl<T>(
+doc: doc::ImplDoc +doc: doc::ImplDoc
) -> doc::ImplDoc { ) -> doc::ImplDoc {
doc::ImplDoc { doc::ImplDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -358,7 +358,7 @@ pub fn default_seq_fold_type<T>(
+doc: doc::TyDoc +doc: doc::TyDoc
) -> doc::TyDoc { ) -> doc::TyDoc {
doc::SimpleItemDoc { doc::SimpleItemDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -368,7 +368,7 @@ pub fn default_seq_fold_struct<T>(
+doc: doc::StructDoc +doc: doc::StructDoc
) -> doc::StructDoc { ) -> doc::StructDoc {
doc::StructDoc { doc::StructDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -379,7 +379,7 @@ fn default_fold_should_produce_same_doc() {
let ast = parse::from_str(source); let ast = parse::from_str(source);
let doc = extract::extract(ast, ~""); let doc = extract::extract(ast, ~"");
let fld = default_seq_fold(()); let fld = default_seq_fold(());
let folded = (fld.fold_doc)(&fld, doc); let folded = (fld.fold_doc)(&fld, copy doc);
assert doc == folded; assert doc == folded;
} }
@ -389,7 +389,7 @@ fn default_fold_should_produce_same_consts() {
let ast = parse::from_str(source); let ast = parse::from_str(source);
let doc = extract::extract(ast, ~""); let doc = extract::extract(ast, ~"");
let fld = default_seq_fold(()); let fld = default_seq_fold(());
let folded = (fld.fold_doc)(&fld, doc); let folded = (fld.fold_doc)(&fld, copy doc);
assert doc == folded; assert doc == folded;
} }
@ -399,7 +399,7 @@ fn default_fold_should_produce_same_enums() {
let ast = parse::from_str(source); let ast = parse::from_str(source);
let doc = extract::extract(ast, ~""); let doc = extract::extract(ast, ~"");
let fld = default_seq_fold(()); let fld = default_seq_fold(());
let folded = (fld.fold_doc)(&fld, doc); let folded = (fld.fold_doc)(&fld, copy doc);
assert doc == folded; assert doc == folded;
} }
@ -409,6 +409,6 @@ fn default_parallel_fold_should_produce_same_doc() {
let ast = parse::from_str(source); let ast = parse::from_str(source);
let doc = extract::extract(ast, ~""); let doc = extract::extract(ast, ~"");
let fld = default_par_fold(()); let fld = default_par_fold(());
let folded = (fld.fold_doc)(&fld, doc); let folded = (fld.fold_doc)(&fld, copy doc);
assert doc == folded; assert doc == folded;
} }

View File

@ -29,7 +29,7 @@ pub fn mk_pass(+config: config::Config) -> Pass {
Pass { Pass {
name: ~"markdown_index", name: ~"markdown_index",
f: fn~(srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc { f: fn~(srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc {
run(srv, doc, config) run(srv, doc, copy config)
} }
} }
} }
@ -55,7 +55,7 @@ fn fold_mod(
let doc = fold::default_any_fold_mod(fold, doc); let doc = fold::default_any_fold_mod(fold, doc);
doc::ModDoc { doc::ModDoc {
index: Some(build_mod_index(doc, fold.ctxt)), index: Some(build_mod_index(copy doc, copy fold.ctxt)),
.. doc .. doc
} }
} }
@ -68,7 +68,7 @@ fn fold_nmod(
let doc = fold::default_any_fold_nmod(fold, doc); let doc = fold::default_any_fold_nmod(fold, doc);
doc::NmodDoc { doc::NmodDoc {
index: Some(build_nmod_index(doc, fold.ctxt)), index: Some(build_nmod_index(copy doc, copy fold.ctxt)),
.. doc .. doc
} }
} }
@ -79,7 +79,7 @@ fn build_mod_index(
) -> doc::Index { ) -> doc::Index {
doc::Index { doc::Index {
entries: par::map(doc.items, |doc| { entries: par::map(doc.items, |doc| {
item_to_entry(*doc, config) item_to_entry(copy *doc, copy config)
}) })
} }
} }
@ -90,7 +90,7 @@ fn build_nmod_index(
) -> doc::Index { ) -> doc::Index {
doc::Index { doc::Index {
entries: par::map(doc.fns, |doc| { entries: par::map(doc.fns, |doc| {
item_to_entry(doc::FnTag(*doc), config) item_to_entry(doc::FnTag(copy *doc), copy config)
}) })
} }
} }
@ -110,8 +110,8 @@ fn item_to_entry(
}; };
doc::IndexEntry { doc::IndexEntry {
kind: markdown_pass::header_kind(doc), kind: markdown_pass::header_kind(copy doc),
name: markdown_pass::header_name(doc), name: markdown_pass::header_name(copy doc),
brief: doc.brief(), brief: doc.brief(),
link: link link: link
} }
@ -180,13 +180,13 @@ fn should_index_mod_contents() {
config::DocPerCrate, config::DocPerCrate,
~"mod a { } fn b() { }" ~"mod a { } fn b() { }"
); );
assert doc.cratemod().index.get().entries[0] == doc::IndexEntry { assert (&doc.cratemod().index).get().entries[0] == doc::IndexEntry {
kind: ~"Module", kind: ~"Module",
name: ~"a", name: ~"a",
brief: None, brief: None,
link: ~"#module-a" link: ~"#module-a"
}; };
assert doc.cratemod().index.get().entries[1] == doc::IndexEntry { assert (&doc.cratemod().index).get().entries[1] == doc::IndexEntry {
kind: ~"Function", kind: ~"Function",
name: ~"b", name: ~"b",
brief: None, brief: None,
@ -200,13 +200,13 @@ fn should_index_mod_contents_multi_page() {
config::DocPerMod, config::DocPerMod,
~"mod a { } fn b() { }" ~"mod a { } fn b() { }"
); );
assert doc.cratemod().index.get().entries[0] == doc::IndexEntry { assert (&doc.cratemod().index).get().entries[0] == doc::IndexEntry {
kind: ~"Module", kind: ~"Module",
name: ~"a", name: ~"a",
brief: None, brief: None,
link: ~"a.html" link: ~"a.html"
}; };
assert doc.cratemod().index.get().entries[1] == doc::IndexEntry { assert (&doc.cratemod().index).get().entries[1] == doc::IndexEntry {
kind: ~"Function", kind: ~"Function",
name: ~"b", name: ~"b",
brief: None, brief: None,
@ -220,7 +220,7 @@ fn should_index_foreign_mod_pages() {
config::DocPerMod, config::DocPerMod,
~"extern mod a { }" ~"extern mod a { }"
); );
assert doc.cratemod().index.get().entries[0] == doc::IndexEntry { assert (&doc.cratemod().index).get().entries[0] == doc::IndexEntry {
kind: ~"Foreign module", kind: ~"Foreign module",
name: ~"a", name: ~"a",
brief: None, brief: None,
@ -234,7 +234,7 @@ fn should_add_brief_desc_to_index() {
config::DocPerMod, config::DocPerMod,
~"#[doc = \"test\"] mod a { }" ~"#[doc = \"test\"] mod a { }"
); );
assert doc.cratemod().index.get().entries[0].brief assert (&doc.cratemod().index).get().entries[0].brief
== Some(~"test"); == Some(~"test");
} }
@ -244,7 +244,7 @@ fn should_index_foreign_mod_contents() {
config::DocPerCrate, config::DocPerCrate,
~"extern mod a { fn b(); }" ~"extern mod a { fn b(); }"
); );
assert doc.cratemod().nmods()[0].index.get().entries[0] assert (&doc.cratemod().nmods()[0].index).get().entries[0]
== doc::IndexEntry { == doc::IndexEntry {
kind: ~"Function", kind: ~"Function",
name: ~"b", name: ~"b",

View File

@ -76,7 +76,7 @@ fn run(
// makes the headers come out nested correctly. // makes the headers come out nested correctly.
let sorted_doc = (sort_pass::mk_pass( let sorted_doc = (sort_pass::mk_pass(
~"mods last", mods_last ~"mods last", mods_last
).f)(srv, doc); ).f)(srv, copy doc);
write_markdown(sorted_doc, move writer_factory); write_markdown(sorted_doc, move writer_factory);
@ -123,15 +123,15 @@ pub fn write_markdown(
// (See #2484, which is closed.) // (See #2484, which is closed.)
do doc.pages.map |page| { do doc.pages.map |page| {
let ctxt = { let ctxt = {
w: writer_factory(*page) w: writer_factory(copy *page)
}; };
write_page(&ctxt, page) write_page(&ctxt, page)
}; };
} }
fn write_page(ctxt: &Ctxt, page: &doc::Page) { fn write_page(ctxt: &Ctxt, page: &doc::Page) {
write_title(ctxt, *page); write_title(ctxt, copy *page);
match *page { match copy *page {
doc::CratePage(doc) => { doc::CratePage(doc) => {
write_crate(ctxt, doc); write_crate(ctxt, doc);
} }
@ -167,7 +167,7 @@ fn write_title(ctxt: &Ctxt, +page: doc::Page) {
fn make_title(+page: doc::Page) -> ~str { fn make_title(+page: doc::Page) -> ~str {
let item = match page { let item = match page {
doc::CratePage(CrateDoc) => { doc::CratePage(CrateDoc) => {
doc::ModTag(CrateDoc.topmod) doc::ModTag(copy CrateDoc.topmod)
} }
doc::ItemPage(ItemTag) => { doc::ItemPage(ItemTag) => {
ItemTag ItemTag
@ -254,16 +254,16 @@ pub fn header_kind(+doc: doc::ItemTag) -> ~str {
pub fn header_name(+doc: doc::ItemTag) -> ~str { pub fn header_name(+doc: doc::ItemTag) -> ~str {
let fullpath = str::connect(doc.path() + ~[doc.name()], ~"::"); let fullpath = str::connect(doc.path() + ~[doc.name()], ~"::");
match doc { match &doc {
doc::ModTag(_) if doc.id() != syntax::ast::crate_node_id => { &doc::ModTag(_) if doc.id() != syntax::ast::crate_node_id => {
fullpath fullpath
} }
doc::NmodTag(_) => { &doc::NmodTag(_) => {
fullpath fullpath
} }
doc::ImplTag(doc) => { &doc::ImplTag(ref doc) => {
assert doc.self_ty.is_some(); assert doc.self_ty.is_some();
let self_ty = doc.self_ty.get(); let self_ty = (&doc.self_ty).get();
let mut trait_part = ~""; let mut trait_part = ~"";
for doc.trait_types.eachi |i, trait_type| { for doc.trait_types.eachi |i, trait_type| {
if i == 0 { if i == 0 {
@ -282,14 +282,14 @@ pub fn header_name(+doc: doc::ItemTag) -> ~str {
} }
pub fn header_text(+doc: doc::ItemTag) -> ~str { pub fn header_text(+doc: doc::ItemTag) -> ~str {
match doc { match &doc {
doc::ImplTag(ImplDoc) => { &doc::ImplTag(ref ImplDoc) => {
let header_kind = header_kind(doc); let header_kind = header_kind(copy doc);
let desc = if ImplDoc.trait_types.is_empty() { let desc = if ImplDoc.trait_types.is_empty() {
fmt!("for `%s`", ImplDoc.self_ty.get()) fmt!("for `%s`", (&ImplDoc.self_ty).get())
} else { } else {
fmt!("of `%s` for `%s`", ImplDoc.trait_types[0], fmt!("of `%s` for `%s`", ImplDoc.trait_types[0],
ImplDoc.self_ty.get()) (&ImplDoc.self_ty).get())
}; };
fmt!("%s %s", header_kind, desc) fmt!("%s %s", header_kind, desc)
} }
@ -307,7 +307,7 @@ fn write_crate(
ctxt: &Ctxt, ctxt: &Ctxt,
+doc: doc::CrateDoc +doc: doc::CrateDoc
) { ) {
write_top_module(ctxt, doc.topmod); write_top_module(ctxt, copy doc.topmod);
} }
fn write_top_module( fn write_top_module(
@ -354,13 +354,13 @@ fn write_desc(
fn write_sections(ctxt: &Ctxt, sections: &[doc::Section]) { fn write_sections(ctxt: &Ctxt, sections: &[doc::Section]) {
for vec::each(sections) |section| { for vec::each(sections) |section| {
write_section(ctxt, *section); write_section(ctxt, copy *section);
} }
} }
fn write_section(ctxt: &Ctxt, +section: doc::Section) { fn write_section(ctxt: &Ctxt, +section: doc::Section) {
write_header_(ctxt, H4, section.header); write_header_(ctxt, H4, copy section.header);
ctxt.w.write_line(section.body); ctxt.w.write_line(copy section.body);
ctxt.w.write_line(~""); ctxt.w.write_line(~"");
} }
@ -381,11 +381,11 @@ fn write_mod_contents(
) { ) {
write_oldcommon(ctxt, doc.desc(), doc.sections()); write_oldcommon(ctxt, doc.desc(), doc.sections());
if doc.index.is_some() { if doc.index.is_some() {
write_index(ctxt, doc.index.get()); write_index(ctxt, (&doc.index).get());
} }
for doc.items.each |itemTag| { for doc.items.each |itemTag| {
write_item(ctxt, *itemTag); write_item(ctxt, copy *itemTag);
} }
} }
@ -399,7 +399,7 @@ fn write_item_no_header(ctxt: &Ctxt, +doc: doc::ItemTag) {
fn write_item_(ctxt: &Ctxt, +doc: doc::ItemTag, write_header: bool) { fn write_item_(ctxt: &Ctxt, +doc: doc::ItemTag, write_header: bool) {
if write_header { if write_header {
write_item_header(ctxt, doc); write_item_header(ctxt, copy doc);
} }
match doc { match doc {
@ -439,10 +439,10 @@ fn write_index(ctxt: &Ctxt, +index: doc::Index) {
for index.entries.each |entry| { for index.entries.each |entry| {
let header = header_text_(entry.kind, entry.name); let header = header_text_(entry.kind, entry.name);
let id = entry.link; let id = copy entry.link;
if entry.brief.is_some() { if entry.brief.is_some() {
ctxt.w.write_line(fmt!("* [%s](%s) - %s", ctxt.w.write_line(fmt!("* [%s](%s) - %s",
header, id, entry.brief.get())); header, id, (&entry.brief).get()));
} else { } else {
ctxt.w.write_line(fmt!("* [%s](%s)", header, id)); ctxt.w.write_line(fmt!("* [%s](%s)", header, id));
} }
@ -484,12 +484,12 @@ fn should_write_index_for_foreign_mods() {
fn write_nmod(ctxt: &Ctxt, +doc: doc::NmodDoc) { fn write_nmod(ctxt: &Ctxt, +doc: doc::NmodDoc) {
write_oldcommon(ctxt, doc.desc(), doc.sections()); write_oldcommon(ctxt, doc.desc(), doc.sections());
if doc.index.is_some() { if doc.index.is_some() {
write_index(ctxt, doc.index.get()); write_index(ctxt, (&doc.index).get());
} }
for doc.fns.each |FnDoc| { for doc.fns.each |FnDoc| {
write_item_header(ctxt, doc::FnTag(*FnDoc)); write_item_header(ctxt, doc::FnTag(copy *FnDoc));
write_fn(ctxt, *FnDoc); write_fn(ctxt, copy *FnDoc);
} }
} }
@ -520,7 +520,7 @@ fn write_fn(
) { ) {
write_fnlike( write_fnlike(
ctxt, ctxt,
doc.sig, copy doc.sig,
doc.desc(), doc.desc(),
doc.sections() doc.sections()
); );
@ -579,7 +579,7 @@ fn should_correctly_indent_fn_signature() {
topmod: doc::ModDoc{ topmod: doc::ModDoc{
items: ~[doc::FnTag(doc::SimpleItemDoc{ items: ~[doc::FnTag(doc::SimpleItemDoc{
sig: Some(~"line 1\nline 2"), sig: Some(~"line 1\nline 2"),
.. doc.cratemod().fns()[0] .. copy doc.cratemod().fns()[0]
})], })],
.. doc.cratemod() .. doc.cratemod()
}, },
@ -601,7 +601,7 @@ fn write_const(
ctxt: &Ctxt, ctxt: &Ctxt,
+doc: doc::ConstDoc +doc: doc::ConstDoc
) { ) {
write_sig(ctxt, doc.sig); write_sig(ctxt, copy doc.sig);
write_oldcommon(ctxt, doc.desc(), doc.sections()); write_oldcommon(ctxt, doc.desc(), doc.sections());
} }
@ -651,7 +651,7 @@ fn write_variants(
write_header_(ctxt, H4, ~"Variants"); write_header_(ctxt, H4, ~"Variants");
for vec::each(docs) |variant| { for vec::each(docs) |variant| {
write_variant(ctxt, *variant); write_variant(ctxt, copy *variant);
} }
ctxt.w.write_line(~""); ctxt.w.write_line(~"");
@ -659,8 +659,8 @@ fn write_variants(
fn write_variant(ctxt: &Ctxt, +doc: doc::VariantDoc) { fn write_variant(ctxt: &Ctxt, +doc: doc::VariantDoc) {
assert doc.sig.is_some(); assert doc.sig.is_some();
let sig = doc.sig.get(); let sig = (&doc.sig).get();
match doc.desc { match copy doc.desc {
Some(desc) => { Some(desc) => {
ctxt.w.write_line(fmt!("* `%s` - %s", sig, desc)); ctxt.w.write_line(fmt!("* `%s` - %s", sig, desc));
} }
@ -710,7 +710,7 @@ fn write_trait(ctxt: &Ctxt, +doc: doc::TraitDoc) {
fn write_methods(ctxt: &Ctxt, docs: &[doc::MethodDoc]) { fn write_methods(ctxt: &Ctxt, docs: &[doc::MethodDoc]) {
for vec::each(docs) |doc| { for vec::each(docs) |doc| {
write_method(ctxt, *doc); write_method(ctxt, copy *doc);
} }
} }
@ -718,8 +718,8 @@ fn write_method(ctxt: &Ctxt, +doc: doc::MethodDoc) {
write_header_(ctxt, H3, header_text_(~"Method", doc.name)); write_header_(ctxt, H3, header_text_(~"Method", doc.name));
write_fnlike( write_fnlike(
ctxt, ctxt,
doc.sig, copy doc.sig,
doc.desc, copy doc.desc,
doc.sections doc.sections
); );
} }
@ -793,7 +793,7 @@ fn write_type(
ctxt: &Ctxt, ctxt: &Ctxt,
+doc: doc::TyDoc +doc: doc::TyDoc
) { ) {
write_sig(ctxt, doc.sig); write_sig(ctxt, copy doc.sig);
write_oldcommon(ctxt, doc.desc(), doc.sections()); write_oldcommon(ctxt, doc.desc(), doc.sections());
} }
@ -820,7 +820,7 @@ fn write_struct(
ctxt: &Ctxt, ctxt: &Ctxt,
+doc: doc::StructDoc +doc: doc::StructDoc
) { ) {
write_sig(ctxt, doc.sig); write_sig(ctxt, copy doc.sig);
write_oldcommon(ctxt, doc.desc(), doc.sections()); write_oldcommon(ctxt, doc.desc(), doc.sections());
} }

View File

@ -70,13 +70,13 @@ pub fn make_writer_factory(+config: config::Config) -> WriterFactory {
fn markdown_writer_factory(+config: config::Config) -> WriterFactory { fn markdown_writer_factory(+config: config::Config) -> WriterFactory {
fn~(+page: doc::Page) -> Writer { fn~(+page: doc::Page) -> Writer {
markdown_writer(config, page) markdown_writer(copy config, page)
} }
} }
fn pandoc_writer_factory(+config: config::Config) -> WriterFactory { fn pandoc_writer_factory(+config: config::Config) -> WriterFactory {
fn~(+page: doc::Page) -> Writer { fn~(+page: doc::Page) -> Writer {
pandoc_writer(config, page) pandoc_writer(copy config, page)
} }
} }
@ -95,7 +95,7 @@ fn pandoc_writer(
+page: doc::Page +page: doc::Page
) -> Writer { ) -> Writer {
assert config.pandoc_cmd.is_some(); assert config.pandoc_cmd.is_some();
let pandoc_cmd = config.pandoc_cmd.get(); let pandoc_cmd = (&config.pandoc_cmd).get();
let filename = make_local_filename(config, page); let filename = make_local_filename(config, page);
let pandoc_args = ~[ let pandoc_args = ~[
@ -195,7 +195,7 @@ fn make_local_filename(
+config: config::Config, +config: config::Config,
+page: doc::Page +page: doc::Page
) -> Path { ) -> Path {
let filename = make_filename(config, page); let filename = make_filename(copy config, page);
config.output_dir.push_rel(&filename) config.output_dir.push_rel(&filename)
} }
@ -264,7 +264,7 @@ fn should_name_mod_file_names_by_path() {
.. config::default_config(&Path("input/test.rc")) .. config::default_config(&Path("input/test.rc"))
}; };
let doc = test::mk_doc(~"", ~"mod a { mod b { } }"); let doc = test::mk_doc(~"", ~"mod a { mod b { } }");
let modb = doc.cratemod().mods()[0].mods()[0]; let modb = copy doc.cratemod().mods()[0].mods()[0];
let page = doc::ItemPage(doc::ModTag(modb)); let page = doc::ItemPage(doc::ModTag(modb));
let filename = make_local_filename(config, page); let filename = make_local_filename(config, page);
assert filename == Path("output/dir/a_b.html"); assert filename == Path("output/dir/a_b.html");
@ -279,7 +279,7 @@ mod test {
pub fn mk_doc(+name: ~str, +source: ~str) -> doc::Doc { pub fn mk_doc(+name: ~str, +source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(source) |srv| {
let doc = extract::from_srv(srv, name); let doc = extract::from_srv(srv, copy name);
let doc = (path_pass::mk_pass().f)(srv, doc); let doc = (path_pass::mk_pass().f)(srv, doc);
doc doc
} }
@ -307,7 +307,7 @@ pub fn future_writer_factory(
let (writer, future) = future_writer(); let (writer, future) = future_writer();
writer_ch.send(move writer); writer_ch.send(move writer);
let s = future.get(); let s = future.get();
oldcomm::send(markdown_ch, (page, s)); oldcomm::send(markdown_ch, (copy page, s));
} }
writer_po.recv() writer_po.recv()
}; };

View File

@ -88,7 +88,7 @@ fn find_pages(doc: doc::Doc, page_chan: PageChan) {
fold_nmod: fold_nmod, fold_nmod: fold_nmod,
.. fold::default_any_fold(NominalOp { op: page_chan }) .. fold::default_any_fold(NominalOp { op: page_chan })
}; };
(fold.fold_doc)(&fold, doc); (fold.fold_doc)(&fold, copy doc);
oldcomm::send(page_chan, None); oldcomm::send(page_chan, None);
} }
@ -102,7 +102,7 @@ fn fold_crate(
let page = doc::CratePage(doc::CrateDoc { let page = doc::CratePage(doc::CrateDoc {
topmod: strip_mod(doc.topmod), topmod: strip_mod(doc.topmod),
.. doc .. copy doc
}); });
oldcomm::send(fold.ctxt.op, Some(page)); oldcomm::send(fold.ctxt.op, Some(page));
@ -136,7 +136,7 @@ fn strip_mod(doc: doc::ModDoc) -> doc::ModDoc {
_ => true _ => true
} }
}, },
.. doc .. copy doc
} }
} }
@ -145,7 +145,7 @@ fn fold_nmod(
+doc: doc::NmodDoc +doc: doc::NmodDoc
) -> doc::NmodDoc { ) -> doc::NmodDoc {
let doc = fold::default_seq_fold_nmod(fold, doc); let doc = fold::default_seq_fold_nmod(fold, doc);
let page = doc::ItemPage(doc::NmodTag(doc)); let page = doc::ItemPage(doc::NmodTag(copy doc));
oldcomm::send(fold.ctxt.op, Some(page)); oldcomm::send(fold.ctxt.op, Some(page));
return doc; return doc;
} }
@ -195,13 +195,13 @@ mod test {
output_style: config::OutputStyle, output_style: config::OutputStyle,
source: ~str source: ~str
) -> doc::Doc { ) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
run(srv, doc, output_style) run(srv, doc, output_style)
} }
} }
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
mk_doc_(config::DocPerMod, source) mk_doc_(config::DocPerMod, copy source)
} }
} }

View File

@ -32,12 +32,12 @@ pub fn from_str(+source: ~str) -> @ast::crate {
pub fn from_file_sess(sess: session::Session, file: &Path) -> @ast::crate { pub fn from_file_sess(sess: session::Session, file: &Path) -> @ast::crate {
parse::parse_crate_from_file( parse::parse_crate_from_file(
file, cfg(sess, file_input(*file)), sess.parse_sess) file, cfg(sess, file_input(copy *file)), sess.parse_sess)
} }
pub fn from_str_sess(sess: session::Session, +source: ~str) -> @ast::crate { pub fn from_str_sess(sess: session::Session, +source: ~str) -> @ast::crate {
parse::parse_crate_from_source_str( parse::parse_crate_from_source_str(
~"-", @source, cfg(sess, str_input(source)), sess.parse_sess) ~"-", @copy source, cfg(sess, str_input(source)), sess.parse_sess)
} }
fn cfg(sess: session::Session, +input: driver::input) -> ast::crate_cfg { fn cfg(sess: session::Session, +input: driver::input) -> ast::crate_cfg {

View File

@ -32,9 +32,8 @@ pub fn run_passes(
do vec::foldl(doc, passes) |doc, pass| { do vec::foldl(doc, passes) |doc, pass| {
log(debug, fmt!("pass #%d", passno)); log(debug, fmt!("pass #%d", passno));
passno += 1; passno += 1;
log(debug, doc); do time(copy pass.name) {
do time(pass.name) { (pass.f)(srv, copy doc)
(pass.f)(srv, doc)
} }
} }
} }
@ -51,7 +50,7 @@ fn test_run_passes() {
topmod: doc::ModDoc{ topmod: doc::ModDoc{
item: doc::ItemDoc { item: doc::ItemDoc {
name: doc.cratemod().name() + ~"two", name: doc.cratemod().name() + ~"two",
.. doc.cratemod().item .. copy doc.cratemod().item
}, },
items: ~[], items: ~[],
index: None index: None
@ -70,7 +69,7 @@ fn test_run_passes() {
topmod: doc::ModDoc{ topmod: doc::ModDoc{
item: doc::ItemDoc { item: doc::ItemDoc {
name: doc.cratemod().name() + ~"three", name: doc.cratemod().name() + ~"three",
.. doc.cratemod().item .. copy doc.cratemod().item
}, },
items: ~[], items: ~[],
index: None index: None

View File

@ -55,7 +55,7 @@ fn run(srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc {
fn fold_item(fold: &fold::Fold<Ctxt>, +doc: doc::ItemDoc) -> doc::ItemDoc { fn fold_item(fold: &fold::Fold<Ctxt>, +doc: doc::ItemDoc) -> doc::ItemDoc {
doc::ItemDoc { doc::ItemDoc {
path: fold.ctxt.path, path: copy fold.ctxt.path,
.. doc .. doc
} }
} }
@ -69,7 +69,7 @@ fn fold_mod(fold: &fold::Fold<Ctxt>, +doc: doc::ModDoc) -> doc::ModDoc {
if !is_topmod { fold.ctxt.path.pop(); } if !is_topmod { fold.ctxt.path.pop(); }
doc::ModDoc { doc::ModDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }
@ -80,7 +80,7 @@ fn fold_nmod(fold: &fold::Fold<Ctxt>, +doc: doc::NmodDoc) -> doc::NmodDoc {
fold.ctxt.path.pop(); fold.ctxt.path.pop();
doc::NmodDoc { doc::NmodDoc {
item: (fold.fold_item)(fold, doc.item), item: (fold.fold_item)(fold, copy doc.item),
.. doc .. doc
} }
} }

View File

@ -56,7 +56,7 @@ fn is_hidden(srv: astsrv::Srv, doc: doc::ItemDoc) -> bool {
let id = doc.id; let id = doc.id;
do astsrv::exec(srv) |ctxt| { do astsrv::exec(srv) |ctxt| {
let attrs = match ctxt.ast_map.get(id) { let attrs = match ctxt.ast_map.get(id) {
ast_map::node_item(item, _) => item.attrs, ast_map::node_item(item, _) => copy item.attrs,
_ => ~[] _ => ~[]
}; };
attr_parser::parse_hidden(attrs) attr_parser::parse_hidden(attrs)
@ -77,7 +77,7 @@ pub mod test {
use prune_hidden_pass::run; use prune_hidden_pass::run;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
run(srv, doc) run(srv, doc)
} }

View File

@ -81,7 +81,7 @@ pub mod test {
use prune_private_pass::run; use prune_private_pass::run;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
run(srv, doc) run(srv, doc)
} }

View File

@ -23,10 +23,8 @@
#[legacy_modes]; #[legacy_modes];
#[legacy_records]; #[legacy_records];
#[allow(vecs_implicitly_copyable)];
#[allow(non_implicitly_copyable_typarams)]; #[allow(non_implicitly_copyable_typarams)];
#[allow(deprecated_mode)]; #[allow(deprecated_mode)];
#[allow(deprecated_pattern)];
#[allow(deprecated_self)]; #[allow(deprecated_self)];
extern mod core(vers = "0.6"); extern mod core(vers = "0.6");
@ -93,7 +91,7 @@ fn main() {
/// Runs rustdoc over the given file /// Runs rustdoc over the given file
fn run(config: Config) { fn run(config: Config) {
let source_file = config.input_crate; let source_file = copy config.input_crate;
// Create an AST service from the source code // Create an AST service from the source code
do astsrv::from_file(source_file.to_str()) |srv| { do astsrv::from_file(source_file.to_str()) |srv| {
@ -106,7 +104,7 @@ fn run(config: Config) {
// Extract the initial doc tree from the AST. This contains // Extract the initial doc tree from the AST. This contains
// just names and node ids. // just names and node ids.
let doc = time(~"extract", || { let doc = time(~"extract", || {
let default_name = source_file; let default_name = copy source_file;
extract::from_srv(srv, default_name.to_str()) extract::from_srv(srv, default_name.to_str())
}); });
@ -138,13 +136,13 @@ fn run(config: Config) {
// Sort items again by kind // Sort items again by kind
sort_item_type_pass::mk_pass(), sort_item_type_pass::mk_pass(),
// Create indexes appropriate for markdown // Create indexes appropriate for markdown
markdown_index_pass::mk_pass(config), markdown_index_pass::mk_pass(copy config),
// Break the document into pages if required by the // Break the document into pages if required by the
// output format // output format
page_pass::mk_pass(config.output_style), page_pass::mk_pass(config.output_style),
// Render // Render
markdown_pass::mk_pass( markdown_pass::mk_pass(
markdown_writer::make_writer_factory(config) markdown_writer::make_writer_factory(copy config)
) )
]); ]);
} }

View File

@ -63,7 +63,7 @@ fn fold_trait(fold: &fold::Fold<()>, +doc: doc::TraitDoc) -> doc::TraitDoc {
doc::MethodDoc { doc::MethodDoc {
desc: desc, desc: desc,
sections: sections, sections: sections,
.. *method .. copy *method
} }
}, },
.. doc .. doc
@ -80,7 +80,7 @@ fn fold_impl(fold: &fold::Fold<()>, +doc: doc::ImplDoc) -> doc::ImplDoc {
doc::MethodDoc { doc::MethodDoc {
desc: desc, desc: desc,
sections: sections, sections: sections,
.. *method .. copy *method
} }
}, },
.. doc .. doc
@ -109,17 +109,17 @@ fn sectionalize(desc: Option<~str>) -> (Option<~str>, ~[doc::Section]) {
return (None, ~[]); return (None, ~[]);
} }
let lines = str::lines(desc.get()); let lines = str::lines((copy desc).get());
let mut new_desc = None::<~str>; let mut new_desc = None::<~str>;
let mut current_section = None; let mut current_section = None;
let mut sections = ~[]; let mut sections = ~[];
for lines.each |line| { for lines.each |line| {
match parse_header(*line) { match parse_header(copy *line) {
Some(header) => { Some(header) => {
if current_section.is_some() { if current_section.is_some() {
sections += ~[current_section.get()]; sections += ~[(&current_section).get()];
} }
current_section = Some(doc::Section { current_section = Some(doc::Section {
header: header, header: header,
@ -135,12 +135,12 @@ fn sectionalize(desc: Option<~str>) -> (Option<~str>, ~[doc::Section]) {
}); });
} }
None => { None => {
new_desc = match new_desc { new_desc = match copy new_desc {
Some(desc) => { Some(desc) => {
Some(desc + ~"\n" + *line) Some(desc + ~"\n" + *line)
} }
None => { None => {
Some(*line) Some(copy *line)
} }
}; };
} }
@ -260,7 +260,7 @@ pub mod test {
use sectionalize_pass::run; use sectionalize_pass::run;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
let doc = (attr_pass::mk_pass().f)(srv, doc); let doc = (attr_pass::mk_pass().f)(srv, doc);
run(srv, doc) run(srv, doc)

View File

@ -29,7 +29,7 @@ type ItemLtEq = NominalOp<ItemLtEqOp>;
pub fn mk_pass(name: ~str, +lteq: ItemLtEqOp) -> Pass { pub fn mk_pass(name: ~str, +lteq: ItemLtEqOp) -> Pass {
Pass { Pass {
name: name, name: copy name,
f: fn~(move lteq, srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc { f: fn~(move lteq, srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc {
run(srv, doc, NominalOp { op: copy lteq }) run(srv, doc, NominalOp { op: copy lteq })
} }

View File

@ -24,7 +24,7 @@ use std::par;
pub fn mk_pass(name: ~str, +op: fn~(~str) -> ~str) -> Pass { pub fn mk_pass(name: ~str, +op: fn~(~str) -> ~str) -> Pass {
Pass { Pass {
name: name, name: copy name,
f: fn~(move op, srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc { f: fn~(move op, srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc {
run(srv, doc, copy op) run(srv, doc, copy op)
} }
@ -53,7 +53,7 @@ fn run(
} }
fn maybe_apply_op(op: NominalOp<Op>, s: Option<~str>) -> Option<~str> { fn maybe_apply_op(op: NominalOp<Op>, s: Option<~str>) -> Option<~str> {
s.map(|s| (op.op)(*s) ) s.map(|s| (op.op)(copy *s) )
} }
fn fold_item( fn fold_item(
@ -65,7 +65,7 @@ fn fold_item(
doc::ItemDoc { doc::ItemDoc {
brief: maybe_apply_op(fold.ctxt, doc.brief), brief: maybe_apply_op(fold.ctxt, doc.brief),
desc: maybe_apply_op(fold.ctxt, doc.desc), desc: maybe_apply_op(fold.ctxt, doc.desc),
sections: apply_to_sections(fold.ctxt, doc.sections), sections: apply_to_sections(fold.ctxt, copy doc.sections),
.. doc .. doc
} }
} }
@ -75,8 +75,8 @@ fn apply_to_sections(
sections: ~[doc::Section] sections: ~[doc::Section]
) -> ~[doc::Section] { ) -> ~[doc::Section] {
par::map(sections, |section, copy op| doc::Section { par::map(sections, |section, copy op| doc::Section {
header: (op.op)(section.header), header: (op.op)(copy section.header),
body: (op.op)(section.body) body: (op.op)(copy section.body)
}) })
} }
@ -90,7 +90,7 @@ fn fold_enum(
variants: do par::map(doc.variants) |variant, copy fold_copy| { variants: do par::map(doc.variants) |variant, copy fold_copy| {
doc::VariantDoc { doc::VariantDoc {
desc: maybe_apply_op(fold_copy.ctxt, variant.desc), desc: maybe_apply_op(fold_copy.ctxt, variant.desc),
.. *variant .. copy *variant
} }
}, },
.. doc .. doc
@ -104,7 +104,7 @@ fn fold_trait(
let doc = fold::default_seq_fold_trait(fold, doc); let doc = fold::default_seq_fold_trait(fold, doc);
doc::TraitDoc { doc::TraitDoc {
methods: apply_to_methods(fold.ctxt, doc.methods), methods: apply_to_methods(fold.ctxt, copy doc.methods),
.. doc .. doc
} }
} }
@ -117,8 +117,8 @@ fn apply_to_methods(
doc::MethodDoc { doc::MethodDoc {
brief: maybe_apply_op(op, doc.brief), brief: maybe_apply_op(op, doc.brief),
desc: maybe_apply_op(op, doc.desc), desc: maybe_apply_op(op, doc.desc),
sections: apply_to_sections(op, doc.sections), sections: apply_to_sections(op, copy doc.sections),
.. *doc .. copy *doc
} }
} }
} }
@ -130,7 +130,7 @@ fn fold_impl(
let doc = fold::default_seq_fold_impl(fold, doc); let doc = fold::default_seq_fold_impl(fold, doc);
doc::ImplDoc { doc::ImplDoc {
methods: apply_to_methods(fold.ctxt, doc.methods), methods: apply_to_methods(fold.ctxt, copy doc.methods),
.. doc .. doc
} }
} }
@ -302,7 +302,7 @@ mod test {
use core::str; use core::str;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
let doc = (attr_pass::mk_pass().f)(srv, doc); let doc = (attr_pass::mk_pass().f)(srv, doc);
let doc = (desc_to_brief_pass::mk_pass().f)(srv, doc); let doc = (desc_to_brief_pass::mk_pass().f)(srv, doc);

View File

@ -44,7 +44,7 @@ mod test {
use trim_pass::mk_pass; use trim_pass::mk_pass;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
let doc = (attr_pass::mk_pass().f)(srv, doc); let doc = (attr_pass::mk_pass().f)(srv, doc);
(mk_pass().f)(srv, doc) (mk_pass().f)(srv, doc)

View File

@ -70,13 +70,14 @@ fn get_fn_sig(srv: astsrv::Srv, fn_id: doc::AstId) -> Option<~str> {
match ctxt.ast_map.get(fn_id) { match ctxt.ast_map.get(fn_id) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
ident: ident, ident: ident,
node: ast::item_fn(decl, _, tys, _), _ node: ast::item_fn(ref decl, _, ref tys, _), _
}, _) | }, _) |
ast_map::node_foreign_item(@ast::foreign_item { ast_map::node_foreign_item(@ast::foreign_item {
ident: ident, ident: ident,
node: ast::foreign_item_fn(decl, _, tys), _ node: ast::foreign_item_fn(ref decl, _, ref tys), _
}, _, _) => { }, _, _) => {
Some(pprust::fun_to_str(decl, ident, tys, extract::interner())) Some(pprust::fun_to_str(*decl, ident, copy *tys,
extract::interner()))
} }
_ => fail ~"get_fn_sig: fn_id not bound to a fn item" _ => fail ~"get_fn_sig: fn_id not bound to a fn item"
} }
@ -102,7 +103,7 @@ fn fold_const(
let srv = fold.ctxt; let srv = fold.ctxt;
doc::SimpleItemDoc { doc::SimpleItemDoc {
sig: Some(do astsrv::exec(srv) |ctxt| { sig: Some(do astsrv::exec(srv) |copy doc, ctxt| {
match ctxt.ast_map.get(doc.id()) { match ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_const(ty, _), _ node: ast::item_const(ty, _), _
@ -131,11 +132,11 @@ fn fold_enum(
doc::EnumDoc { doc::EnumDoc {
variants: do par::map(doc.variants) |variant| { variants: do par::map(doc.variants) |variant| {
let variant = *variant; let variant = copy *variant;
let sig = do astsrv::exec(srv) |ctxt| { let sig = do astsrv::exec(srv) |copy variant, ctxt| {
match ctxt.ast_map.get(doc_id) { match ctxt.ast_map.get(doc_id) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_enum(enum_definition, _), _ node: ast::item_enum(ref enum_definition, _), _
}, _) => { }, _) => {
let ast_variant = let ast_variant =
do vec::find(enum_definition.variants) |v| { do vec::find(enum_definition.variants) |v| {
@ -168,7 +169,7 @@ fn fold_trait(
+doc: doc::TraitDoc +doc: doc::TraitDoc
) -> doc::TraitDoc { ) -> doc::TraitDoc {
doc::TraitDoc { doc::TraitDoc {
methods: merge_methods(fold.ctxt, doc.id(), doc.methods), methods: merge_methods(fold.ctxt, doc.id(), copy doc.methods),
.. doc .. doc
} }
} }
@ -180,8 +181,8 @@ fn merge_methods(
) -> ~[doc::MethodDoc] { ) -> ~[doc::MethodDoc] {
do par::map(docs) |doc| { do par::map(docs) |doc| {
doc::MethodDoc { doc::MethodDoc {
sig: get_method_sig(srv, item_id, doc.name), sig: get_method_sig(srv, item_id, copy doc.name),
.. *doc .. copy *doc
} }
} }
} }
@ -191,13 +192,13 @@ fn get_method_sig(
item_id: doc::AstId, item_id: doc::AstId,
method_name: ~str method_name: ~str
) -> Option<~str> { ) -> Option<~str> {
do astsrv::exec(srv) |ctxt| { do astsrv::exec(srv) |copy method_name, ctxt| {
match ctxt.ast_map.get(item_id) { match ctxt.ast_map.get(item_id) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_trait(_, _, methods), _ node: ast::item_trait(_, _, ref methods), _
}, _) => { }, _) => {
match vec::find(methods, |method| { match vec::find(*methods, |method| {
match *method { match copy *method {
ast::required(ty_m) => to_str(ty_m.ident) == method_name, ast::required(ty_m) => to_str(ty_m.ident) == method_name,
ast::provided(m) => to_str(m.ident) == method_name, ast::provided(m) => to_str(m.ident) == method_name,
} }
@ -208,7 +209,7 @@ fn get_method_sig(
Some(pprust::fun_to_str( Some(pprust::fun_to_str(
ty_m.decl, ty_m.decl,
ty_m.ident, ty_m.ident,
ty_m.tps, copy ty_m.tps,
extract::interner() extract::interner()
)) ))
} }
@ -216,7 +217,7 @@ fn get_method_sig(
Some(pprust::fun_to_str( Some(pprust::fun_to_str(
m.decl, m.decl,
m.ident, m.ident,
m.tps, copy m.tps,
extract::interner() extract::interner()
)) ))
} }
@ -226,16 +227,16 @@ fn get_method_sig(
} }
} }
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_impl(_, _, _, methods), _ node: ast::item_impl(_, _, _, ref methods), _
}, _) => { }, _) => {
match vec::find(methods, |method| { match vec::find(*methods, |method| {
to_str(method.ident) == method_name to_str(method.ident) == method_name
}) { }) {
Some(method) => { Some(method) => {
Some(pprust::fun_to_str( Some(pprust::fun_to_str(
method.decl, method.decl,
method.ident, method.ident,
method.tps, copy method.tps,
extract::interner() extract::interner()
)) ))
} }
@ -261,7 +262,7 @@ fn fold_impl(
let srv = fold.ctxt; let srv = fold.ctxt;
let (trait_types, self_ty) = do astsrv::exec(srv) |ctxt| { let (trait_types, self_ty) = do astsrv::exec(srv) |copy doc, ctxt| {
match ctxt.ast_map.get(doc.id()) { match ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
node: ast::item_impl(_, opt_trait_type, self_ty, _), _ node: ast::item_impl(_, opt_trait_type, self_ty, _), _
@ -279,7 +280,7 @@ fn fold_impl(
doc::ImplDoc { doc::ImplDoc {
trait_types: trait_types, trait_types: trait_types,
self_ty: self_ty, self_ty: self_ty,
methods: merge_methods(fold.ctxt, doc.id(), doc.methods), methods: merge_methods(fold.ctxt, doc.id(), copy doc.methods),
.. doc .. doc
} }
} }
@ -317,16 +318,16 @@ fn fold_type(
let srv = fold.ctxt; let srv = fold.ctxt;
doc::SimpleItemDoc { doc::SimpleItemDoc {
sig: do astsrv::exec(srv) |ctxt| { sig: do astsrv::exec(srv) |copy doc, ctxt| {
match ctxt.ast_map.get(doc.id()) { match ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@ast::item { ast_map::node_item(@ast::item {
ident: ident, ident: ident,
node: ast::item_ty(ty, params), _ node: ast::item_ty(ty, ref params), _
}, _) => { }, _) => {
Some(fmt!( Some(fmt!(
"type %s%s = %s", "type %s%s = %s",
to_str(ident), to_str(ident),
pprust::typarams_to_str(params, extract::interner()), pprust::typarams_to_str(*params, extract::interner()),
pprust::ty_to_str(ty, extract::interner()) pprust::ty_to_str(ty, extract::interner())
)) ))
} }
@ -350,7 +351,7 @@ fn fold_struct(
let srv = fold.ctxt; let srv = fold.ctxt;
doc::StructDoc { doc::StructDoc {
sig: do astsrv::exec(srv) |ctxt| { sig: do astsrv::exec(srv) |copy doc, ctxt| {
match ctxt.ast_map.get(doc.id()) { match ctxt.ast_map.get(doc.id()) {
ast_map::node_item(item, _) => { ast_map::node_item(item, _) => {
let item = strip_struct_extra_stuff(item); let item = strip_struct_extra_stuff(item);
@ -369,11 +370,11 @@ fn fold_struct(
/// should be a simple pprust::struct_to_str function that does /// should be a simple pprust::struct_to_str function that does
/// what I actually want /// what I actually want
fn strip_struct_extra_stuff(item: @ast::item) -> @ast::item { fn strip_struct_extra_stuff(item: @ast::item) -> @ast::item {
let node = match item.node { let node = match copy item.node {
ast::item_struct(def, tys) => { ast::item_struct(def, tys) => {
let def = @ast::struct_def { let def = @ast::struct_def {
dtor: None, // Remove the drop { } block dtor: None, // Remove the drop { } block
.. *def .. copy *def
}; };
ast::item_struct(def, tys) ast::item_struct(def, tys)
} }
@ -383,28 +384,28 @@ fn strip_struct_extra_stuff(item: @ast::item) -> @ast::item {
@ast::item { @ast::item {
attrs: ~[], // Remove the attributes attrs: ~[], // Remove the attributes
node: node, node: node,
.. *item .. copy *item
} }
} }
#[test] #[test]
fn should_add_struct_defs() { fn should_add_struct_defs() {
let doc = test::mk_doc(~"struct S { field: () }"); let doc = test::mk_doc(~"struct S { field: () }");
assert doc.cratemod().structs()[0].sig.get().contains("struct S {"); assert (&doc.cratemod().structs()[0].sig).get().contains("struct S {");
} }
#[test] #[test]
fn should_not_serialize_struct_drop_blocks() { fn should_not_serialize_struct_drop_blocks() {
// All we care about are the fields // All we care about are the fields
let doc = test::mk_doc(~"struct S { field: (), drop { } }"); let doc = test::mk_doc(~"struct S { field: (), drop { } }");
assert !doc.cratemod().structs()[0].sig.get().contains("drop"); assert !(&doc.cratemod().structs()[0].sig).get().contains("drop");
} }
#[test] #[test]
fn should_not_serialize_struct_attrs() { fn should_not_serialize_struct_attrs() {
// All we care about are the fields // All we care about are the fields
let doc = test::mk_doc(~"#[wut] struct S { field: () }"); let doc = test::mk_doc(~"#[wut] struct S { field: () }");
assert !doc.cratemod().structs()[0].sig.get().contains("wut"); assert !(&doc.cratemod().structs()[0].sig).get().contains("wut");
} }
#[cfg(test)] #[cfg(test)]
@ -415,7 +416,7 @@ pub mod test {
use tystr_pass::run; use tystr_pass::run;
pub fn mk_doc(source: ~str) -> doc::Doc { pub fn mk_doc(source: ~str) -> doc::Doc {
do astsrv::from_str(source) |srv| { do astsrv::from_str(copy source) |srv| {
let doc = extract::from_srv(srv, ~""); let doc = extract::from_srv(srv, ~"");
run(srv, doc) run(srv, doc)
} }

View File

@ -82,7 +82,7 @@ fn unindent(s: ~str) -> ~str {
let unindented = ~[str::trim(vec::head(lines))] let unindented = ~[str::trim(vec::head(lines))]
+ do par::map(vec::tail(lines)) |line| { + do par::map(vec::tail(lines)) |line| {
if str::is_whitespace(*line) { if str::is_whitespace(*line) {
*line copy *line
} else { } else {
assert str::len(*line) >= min_indent; assert str::len(*line) >= min_indent;
str::slice(*line, min_indent, str::len(*line)) str::slice(*line, min_indent, str::len(*line))
@ -90,7 +90,7 @@ fn unindent(s: ~str) -> ~str {
}; };
str::connect(unindented, ~"\n") str::connect(unindented, ~"\n")
} else { } else {
s copy s
} }
} }