Skip to content

Commit 16e3546

Browse files
committed
---
yaml --- r: 275807 b: refs/heads/auto c: d6bcc04 h: refs/heads/master i: 275805: 84b3702 275803: 6fd6ae9 275799: ec05bd1 275791: ff74bf9 275775: 53a33f8
1 parent a05bb3b commit 16e3546

File tree

5 files changed

+268
-249
lines changed

5 files changed

+268
-249
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
88
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
99
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1010
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
11-
refs/heads/auto: f61b40446777f9ef9b32c19d8df24ded855fd082
11+
refs/heads/auto: d6bcc04c521bcdf82b7727ec35e3f6ce0cbb5b0f
1212
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1313
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336
1414
refs/tags/0.2: 1754d02027f2924bed83b0160ee340c7f41d5ea1

branches/auto/src/librustc/hir/map/collector.rs

Lines changed: 3 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
1+
// Copyright 2015-2016 The Rust Project Developers. See the COPYRIGHT
22
// file at the top-level directory of this distribution and at
33
// http://rust-lang.org/COPYRIGHT.
44
//
@@ -13,10 +13,10 @@ use super::MapEntry::*;
1313

1414
use hir::*;
1515
use hir::intravisit::Visitor;
16-
use hir::def_id::{CRATE_DEF_INDEX, DefId, DefIndex};
16+
use hir::def_id::DefId;
1717
use middle::cstore::InlinedItem;
1818
use std::iter::repeat;
19-
use syntax::ast::{NodeId, CRATE_NODE_ID, DUMMY_NODE_ID};
19+
use syntax::ast::{NodeId, CRATE_NODE_ID};
2020
use syntax::codemap::Span;
2121

2222
/// A Visitor that walks over the HIR and collects Node's into a HIR map.
@@ -26,248 +26,6 @@ pub struct NodeCollector<'ast> {
2626
pub parent_node: NodeId,
2727
}
2828

