@@ -76,6 +76,15 @@ pub trait MirVisitor {
76
76
self . super_place ( place, ptx, location)
77
77
}
78
78
79
+ fn visit_projection_elem (
80
+ & mut self ,
81
+ elem : & ProjectionElem ,
82
+ ptx : PlaceContext ,
83
+ location : Location ,
84
+ ) {
85
+ self . super_projection_elem ( elem, ptx, location) ;
86
+ }
87
+
79
88
fn visit_local ( & mut self , local : & Local , ptx : PlaceContext , location : Location ) {
80
89
let _ = ( local, ptx, location) ;
81
90
}
@@ -264,7 +273,29 @@ pub trait MirVisitor {
264
273
fn super_place ( & mut self , place : & Place , ptx : PlaceContext , location : Location ) {
265
274
let _ = location;
266
275
let _ = ptx;
267
- visit_opaque ( & Opaque ( place. projection . clone ( ) ) ) ;
276
+ self . visit_local ( & place. local , ptx, location) ;
277
+
278
+ for elem in & place. projection {
279
+ self . visit_projection_elem ( elem, ptx, location) ;
280
+ }
281
+ }
282
+
283
+ fn super_projection_elem (
284
+ & mut self ,
285
+ elem : & ProjectionElem ,
286
+ ptx : PlaceContext ,
287
+ location : Location ,
288
+ ) {
289
+ match elem {
290
+ ProjectionElem :: Deref => { }
291
+ ProjectionElem :: Field ( _idx, ty) => self . visit_ty ( ty, location) ,
292
+ ProjectionElem :: Index ( local) => self . visit_local ( local, ptx, location) ,
293
+ ProjectionElem :: ConstantIndex { offset : _, min_length : _, from_end : _ } => { }
294
+ ProjectionElem :: Subslice { from : _, to : _, from_end : _ } => { }
295
+ ProjectionElem :: Downcast ( _idx) => { }
296
+ ProjectionElem :: OpaqueCast ( ty) => self . visit_ty ( ty, location) ,
297
+ ProjectionElem :: Subtype ( ty) => self . visit_ty ( ty, location) ,
298
+ }
268
299
}
269
300
270
301
fn super_rvalue ( & mut self , rvalue : & Rvalue , location : Location ) {
0 commit comments