|
1 |
| -use crate::hir::map::definitions::*; |
2 |
| -use crate::hir::def_id::DefIndex; |
3 |
| - |
| 1 | +use log::debug; |
| 2 | +use rustc::hir::map::definitions::*; |
| 3 | +use rustc::hir::def_id::DefIndex; |
4 | 4 | use syntax::ast::*;
|
5 | 5 | use syntax::visit;
|
6 | 6 | use syntax::symbol::{kw, sym};
|
7 | 7 | use syntax::token::{self, Token};
|
| 8 | +use syntax_expand::expand::AstFragment; |
8 | 9 | use syntax_pos::hygiene::ExpnId;
|
9 | 10 | use syntax_pos::Span;
|
10 | 11 |
|
| 12 | +crate fn collect_definitions( |
| 13 | + definitions: &mut Definitions, |
| 14 | + fragment: &AstFragment, |
| 15 | + expansion: ExpnId, |
| 16 | +) { |
| 17 | + let parent_def = definitions.invocation_parent(expansion); |
| 18 | + fragment.visit_with(&mut DefCollector { definitions, parent_def, expansion }); |
| 19 | +} |
| 20 | + |
11 | 21 | /// Creates `DefId`s for nodes in the AST.
|
12 |
| -pub struct DefCollector<'a> { |
| 22 | +struct DefCollector<'a> { |
13 | 23 | definitions: &'a mut Definitions,
|
14 | 24 | parent_def: DefIndex,
|
15 | 25 | expansion: ExpnId,
|
16 | 26 | }
|
17 | 27 |
|
18 | 28 | impl<'a> DefCollector<'a> {
|
19 |
| - pub fn new(definitions: &'a mut Definitions, expansion: ExpnId) -> Self { |
20 |
| - let parent_def = definitions.invocation_parent(expansion); |
21 |
| - DefCollector { definitions, parent_def, expansion } |
22 |
| - } |
23 |
| - |
24 | 29 | fn create_def(&mut self,
|
25 | 30 | node_id: NodeId,
|
26 | 31 | data: DefPathData,
|
@@ -82,7 +87,7 @@ impl<'a> DefCollector<'a> {
|
82 | 87 | .or_else(|| index.map(sym::integer))
|
83 | 88 | .unwrap_or_else(|| {
|
84 | 89 | let node_id = NodeId::placeholder_from_expn_id(self.expansion);
|
85 |
| - sym::integer(self.definitions.placeholder_field_indices[&node_id]) |
| 90 | + sym::integer(self.definitions.placeholder_field_index(node_id)) |
86 | 91 | });
|
87 | 92 | let def = self.create_def(field.id, DefPathData::ValueNs(name), field.span);
|
88 | 93 | self.with_parent(def, |this| visit::walk_struct_field(this, field));
|
@@ -186,7 +191,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
|
186 | 191 | for (index, field) in data.fields().iter().enumerate() {
|
187 | 192 | self.collect_field(field, Some(index));
|
188 | 193 | if field.is_placeholder && field.ident.is_none() {
|
189 |
| - self.definitions.placeholder_field_indices.insert(field.id, index); |
| 194 | + self.definitions.set_placeholder_field_index(field.id, index); |
190 | 195 | }
|
191 | 196 | }
|
192 | 197 | }
|
|
0 commit comments