Skip to content

Commit 63c16e9

Browse files
committed
rustdoc: Convert astsrv to pipes
1 parent e343abd commit 63c16e9

20 files changed

+122
-107
lines changed

src/librustdoc/astsrv.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ use core::prelude::*;
2222
use parse;
2323
use util;
2424

25-
use core::pipes::stream;
25+
use core::pipes::{stream, Chan, SharedChan, Port};
2626
use core::oldcomm;
2727
use core::vec;
28+
use core::ops::Drop;
2829
use rustc::back::link;
2930
use rustc::driver::driver;
3031
use rustc::driver::session::Session;
@@ -55,11 +56,15 @@ enum Msg {
5556
}
5657

5758
pub struct Srv {
58-
ch: oldcomm::Chan<Msg>
59+
ch: SharedChan<Msg>
5960
}
6061

6162
impl Srv: Clone {
62-
fn clone(&self) -> Srv { copy *self }
63+
fn clone(&self) -> Srv {
64+
Srv {
65+
ch: self.ch.clone()
66+
}
67+
}
6368
}
6469

6570
pub fn from_str<T>(source: ~str, owner: SrvOwner<T>) -> T {
@@ -72,18 +77,22 @@ pub fn from_file<T>(file: ~str, owner: SrvOwner<T>) -> T {
7277

7378
fn run<T>(owner: SrvOwner<T>, source: ~str, parse: Parser) -> T {
7479

80+
let (po, ch) = stream();
81+
82+
do task::spawn {
83+
act(&po, copy source, copy parse);
84+
}
85+
7586
let srv_ = Srv {
76-
ch: do util::spawn_listener |copy source, move parse, po| {
77-
act(po, copy source, copy parse);
78-
}
87+
ch: SharedChan(ch)
7988
};
8089

81-
let res = owner(srv_);
82-
oldcomm::send(srv_.ch, Exit);
90+
let res = owner(srv_.clone());
91+
srv_.ch.send(Exit);
8392
move res
8493
}
8594

86-
fn act(po: oldcomm::Port<Msg>, source: ~str, parse: Parser) {
95+
fn act(po: &Port<Msg>, source: ~str, parse: Parser) {
8796
let sess = build_session();
8897

8998
let ctxt = build_ctxt(
@@ -93,7 +102,7 @@ fn act(po: oldcomm::Port<Msg>, source: ~str, parse: Parser) {
93102

94103
let mut keep_going = true;
95104
while keep_going {
96-
match oldcomm::recv(po) {
105+
match po.recv() {
97106
HandleRequest(f) => {
98107
f(ctxt);
99108
}
@@ -112,7 +121,7 @@ pub fn exec<T:Owned>(
112121
let msg = HandleRequest(fn~(move f, ctxt: Ctxt) {
113122
ch.send(f(ctxt))
114123
});
115-
oldcomm::send(srv.ch, move msg);
124+
srv.ch.send(move msg);
116125
po.recv()
117126
}
118127

src/librustdoc/attr_pass.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ pub fn run(
4646
doc: doc::Doc
4747
) -> doc::Doc {
4848
let fold = Fold {
49+
ctxt: srv.clone(),
4950
fold_crate: fold_crate,
5051
fold_item: fold_item,
5152
fold_enum: fold_enum,
@@ -61,7 +62,7 @@ fn fold_crate(
6162
doc: doc::CrateDoc
6263
) -> doc::CrateDoc {
6364

64-
let srv = fold.ctxt;
65+
let srv = fold.ctxt.clone();
6566
let doc = fold::default_seq_fold_crate(fold, doc);
6667

6768
let attrs = do astsrv::exec(srv) |ctxt| {
@@ -92,7 +93,7 @@ fn fold_item(
9293
doc: doc::ItemDoc
9394
) -> doc::ItemDoc {
9495

95-
let srv = fold.ctxt;
96+
let srv = fold.ctxt.clone();
9697
let doc = fold::default_seq_fold_item(fold, doc);
9798

9899
let desc = if doc.id == ast::crate_node_id {
@@ -159,16 +160,16 @@ fn fold_enum(
159160
doc: doc::EnumDoc
160161
) -> doc::EnumDoc {
161162

162-
let srv = fold.ctxt;
163+
let srv = fold.ctxt.clone();
163164
let doc_id = doc.id();
164165
let doc = fold::default_seq_fold_enum(fold, doc);
165166

166167
doc::EnumDoc {
167-
variants: do par::map(doc.variants) |variant| {
168+
variants: do vec::map(doc.variants) |variant| {
168169
let variant = copy *variant;
169170
let desc = {
170171
let variant = copy variant;
171-
do astsrv::exec(srv) |ctxt| {
172+
do astsrv::exec(srv.clone()) |ctxt| {
172173
match ctxt.ast_map.get(doc_id) {
173174
ast_map::node_item(@ast::item {
174175
node: ast::item_enum(ref enum_definition, _), _
@@ -216,7 +217,7 @@ fn fold_trait(
216217
fold: &fold::Fold<astsrv::Srv>,
217218
doc: doc::TraitDoc
218219
) -> doc::TraitDoc {
219-
let srv = fold.ctxt;
220+
let srv = fold.ctxt.clone();
220221
let doc = fold::default_seq_fold_trait(fold, doc);
221222
222223
doc::TraitDoc {
@@ -293,7 +294,7 @@ fn fold_impl(
293294
fold: &fold::Fold<astsrv::Srv>,
294295
doc: doc::ImplDoc
295296
) -> doc::ImplDoc {
296-
let srv = fold.ctxt;
297+
let srv = fold.ctxt.clone();
297298
let doc = fold::default_seq_fold_impl(fold, doc);
298299

299300
doc::ImplDoc {
@@ -328,8 +329,8 @@ mod test {
328329

329330
pub fn mk_doc(source: ~str) -> doc::Doc {
330331
do astsrv::from_str(copy source) |srv| {
331-
let doc = extract::from_srv(srv, ~"");
332-
run(srv, doc)
332+
let doc = extract::from_srv(srv.clone(), ~"");
333+
run(srv.clone(), doc)
333334
}
334335
}
335336
}

src/librustdoc/desc_to_brief_pass.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ pub mod test {
111111

112112
pub fn mk_doc(source: ~str) -> doc::Doc {
113113
do astsrv::from_str(copy source) |srv| {
114-
let doc = extract::from_srv(srv, ~"");
115-
let doc = (attr_pass::mk_pass().f)(srv, doc);
116-
run(srv, doc)
114+
let doc = extract::from_srv(srv.clone(), ~"");
115+
let doc = (attr_pass::mk_pass().f)(srv.clone(), doc);
116+
run(srv.clone(), doc)
117117
}
118118
}
119119
}

src/librustdoc/fold.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,10 @@ pub fn default_any_fold_mod<T:Owned Clone>(
193193
fold: &Fold<T>,
194194
doc: doc::ModDoc
195195
) -> doc::ModDoc {
196-
let fold_copy = fold.clone();
197196
doc::ModDoc {
198197
item: (fold.fold_item)(fold, copy doc.item),
199-
items: par::map(doc.items, |ItemTag, move fold_copy| {
200-
fold_ItemTag(&fold_copy, copy *ItemTag)
198+
items: vec::map(doc.items, |ItemTag| {
199+
fold_ItemTag(fold, copy *ItemTag)
201200
}),
202201
.. doc
203202
}
@@ -220,11 +219,10 @@ pub fn default_par_fold_mod<T:Owned Clone>(
220219
fold: &Fold<T>,
221220
doc: doc::ModDoc
222221
) -> doc::ModDoc {
223-
let fold_copy = fold.clone();
224222
doc::ModDoc {
225223
item: (fold.fold_item)(fold, copy doc.item),
226-
items: par::map(doc.items, |ItemTag, move fold_copy| {
227-
fold_ItemTag(&fold_copy, copy *ItemTag)
224+
items: vec::map(doc.items, |ItemTag| {
225+
fold_ItemTag(fold, copy *ItemTag)
228226
}),
229227
.. doc
230228
}
@@ -234,11 +232,10 @@ pub fn default_any_fold_nmod<T:Owned Clone>(
234232
fold: &Fold<T>,
235233
doc: doc::NmodDoc
236234
) -> doc::NmodDoc {
237-
let fold_copy = fold.clone();
238235
doc::NmodDoc {
239236
item: (fold.fold_item)(fold, copy doc.item),
240-
fns: par::map(doc.fns, |FnDoc, move fold_copy| {
241-
(fold_copy.fold_fn)(&fold_copy, copy *FnDoc)
237+
fns: vec::map(doc.fns, |FnDoc| {
238+
(fold.fold_fn)(fold, copy *FnDoc)
242239
}),
243240
.. doc
244241
}
@@ -261,11 +258,10 @@ pub fn default_par_fold_nmod<T:Owned Clone>(
261258
fold: &Fold<T>,
262259
doc: doc::NmodDoc
263260
) -> doc::NmodDoc {
264-
let fold_copy = fold.clone();
265261
doc::NmodDoc {
266262
item: (fold.fold_item)(fold, copy doc.item),
267-
fns: par::map(doc.fns, |FnDoc, move fold_copy| {
268-
(fold_copy.fold_fn)(&fold_copy, copy *FnDoc)
263+
fns: vec::map(doc.fns, |FnDoc| {
264+
(fold.fold_fn)(fold, copy *FnDoc)
269265
}),
270266
.. doc
271267
}

src/librustdoc/markdown_index_pass.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -274,11 +274,11 @@ mod test {
274274
output_style: output_style,
275275
.. config::default_config(&Path("whatever"))
276276
};
277-
let doc = extract::from_srv(srv, ~"");
278-
let doc = (attr_pass::mk_pass().f)(srv, doc);
279-
let doc = (desc_to_brief_pass::mk_pass().f)(srv, doc);
280-
let doc = (path_pass::mk_pass().f)(srv, doc);
281-
run(srv, doc, config)
277+
let doc = extract::from_srv(srv.clone(), ~"");
278+
let doc = (attr_pass::mk_pass().f)(srv.clone(), doc);
279+
let doc = (desc_to_brief_pass::mk_pass().f)(srv.clone(), doc);
280+
let doc = (path_pass::mk_pass().f)(srv.clone(), doc);
281+
run(srv.clone(), doc, config)
282282
}
283283
}
284284
}

src/librustdoc/markdown_pass.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -867,25 +867,25 @@ mod test {
867867
.. config::default_config(&Path("whatever"))
868868
};
869869

870-
let doc = extract::from_srv(srv, ~"");
870+
let doc = extract::from_srv(srv.clone(), ~"");
871871
debug!("doc (extract): %?", doc);
872-
let doc = (tystr_pass::mk_pass().f)(srv, doc);
872+
let doc = (tystr_pass::mk_pass().f)(srv.clone(), doc);
873873
debug!("doc (tystr): %?", doc);
874-
let doc = (path_pass::mk_pass().f)(srv, doc);
874+
let doc = (path_pass::mk_pass().f)(srv.clone(), doc);
875875
debug!("doc (path): %?", doc);
876-
let doc = (attr_pass::mk_pass().f)(srv, doc);
876+
let doc = (attr_pass::mk_pass().f)(srv.clone(), doc);
877877
debug!("doc (attr): %?", doc);
878-
let doc = (desc_to_brief_pass::mk_pass().f)(srv, doc);
878+
let doc = (desc_to_brief_pass::mk_pass().f)(srv.clone(), doc);
879879
debug!("doc (desc_to_brief): %?", doc);
880-
let doc = (unindent_pass::mk_pass().f)(srv, doc);
880+
let doc = (unindent_pass::mk_pass().f)(srv.clone(), doc);
881881
debug!("doc (unindent): %?", doc);
882-
let doc = (sectionalize_pass::mk_pass().f)(srv, doc);
882+
let doc = (sectionalize_pass::mk_pass().f)(srv.clone(), doc);
883883
debug!("doc (trim): %?", doc);
884-
let doc = (trim_pass::mk_pass().f)(srv, doc);
884+
let doc = (trim_pass::mk_pass().f)(srv.clone(), doc);
885885
debug!("doc (sectionalize): %?", doc);
886-
let doc = (markdown_index_pass::mk_pass(config).f)(srv, doc);
886+
let doc = (markdown_index_pass::mk_pass(config).f)(srv.clone(), doc);
887887
debug!("doc (index): %?", doc);
888-
(srv, doc)
888+
(srv.clone(), doc)
889889
}
890890
}
891891

src/librustdoc/markdown_writer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,8 @@ mod test {
279279
280280
pub fn mk_doc(name: ~str, source: ~str) -> doc::Doc {
281281
do astsrv::from_str(source) |srv| {
282-
let doc = extract::from_srv(srv, copy name);
283-
let doc = (path_pass::mk_pass().f)(srv, doc);
282+
let doc = extract::from_srv(srv.clone(), copy name);
283+
let doc = (path_pass::mk_pass().f)(srv.clone(), doc);
284284
doc
285285
}
286286
}

src/librustdoc/page_pass.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ mod test {
196196
source: ~str
197197
) -> doc::Doc {
198198
do astsrv::from_str(copy source) |srv| {
199-
let doc = extract::from_srv(srv, ~"");
200-
run(srv, doc, output_style)
199+
let doc = extract::from_srv(srv.clone(), ~"");
200+
run(srv.clone(), doc, output_style)
201201
}
202202
}
203203

src/librustdoc/pass.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn run_passes(
3333
log(debug, fmt!("pass #%d", passno));
3434
passno += 1;
3535
do time(copy pass.name) {
36-
(pass.f)(srv, copy doc)
36+
(pass.f)(srv.clone(), copy doc)
3737
}
3838
}
3939
}
@@ -90,7 +90,7 @@ fn test_run_passes() {
9090
f: pass2
9191
}
9292
];
93-
let doc = extract::from_srv(srv, ~"one");
93+
let doc = extract::from_srv(srv.clone(), ~"one");
9494
let doc = run_passes(srv, doc, passes);
9595
assert doc.cratemod().name() == ~"onetwothree";
9696
}

src/librustdoc/path_pass.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ struct Ctxt {
3535
}
3636

3737
impl Ctxt: Clone {
38-
fn clone(&self) -> Ctxt { copy *self }
38+
fn clone(&self) -> Ctxt {
39+
Ctxt {
40+
srv: self.srv.clone(),
41+
path: copy self.path
42+
}
43+
}
3944
}
4045

4146
#[allow(non_implicitly_copyable_typarams)]
@@ -45,6 +50,7 @@ fn run(srv: astsrv::Srv, doc: doc::Doc) -> doc::Doc {
4550
mut path: ~[]
4651
};
4752
let fold = Fold {
53+
ctxt: ctxt.clone(),
4854
fold_item: fold_item,
4955
fold_mod: fold_mod,
5056
fold_nmod: fold_nmod,
@@ -89,8 +95,8 @@ fn fold_nmod(fold: &fold::Fold<Ctxt>, doc: doc::NmodDoc) -> doc::NmodDoc {
8995
fn should_record_mod_paths() {
9096
let source = ~"mod a { mod b { mod c { } } mod d { mod e { } } }";
9197
do astsrv::from_str(source) |srv| {
92-
let doc = extract::from_srv(srv, ~"");
93-
let doc = run(srv, doc);
98+
let doc = extract::from_srv(srv.clone(), ~"");
99+
let doc = run(srv.clone(), doc);
94100
assert doc.cratemod().mods()[0].mods()[0].mods()[0].path()
95101
== ~[~"a", ~"b"];
96102
assert doc.cratemod().mods()[0].mods()[1].mods()[0].path()
@@ -102,8 +108,8 @@ fn should_record_mod_paths() {
102108
fn should_record_fn_paths() {
103109
let source = ~"mod a { fn b() { } }";
104110
do astsrv::from_str(source) |srv| {
105-
let doc = extract::from_srv(srv, ~"");
106-
let doc = run(srv, doc);
111+
let doc = extract::from_srv(srv.clone(), ~"");
112+
let doc = run(srv.clone(), doc);
107113
assert doc.cratemod().mods()[0].fns()[0].path() == ~[~"a"];
108114
}
109115
}
@@ -112,8 +118,8 @@ fn should_record_fn_paths() {
112118
fn should_record_foreign_mod_paths() {
113119
let source = ~"mod a { extern mod b { } }";
114120
do astsrv::from_str(source) |srv| {
115-
let doc = extract::from_srv(srv, ~"");
116-
let doc = run(srv, doc);
121+
let doc = extract::from_srv(srv.clone(), ~"");
122+
let doc = run(srv.clone(), doc);
117123
assert doc.cratemod().mods()[0].nmods()[0].path() == ~[~"a"];
118124
}
119125
}
@@ -122,8 +128,8 @@ fn should_record_foreign_mod_paths() {
122128
fn should_record_foreign_fn_paths() {
123129
let source = ~"extern mod a { fn b(); }";
124130
do astsrv::from_str(source) |srv| {
125-
let doc = extract::from_srv(srv, ~"");
126-
let doc = run(srv, doc);
131+
let doc = extract::from_srv(srv.clone(), ~"");
132+
let doc = run(srv.clone(), doc);
127133
assert doc.cratemod().nmods()[0].fns[0].path() == ~[~"a"];
128134
}
129135
}

0 commit comments

Comments
 (0)