Skip to content

Commit 84f03cc

Browse files
committed
---
yaml --- r: 83104 b: refs/heads/auto c: 45e2cf3 h: refs/heads/master v: v3
1 parent d7a90a0 commit 84f03cc

File tree

9 files changed

+98
-168
lines changed

9 files changed

+98
-168
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1313
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1414
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1515
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
16-
refs/heads/auto: 4d2a402555aedd04affc978ef05324df7550fd07
16+
refs/heads/auto: 45e2cf39a21b6317e01adff05a3c83c628913edc
1717
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1818
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1919
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/src/librustc/driver/driver.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ pub fn phase_2_configure_and_expand(sess: Session,
199199

200200
pub struct CrateAnalysis {
201201
exp_map2: middle::resolve::ExportMap2,
202-
exported_items: middle::privacy::ExportedItems,
203202
ty_cx: ty::ctxt,
204203
maps: astencode::Maps,
205204
reachable: @mut HashSet<ast::NodeId>
@@ -311,7 +310,6 @@ pub fn phase_3_run_analysis_passes(sess: Session,
311310
CrateAnalysis {
312311
exp_map2: exp_map2,
313312
ty_cx: ty_cx,
314-
exported_items: exported_items,
315313
maps: astencode::Maps {
316314
root_map: root_map,
317315
method_map: method_map,

branches/auto/src/librustc/middle/trans/intrinsic.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,11 @@ pub fn trans_intrinsic(ccx: @mut CrateContext,
222222
}
223223

224224
match name {
225+
"abort" => {
226+
let llfn = bcx.ccx().intrinsics.get_copy(&("llvm.trap"));
227+
Call(bcx, llfn, [], []);
228+
RetVoid(bcx);
229+
}
225230
"size_of" => {
226231
let tp_ty = substs.tys[0];
227232
let lltp_ty = type_of::type_of(ccx, tp_ty);

branches/auto/src/librustc/middle/typeck/check/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3585,6 +3585,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
35853585

35863586
} else {
35873587
match name {
3588+
"abort" => (0, ~[], ty::mk_bot()),
35883589
"size_of" |
35893590
"pref_align_of" | "min_align_of" => (1u, ~[], ty::mk_uint()),
35903591
"init" => (1u, ~[], param(ccx, 0u)),

branches/auto/src/librustdoc/core.rs

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@
1010

1111
use rustc;
1212
use rustc::{driver, middle};
13-
use rustc::middle::privacy;
1413

1514
use syntax::ast;
16-
use syntax::ast_util::is_local;
1715
use syntax::diagnostic;
1816
use syntax::parse;
1917
use syntax;
2018

2119
use std::os;
2220
use std::local_data;
23-
use std::hashmap::HashMap;
2421

2522
use visit_ast::RustdocVisitor;
2623
use clean;
@@ -32,19 +29,10 @@ pub struct DocContext {
3229
sess: driver::session::Session
3330
}
3431

35-
pub struct CrateAnalysis {
36-
exported_items: privacy::ExportedItems,
37-
reexports: HashMap<ast::NodeId, ~[ast::NodeId]>,
38-
}
39-
4032
/// Parses, resolves, and typechecks the given crate
41-
fn get_ast_and_resolve(cpath: &Path,
42-
libs: ~[Path]) -> (DocContext, CrateAnalysis) {
33+
fn get_ast_and_resolve(cpath: &Path, libs: ~[Path]) -> DocContext {
4334
use syntax::codemap::dummy_spanned;
44-
use rustc::driver::driver::{file_input, build_configuration,
45-
phase_1_parse_input,
46-
phase_2_configure_and_expand,
47-
phase_3_run_analysis_passes};
35+
use rustc::driver::driver::*;
4836

4937
let parsesess = parse::new_parse_sess(None);
5038
let input = file_input(cpath.clone());
@@ -72,26 +60,14 @@ fn get_ast_and_resolve(cpath: &Path,
7260

7361
let mut crate = phase_1_parse_input(sess, cfg.clone(), &input);
7462
crate = phase_2_configure_and_expand(sess, cfg, crate);
75-
let driver::driver::CrateAnalysis {
76-
exported_items, ty_cx, exp_map2, _
77-
} = phase_3_run_analysis_passes(sess, &crate);
78-
79-
let mut reexports = HashMap::new();
80-
for (&module, nodes) in exp_map2.iter() {
81-
reexports.insert(module, nodes.iter()
82-
.filter(|e| e.reexport && is_local(e.def_id))
83-
.map(|e| e.def_id.node)
84-
.to_owned_vec());
85-
}
63+
let analysis = phase_3_run_analysis_passes(sess, &crate);
8664

8765
debug2!("crate: {:?}", crate);
88-
return (DocContext { crate: crate, tycx: ty_cx, sess: sess },
89-
CrateAnalysis { reexports: reexports, exported_items: exported_items });
66+
DocContext { crate: crate, tycx: analysis.ty_cx, sess: sess }
9067
}
9168

92-
pub fn run_core (libs: ~[Path], path: &Path) -> (clean::Crate, CrateAnalysis) {
93-
let (ctxt, analysis) = get_ast_and_resolve(path, libs);
94-
let ctxt = @ctxt;
69+
pub fn run_core (libs: ~[Path], path: &Path) -> clean::Crate {
70+
let ctxt = @get_ast_and_resolve(path, libs);
9571
debug2!("defmap:");
9672
for (k, v) in ctxt.tycx.def_map.iter() {
9773
debug2!("{:?}: {:?}", k, v);
@@ -101,5 +77,5 @@ pub fn run_core (libs: ~[Path], path: &Path) -> (clean::Crate, CrateAnalysis) {
10177
let v = @mut RustdocVisitor::new();
10278
v.visit(&ctxt.crate);
10379

104-
(v.clean(), analysis)
80+
v.clean()
10581
}

branches/auto/src/librustdoc/html/render.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ pub fn run(mut crate: clean::Crate, dst: Path) {
220220
};
221221
mkdir(&cx.dst);
222222

223-
match crate.module.as_ref().map(|m| m.doc_list().unwrap_or(&[])) {
223+
match crate.module.get_ref().doc_list() {
224224
Some(attrs) => {
225225
for attr in attrs.iter() {
226226
match *attr {
@@ -582,7 +582,7 @@ impl DocFolder for Cache {
582582
clean::StructItem(*) | clean::EnumItem(*) |
583583
clean::TypedefItem(*) | clean::TraitItem(*) |
584584
clean::FunctionItem(*) | clean::ModuleItem(*) |
585-
clean::ForeignFunctionItem(*) | clean::VariantItem(*) => {
585+
clean::VariantItem(*) => {
586586
self.paths.insert(item.id, (self.stack.clone(), shortty(&item)));
587587
}
588588
_ => {}

branches/auto/src/librustdoc/passes.rs

Lines changed: 78 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@
99
// except according to those terms.
1010

1111
use std::num;
12-
use std::cell::Cell;
1312
use std::uint;
1413
use std::hashmap::HashSet;
15-
use std::local_data;
1614

1715
use syntax::ast;
1816

19-
use core;
2017
use clean;
2118
use clean::Item;
2219
use plugins;
@@ -54,156 +51,109 @@ pub fn strip_hidden(crate: clean::Crate) -> plugins::PluginResult {
5451

5552
/// Strip private items from the point of view of a crate or externally from a
5653
/// crate, specified by the `xcrate` flag.
57-
pub fn strip_private(crate: clean::Crate) -> plugins::PluginResult {
54+
pub fn strip_private(mut crate: clean::Crate) -> plugins::PluginResult {
5855
// This stripper collects all *retained* nodes.
59-
let mut retained = HashSet::new();
60-
let crate = Cell::new(crate);
61-
let exported_items = do local_data::get(super::analysiskey) |analysis| {
62-
let analysis = analysis.unwrap();
63-
let mut exported_items = analysis.exported_items.clone();
64-
{
65-
let mut finder = ExportedItemsFinder {
66-
exported_items: &mut exported_items,
67-
analysis: analysis,
68-
};
69-
let c = finder.fold_crate(crate.take());
70-
crate.put_back(c);
71-
}
72-
exported_items
73-
};
74-
let mut crate = crate.take();
75-
76-
// strip all private items
77-
{
78-
let mut stripper = Stripper {
79-
retained: &mut retained,
80-
exported_items: &exported_items,
81-
};
82-
crate = stripper.fold_crate(crate);
83-
}
84-
85-
// strip all private implementations of traits
86-
{
87-
let mut stripper = ImplStripper(&retained);
88-
crate = stripper.fold_crate(crate);
89-
}
90-
(crate, None)
91-
}
92-
93-
struct ExportedItemsFinder<'self> {
94-
exported_items: &'self mut HashSet<ast::NodeId>,
95-
analysis: &'self core::CrateAnalysis,
96-
}
97-
98-
impl<'self> fold::DocFolder for ExportedItemsFinder<'self> {
99-
fn fold_item(&mut self, i: Item) -> Option<Item> {
100-
match i.inner {
101-
clean::ModuleItem(*) => {
102-
if self.analysis.exported_items.contains(&i.id) {
103-
match self.analysis.reexports.find(&i.id) {
104-
Some(l) => {
105-
for &id in l.iter() {
106-
self.exported_items.insert(id);
107-
}
108-
}
109-
None => {}
56+
struct Stripper<'self>(&'self mut HashSet<ast::NodeId>);
57+
impl<'self> fold::DocFolder for Stripper<'self> {
58+
fn fold_item(&mut self, i: Item) -> Option<Item> {
59+
match i.inner {
60+
// These items can all get re-exported
61+
clean::TypedefItem(*) | clean::StaticItem(*) |
62+
clean::StructItem(*) | clean::EnumItem(*) |
63+
clean::TraitItem(*) | clean::FunctionItem(*) |
64+
clean::ViewItemItem(*) | clean::MethodItem(*) |
65+
clean::ForeignFunctionItem(*) | clean::ForeignStaticItem(*) => {
66+
// XXX: re-exported items should get surfaced in the docs as
67+
// well (using the output of resolve analysis)
68+
if i.visibility != Some(ast::public) {
69+
return None;
11070
}
11171
}
112-
}
113-
_ => {}
114-
}
115-
return self.fold_item_recur(i);
116-
}
117-
}
118-
119-
struct Stripper<'self> {
120-
retained: &'self mut HashSet<ast::NodeId>,
121-
exported_items: &'self HashSet<ast::NodeId>,
122-
}
123-
124-
impl<'self> fold::DocFolder for Stripper<'self> {
125-
fn fold_item(&mut self, i: Item) -> Option<Item> {
126-
match i.inner {
127-
// These items can all get re-exported
128-
clean::TypedefItem(*) | clean::StaticItem(*) |
129-
clean::StructItem(*) | clean::EnumItem(*) |
130-
clean::TraitItem(*) | clean::FunctionItem(*) |
131-
clean::VariantItem(*) | clean::MethodItem(*) |
132-
clean::ForeignFunctionItem(*) | clean::ForeignStaticItem(*) => {
133-
if !self.exported_items.contains(&i.id) {
134-
return None;
135-
}
136-
}
13772

138-
clean::ViewItemItem(*) | clean::StructFieldItem(*) => {
139-
if i.visibility != Some(ast::public) {
140-
return None;
73+
// These are public-by-default (if the enum/struct was public)
74+
clean::VariantItem(*) | clean::StructFieldItem(*) => {
75+
if i.visibility == Some(ast::private) {
76+
return None;
77+
}
14178
}
142-
}
14379

144-
// handled below
145-
clean::ModuleItem(*) => {}
80+
// handled below
81+
clean::ModuleItem(*) => {}
14682

147-
// impls/tymethods have no control over privacy
148-
clean::ImplItem(*) | clean::TyMethodItem(*) => {}
149-
}
83+
// impls/tymethods have no control over privacy
84+
clean::ImplItem(*) | clean::TyMethodItem(*) => {}
85+
}
15086

151-
let fastreturn = match i.inner {
152-
// nothing left to do for traits (don't want to filter their
153-
// methods out, visibility controlled by the trait)
154-
clean::TraitItem(*) => true,
87+
let fastreturn = match i.inner {
88+
// nothing left to do for traits (don't want to filter their
89+
// methods out, visibility controlled by the trait)
90+
clean::TraitItem(*) => true,
15591

156-
// implementations of traits are always public.
157-
clean::ImplItem(ref imp) if imp.trait_.is_some() => true,
92+
// implementations of traits are always public.
93+
clean::ImplItem(ref imp) if imp.trait_.is_some() => true,
15894

159-
_ => false,
160-
};
95+
_ => false,
96+
};
16197

162-
let i = if fastreturn {
163-
self.retained.insert(i.id);
164-
return Some(i);
165-
} else {
166-
self.fold_item_recur(i)
167-
};
98+
let i = if fastreturn {
99+
self.insert(i.id);
100+
return Some(i);
101+
} else {
102+
self.fold_item_recur(i)
103+
};
168104

169-
match i {
170-
Some(i) => {
171-
match i.inner {
172-
// emptied modules/impls have no need to exist
173-
clean::ModuleItem(ref m) if m.items.len() == 0 => None,
174-
clean::ImplItem(ref i) if i.methods.len() == 0 => None,
175-
_ => {
176-
self.retained.insert(i.id);
177-
Some(i)
105+
match i {
106+
Some(i) => {
107+
match i.inner {
108+
// emptied modules/impls have no need to exist
109+
clean::ModuleItem(ref m) if m.items.len() == 0 => None,
110+
clean::ImplItem(ref i) if i.methods.len() == 0 => None,
111+
_ => {
112+
self.insert(i.id);
113+
Some(i)
114+
}
178115
}
179116
}
117+
None => None,
180118
}
181-
None => None,
182119
}
183120
}
184-
}
185121

186-
// This stripper discards all private impls of traits
187-
struct ImplStripper<'self>(&'self HashSet<ast::NodeId>);
188-
impl<'self> fold::DocFolder for ImplStripper<'self> {
189-
fn fold_item(&mut self, i: Item) -> Option<Item> {
190-
match i.inner {
191-
clean::ImplItem(ref imp) => {
192-
match imp.trait_ {
193-
Some(clean::ResolvedPath{ id, _ }) => {
194-
if !self.contains(&id) {
195-
return None;
122+
// This stripper discards all private impls of traits
123+
struct ImplStripper<'self>(&'self HashSet<ast::NodeId>);
124+
impl<'self> fold::DocFolder for ImplStripper<'self> {
125+
fn fold_item(&mut self, i: Item) -> Option<Item> {
126+
match i.inner {
127+
clean::ImplItem(ref imp) => {
128+
match imp.trait_ {
129+
Some(clean::ResolvedPath{ id, _ }) => {
130+
if !self.contains(&id) {
131+
return None;
132+
}
196133
}
134+
Some(*) | None => {}
197135
}
198-
Some(*) | None => {}
199136
}
137+
_ => {}
200138
}
201-
_ => {}
139+
self.fold_item_recur(i)
202140
}
203-
self.fold_item_recur(i)
204141
}
205-
}
206142

143+
let mut retained = HashSet::new();
144+
// First, strip all private items
145+
{
146+
let mut stripper = Stripper(&mut retained);
147+
crate = stripper.fold_crate(crate);
148+
}
149+
150+
// Next, strip all private implementations of traits
151+
{
152+
let mut stripper = ImplStripper(&retained);
153+
crate = stripper.fold_crate(crate);
154+
}
155+
(crate, None)
156+
}
207157

208158
pub fn unindent_comments(crate: clean::Crate) -> plugins::PluginResult {
209159
struct CommentCleaner;

0 commit comments

Comments
 (0)