@@ -33,7 +33,6 @@ pub struct DefCollector<'a> {
33
33
pub struct MacroInvocationData {
34
34
pub mark : Mark ,
35
35
pub def_index : DefIndex ,
36
- pub const_expr : bool ,
37
36
}
38
37
39
38
impl < ' a > DefCollector < ' a > {
@@ -74,25 +73,10 @@ impl<'a> DefCollector<'a> {
74
73
self . parent_def = parent;
75
74
}
76
75
77
- pub fn visit_const_expr ( & mut self , expr : & Expr ) {
78
- match expr. node {
79
- // Find the node which will be used after lowering.
80
- ExprKind :: Paren ( ref inner) => return self . visit_const_expr ( inner) ,
81
- ExprKind :: Mac ( ..) => return self . visit_macro_invoc ( expr. id , true ) ,
82
- // FIXME(eddyb) Closures should have separate
83
- // function definition IDs and expression IDs.
84
- ExprKind :: Closure ( ..) => return ,
85
- _ => { }
86
- }
87
-
88
- self . create_def ( expr. id , DefPathData :: Initializer , REGULAR_SPACE , expr. span ) ;
89
- }
90
-
91
- fn visit_macro_invoc ( & mut self , id : NodeId , const_expr : bool ) {
76
+ fn visit_macro_invoc ( & mut self , id : NodeId ) {
92
77
if let Some ( ref mut visit) = self . visit_macro_invoc {
93
78
visit ( MacroInvocationData {
94
79
mark : id. placeholder_to_mark ( ) ,
95
- const_expr,
96
80
def_index : self . parent_def . unwrap ( ) ,
97
81
} )
98
82
}
@@ -119,7 +103,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
119
103
ItemKind :: Static ( ..) | ItemKind :: Const ( ..) | ItemKind :: Fn ( ..) =>
120
104
DefPathData :: ValueNs ( i. ident . name . as_interned_str ( ) ) ,
121
105
ItemKind :: MacroDef ( ..) => DefPathData :: MacroDef ( i. ident . name . as_interned_str ( ) ) ,
122
- ItemKind :: Mac ( ..) => return self . visit_macro_invoc ( i. id , false ) ,
106
+ ItemKind :: Mac ( ..) => return self . visit_macro_invoc ( i. id ) ,
123
107
ItemKind :: GlobalAsm ( ..) => DefPathData :: Misc ,
124
108
ItemKind :: Use ( ..) => {
125
109
return visit:: walk_item ( self , i) ;
@@ -129,30 +113,6 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
129
113
130
114
self . with_parent ( def, |this| {
131
115
match i. node {
132
- ItemKind :: Enum ( ref enum_definition, _) => {
133
- for v in & enum_definition. variants {
134
- let variant_def_index =
135
- this. create_def ( v. node . data . id ( ) ,
136
- DefPathData :: EnumVariant ( v. node . ident
137
- . name . as_interned_str ( ) ) ,
138
- REGULAR_SPACE ,
139
- v. span ) ;
140
- this. with_parent ( variant_def_index, |this| {
141
- for ( index, field) in v. node . data . fields ( ) . iter ( ) . enumerate ( ) {
142
- let name = field. ident . map ( |ident| ident. name )
143
- . unwrap_or_else ( || Symbol :: intern ( & index. to_string ( ) ) ) ;
144
- this. create_def ( field. id ,
145
- DefPathData :: Field ( name. as_interned_str ( ) ) ,
146
- REGULAR_SPACE ,
147
- field. span ) ;
148
- }
149
-
150
- if let Some ( ref expr) = v. node . disr_expr {
151
- this. visit_const_expr ( expr) ;
152
- }
153
- } ) ;
154
- }
155
- }
156
116
ItemKind :: Struct ( ref struct_def, _) | ItemKind :: Union ( ref struct_def, _) => {
157
117
// If this is a tuple-like struct, register the constructor.
158
118
if !struct_def. is_struct ( ) {
@@ -161,15 +121,6 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
161
121
REGULAR_SPACE ,
162
122
i. span ) ;
163
123
}
164
-
165
- for ( index, field) in struct_def. fields ( ) . iter ( ) . enumerate ( ) {
166
- let name = field. ident . map ( |ident| ident. name )
167
- . unwrap_or_else ( || Symbol :: intern ( & index. to_string ( ) ) ) ;
168
- this. create_def ( field. id ,
169
- DefPathData :: Field ( name. as_interned_str ( ) ) ,
170
- REGULAR_SPACE ,
171
- field. span ) ;
172
- }
173
124
}
174
125
_ => { }
175
126
}
@@ -184,7 +135,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
184
135
185
136
fn visit_foreign_item ( & mut self , foreign_item : & ' a ForeignItem ) {
186
137
if let ForeignItemKind :: Macro ( _) = foreign_item. node {
187
- return self . visit_macro_invoc ( foreign_item. id , false ) ;
138
+ return self . visit_macro_invoc ( foreign_item. id ) ;
188
139
}
189
140
190
141
let def = self . create_def ( foreign_item. id ,
@@ -197,6 +148,28 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
197
148
} ) ;
198
149
}
199
150
151
+ fn visit_variant ( & mut self , v : & ' a Variant , g : & ' a Generics , item_id : NodeId ) {
152
+ let def = self . create_def ( v. node . data . id ( ) ,
153
+ DefPathData :: EnumVariant ( v. node . ident
154
+ . name . as_interned_str ( ) ) ,
155
+ REGULAR_SPACE ,
156
+ v. span ) ;
157
+ self . with_parent ( def, |this| visit:: walk_variant ( this, v, g, item_id) ) ;
158
+ }
159
+
160
+ fn visit_variant_data ( & mut self , data : & ' a VariantData , _: Ident ,
161
+ _: & ' a Generics , _: NodeId , _: Span ) {
162
+ for ( index, field) in data. fields ( ) . iter ( ) . enumerate ( ) {
163
+ let name = field. ident . map ( |ident| ident. name )
164
+ . unwrap_or_else ( || Symbol :: intern ( & index. to_string ( ) ) ) ;
165
+ let def = self . create_def ( field. id ,
166
+ DefPathData :: Field ( name. as_interned_str ( ) ) ,
167
+ REGULAR_SPACE ,
168
+ field. span ) ;
169
+ self . with_parent ( def, |this| this. visit_struct_field ( field) ) ;
170
+ }
171
+ }
172
+
200
173
fn visit_generic_param ( & mut self , param : & ' a GenericParam ) {
201
174
match * param {
202
175
GenericParam :: Lifetime ( ref lifetime_def) => {
@@ -227,7 +200,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
227
200
TraitItemKind :: Type ( ..) => {
228
201
DefPathData :: AssocTypeInTrait ( ti. ident . name . as_interned_str ( ) )
229
202
} ,
230
- TraitItemKind :: Macro ( ..) => return self . visit_macro_invoc ( ti. id , false ) ,
203
+ TraitItemKind :: Macro ( ..) => return self . visit_macro_invoc ( ti. id ) ,
231
204
} ;
232
205
233
206
let def = self . create_def ( ti. id , def_data, ITEM_LIKE_SPACE , ti. span ) ;
@@ -239,7 +212,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
239
212
ImplItemKind :: Method ( ..) | ImplItemKind :: Const ( ..) =>
240
213
DefPathData :: ValueNs ( ii. ident . name . as_interned_str ( ) ) ,
241
214
ImplItemKind :: Type ( ..) => DefPathData :: AssocTypeInImpl ( ii. ident . name . as_interned_str ( ) ) ,
242
- ImplItemKind :: Macro ( ..) => return self . visit_macro_invoc ( ii. id , false ) ,
215
+ ImplItemKind :: Macro ( ..) => return self . visit_macro_invoc ( ii. id ) ,
243
216
} ;
244
217
245
218
let def = self . create_def ( ii. id , def_data, ITEM_LIKE_SPACE , ii. span ) ;
@@ -248,17 +221,24 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
248
221
249
222
fn visit_pat ( & mut self , pat : & ' a Pat ) {
250
223
match pat. node {
251
- PatKind :: Mac ( ..) => return self . visit_macro_invoc ( pat. id , false ) ,
224
+ PatKind :: Mac ( ..) => return self . visit_macro_invoc ( pat. id ) ,
252
225
_ => visit:: walk_pat ( self , pat) ,
253
226
}
254
227
}
255
228
229
+ fn visit_anon_const ( & mut self , constant : & ' a AnonConst ) {
230
+ let def = self . create_def ( constant. id ,
231
+ DefPathData :: AnonConst ,
232
+ REGULAR_SPACE ,
233
+ constant. value . span ) ;
234
+ self . with_parent ( def, |this| visit:: walk_anon_const ( this, constant) ) ;
235
+ }
236
+
256
237
fn visit_expr ( & mut self , expr : & ' a Expr ) {
257
238
let parent_def = self . parent_def ;
258
239
259
240
match expr. node {
260
- ExprKind :: Mac ( ..) => return self . visit_macro_invoc ( expr. id , false ) ,
261
- ExprKind :: Repeat ( _, ref count) => self . visit_const_expr ( count) ,
241
+ ExprKind :: Mac ( ..) => return self . visit_macro_invoc ( expr. id ) ,
262
242
ExprKind :: Closure ( ..) => {
263
243
let def = self . create_def ( expr. id ,
264
244
DefPathData :: ClosureExpr ,
@@ -275,20 +255,18 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
275
255
276
256
fn visit_ty ( & mut self , ty : & ' a Ty ) {
277
257
match ty. node {
278
- TyKind :: Mac ( ..) => return self . visit_macro_invoc ( ty. id , false ) ,
279
- TyKind :: Array ( _, ref length) => self . visit_const_expr ( length) ,
258
+ TyKind :: Mac ( ..) => return self . visit_macro_invoc ( ty. id ) ,
280
259
TyKind :: ImplTrait ( ..) => {
281
260
self . create_def ( ty. id , DefPathData :: ImplTrait , REGULAR_SPACE , ty. span ) ;
282
261
}
283
- TyKind :: Typeof ( ref expr) => self . visit_const_expr ( expr) ,
284
262
_ => { }
285
263
}
286
264
visit:: walk_ty ( self , ty) ;
287
265
}
288
266
289
267
fn visit_stmt ( & mut self , stmt : & ' a Stmt ) {
290
268
match stmt. node {
291
- StmtKind :: Mac ( ..) => self . visit_macro_invoc ( stmt. id , false ) ,
269
+ StmtKind :: Mac ( ..) => self . visit_macro_invoc ( stmt. id ) ,
292
270
_ => visit:: walk_stmt ( self , stmt) ,
293
271
}
294
272
}
@@ -298,7 +276,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
298
276
match nt. 0 {
299
277
token:: NtExpr ( ref expr) => {
300
278
if let ExprKind :: Mac ( ..) = expr. node {
301
- self . visit_macro_invoc ( expr. id , false ) ;
279
+ self . visit_macro_invoc ( expr. id ) ;
302
280
}
303
281
}
304
282
_ => { }
0 commit comments