29-
pub struct DefCollector<'ast> {
30-
pub krate: &'ast Crate,
31-
pub map: &'ast [MapEntry<'ast>],
32-
pub definitions: Definitions,
33-
pub parent_def: Option<DefIndex>,
34-
}
35-
36-
impl<'ast> DefCollector<'ast> {
37-
pub fn root(krate: &'ast Crate, map: &'ast [MapEntry<'ast>]) -> DefCollector<'ast> {
38-
let mut collector = DefCollector {
39-
krate: krate,
40-
map: map,
41-
definitions: Definitions::new(),
42-
parent_def: None,
43-
};
44-
let result = collector.create_def_with_parent(None, CRATE_NODE_ID, DefPathData::CrateRoot);
45-
assert_eq!(result, CRATE_DEF_INDEX);
46-
47-
collector.create_def_with_parent(Some(CRATE_DEF_INDEX), DUMMY_NODE_ID, DefPathData::Misc);
48-
49-
collector
50-
}
51-
52-
pub fn extend(krate: &'ast Crate,
53-
parent_node: NodeId,
54-
parent_def_path: DefPath,
55-
parent_def_id: DefId,
56-
map: &'ast [MapEntry<'ast>],
57-
definitions: Definitions)
58-
-> DefCollector<'ast> {
59-
let mut collector = DefCollector {
60-
krate: krate,
61-
map: map,
62-
parent_def: None,
63-
definitions: definitions,
64-
};
65-
66-
assert_eq!(parent_def_path.krate, parent_def_id.krate);
67-
let root_path = Box::new(InlinedRootPath {
68-
data: parent_def_path.data,
69-
def_id: parent_def_id,
70-
});
71-
72-
let def = collector.create_def(parent_node, DefPathData::InlinedRoot(root_path));
73-
collector.parent_def = Some(def);
74-
75-
collector
76-
}
77-
78-
fn parent_def(&self) -> Option<DefIndex> {
79-
self.parent_def
80-
}
81-
82-
fn create_def(&mut self, node_id: NodeId, data: DefPathData) -> DefIndex {
83-
let parent_def = self.parent_def();
84-
debug!("create_def(node_id={:?}, data={:?}, parent_def={:?})", node_id, data, parent_def);
85-
self.definitions.create_def_with_parent(parent_def, node_id, data)
86-
}
87-
88-
fn create_def_with_parent(&mut self,
89-
parent: Option<DefIndex>,
90-
node_id: NodeId,
91-
data: DefPathData)
92-
-> DefIndex {
93-
self.definitions.create_def_with_parent(parent, node_id, data)
94-
}
95-
}
96-
97-
impl<'ast> Visitor<'ast> for DefCollector<'ast> {
98-
/// Because we want to track parent items and so forth, enable
99-
/// deep walking so that we walk nested items in the context of
100-
/// their outer items.
101-
fn visit_nested_item(&mut self, item: ItemId) {
102-
debug!("visit_nested_item: {:?}", item);
103-
self.visit_item(self.krate.item(item.id))
104-
}
105-
106-
fn visit_item(&mut self, i: &'ast Item) {
107-
debug!("visit_item: {:?}", i);
108-
109-
// Pick the def data. This need not be unique, but the more
110-
// information we encapsulate into
111-
let def_data = match i.node {
112-
ItemDefaultImpl(..) | ItemImpl(..) =>
113-
DefPathData::Impl,
114-
ItemEnum(..) | ItemStruct(..) | ItemTrait(..) |
115-
ItemExternCrate(..) | ItemForeignMod(..) | ItemTy(..) =>
116-
DefPathData::TypeNs(i.name),
117-
ItemMod(..) =>
118-
DefPathData::Module(i.name),
119-
ItemStatic(..) | ItemConst(..) | ItemFn(..) =>
120-
DefPathData::ValueNs(i.name),
121-
ItemUse(..) =>
122-
DefPathData::Misc,
123-
};
124-
125-
let def = self.create_def(i.id, def_data);
126-
127-
let parent_def = self.parent_def;
128-
self.parent_def = Some(def);
129-
130-
match i.node {
131-
ItemEnum(ref enum_definition, _) => {
132-
for v in &enum_definition.variants {
133-
let variant_def_index =
134-
self.create_def(v.node.data.id(),
135-
DefPathData::EnumVariant(v.node.name));
136-
137-
for field in v.node.data.fields() {
138-
self.create_def_with_parent(
139-
Some(variant_def_index),
140-
field.id,
141-
DefPathData::Field(field.name));
142-
}
143-
}
144-
}
145-
ItemStruct(ref struct_def, _) => {
146-
// If this is a tuple-like struct, register the constructor.
147-
if !struct_def.is_struct() {
148-
self.create_def(struct_def.id(),
149-
DefPathData::StructCtor);
150-
}
151-
152-
for field in struct_def.fields() {
153-
self.create_def(field.id, DefPathData::Field(field.name));
154-
}
155-
}
156-
_ => {}
157-
}
158-
intravisit::walk_item(self, i);
159-
self.parent_def = parent_def;
160-
}
161-
162-
fn visit_foreign_item(&mut self, foreign_item: &'ast ForeignItem) {
163-
let def = self.create_def(foreign_item.id, DefPathData::ValueNs(foreign_item.name));
164-
165-
let parent_def = self.parent_def;
166-
self.parent_def = Some(def);
167-
intravisit::walk_foreign_item(self, foreign_item);
168-
self.parent_def = parent_def;
169-
}
170-
171-
fn visit_generics(&mut self, generics: &'ast Generics) {
172-
for ty_param in generics.ty_params.iter() {
173-
self.create_def(ty_param.id,
174-
DefPathData::TypeParam(ty_param.name));
175-
}
176-
177-
intravisit::walk_generics(self, generics);
178-
}
179-
180-
fn visit_trait_item(&mut self, ti: &'ast TraitItem) {
181-
let def_data = match ti.node {
182-
MethodTraitItem(..) | ConstTraitItem(..) => DefPathData::ValueNs(ti.name),
183-
TypeTraitItem(..) => DefPathData::TypeNs(ti.name),
184-
};
185-
186-
let def = self.create_def(ti.id, def_data);
187-
188-
let parent_def = self.parent_def;
189-
self.parent_def = Some(def);
190-
191-
match ti.node {
192-
ConstTraitItem(_, Some(ref expr)) => {
193-
self.create_def(expr.id, DefPathData::Initializer);
194-
}
195-
_ => { }
196-
}
197-
198-
intravisit::walk_trait_item(self, ti);
199-
200-
self.parent_def = parent_def;
201-
}
202-
203-
fn visit_impl_item(&mut self, ii: &'ast ImplItem) {
204-
let def_data = match ii.node {
205-
ImplItemKind::Method(..) | ImplItemKind::Const(..) => DefPathData::ValueNs(ii.name),
206-
ImplItemKind::Type(..) => DefPathData::TypeNs(ii.name),
207-
};
208-
209-
let def = self.create_def(ii.id, def_data);
210-
211-
let parent_def = self.parent_def;
212-
self.parent_def = Some(def);
213-
214-
match ii.node {
215-
ImplItemKind::Const(_, ref expr) => {
216-
self.create_def(expr.id, DefPathData::Initializer);
217-
}
218-
_ => { }
219-
}
220-
221-
intravisit::walk_impl_item(self, ii);
222-
223-
self.parent_def = parent_def;
224-
}
225-
226-
fn visit_pat(&mut self, pat: &'ast Pat) {
227-
let maybe_binding = match pat.node {
228-
PatKind::Ident(_, id, _) => Some(id.node),
229-
_ => None
230-
};
231-
232-
let parent_def = self.parent_def;
233-
if let Some(id) = maybe_binding {
234-
let def = self.create_def(pat.id, DefPathData::Binding(id.name));
235-
self.parent_def = Some(def);
236-
}
237-
238-
intravisit::walk_pat(self, pat);
239-
self.parent_def = parent_def;
240-
}
241-
242-
fn visit_expr(&mut self, expr: &'ast Expr) {
243-
let parent_def = self.parent_def;
244-
245-
if let ExprClosure(..) = expr.node {
246-
let def = self.create_def(expr.id, DefPathData::ClosureExpr);
247-
self.parent_def = Some(def);
248-
}
249-
250-
intravisit::walk_expr(self, expr);
251-
self.parent_def = parent_def;
252-
}
253-
254-
fn visit_stmt(&mut self, stmt: &'ast Stmt) {
255-
intravisit::walk_stmt(self, stmt);
256-
}
257-
258-
fn visit_block(&mut self, block: &'ast Block) {
259-
intravisit::walk_block(self, block);
260-
}
261-
262-
fn visit_lifetime_def(&mut self, def: &'ast LifetimeDef) {
263-
self.create_def(def.lifetime.id, DefPathData::LifetimeDef(def.lifetime.name));
264-
}
265-
266-
fn visit_macro_def(&mut self, macro_def: &'ast MacroDef) {
267-
self.create_def(macro_def.id, DefPathData::MacroDef(macro_def.name));
268-
}
269-
}
270-
27129
impl<'ast> NodeCollector<'ast> {
27230
pub fn root(krate: &'ast Crate) -> NodeCollector<'ast> {
27331
let mut collector = NodeCollector {

0 commit comments

Comments
 (0)