]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/mir/visit.rs
Merge remote-tracking branch 'origin/master' into gen
[rust.git] / src / librustc / mir / visit.rs
index a6d115bf0391280e17c162b01ca146d9858b5674..6589e824187fd5b730c11b12166d249ef5aae044 100644 (file)
@@ -11,7 +11,7 @@
 use middle::const_val::ConstVal;
 use hir::def_id::DefId;
 use ty::subst::Substs;
-use ty::{ClosureSubsts, Region, Ty};
+use ty::{ClosureSubsts, Region, Ty, GeneratorInterior};
 use mir::*;
 use rustc_const_math::ConstUsize;
 use syntax_pos::Span;
@@ -226,6 +226,12 @@ fn visit_closure_substs(&mut self,
                 self.super_closure_substs(substs);
             }
 
+            fn visit_generator_interior(&mut self,
+                                    interior: & $($mutability)* GeneratorInterior<'tcx>,
+                                    _: Location) {
+                self.super_generator_interior(interior);
+            }
+
             fn visit_const_val(&mut self,
                                const_val: & $($mutability)* ConstVal,
                                _: Location) {
@@ -249,6 +255,10 @@ fn visit_local_decl(&mut self,
                 self.super_local_decl(local_decl);
             }
 
+            fn visit_local(&mut self,
+                                _local: & $($mutability)* Local) {
+            }
+
             fn visit_visibility_scope(&mut self,
                                       scope: & $($mutability)* VisibilityScope) {
                 self.super_visibility_scope(scope);
@@ -415,6 +425,7 @@ fn super_terminator_kind(&mut self,
 
                     TerminatorKind::Resume |
                     TerminatorKind::Return |
+                    TerminatorKind::GeneratorDrop |
                     TerminatorKind::Unreachable => {
                     }
 
@@ -461,6 +472,15 @@ fn super_terminator_kind(&mut self,
                         self.visit_branch(block, target);
                         cleanup.map(|t| self.visit_branch(block, t));
                     }
+
+                    TerminatorKind::Yield { ref $($mutability)* value,
+                                              resume,
+                                              drop } => {
+                        self.visit_operand(value, source_location);
+                        self.visit_branch(block, resume);
+                        drop.map(|t| self.visit_branch(block, t));
+                    }
+
                 }
             }
 
@@ -475,7 +495,9 @@ fn super_assert_message(&mut self,
                         self.visit_operand(len, location);
                         self.visit_operand(index, location);
                     }
-                    AssertMessage::Math(_) => {}
+                    AssertMessage::Math(_) => {},
+                    AssertMessage::GeneratorResumedAfterReturn => {},
+                    AssertMessage::GeneratorResumedAfterPanic => {},
                 }
             }
 
@@ -553,6 +575,13 @@ fn super_rvalue(&mut self,
                                 self.visit_def_id(def_id, location);
                                 self.visit_closure_substs(closure_substs, location);
                             }
+                            AggregateKind::Generator(ref $($mutability)* def_id,
+                                                   ref $($mutability)* closure_substs,
+                                                   ref $($mutability)* interior) => {
+                                self.visit_def_id(def_id, location);
+                                self.visit_closure_substs(closure_substs, location);
+                                self.visit_generator_interior(interior, location);
+                            }
                         }
 
                         for operand in operands {
@@ -580,7 +609,8 @@ fn super_lvalue(&mut self,
                             context: LvalueContext<'tcx>,
                             location: Location) {
                 match *lvalue {
-                    Lvalue::Local(_) => {
+                    Lvalue::Local(ref $($mutability)* local) => {
+                        self.visit_local(local);
                     }
                     Lvalue::Static(ref $($mutability)* static_) => {
                         self.visit_static(static_, context, location);
@@ -651,6 +681,7 @@ fn super_local_decl(&mut self,
                     ref $($mutability)* ty,
                     name: _,
                     ref $($mutability)* source_info,
+                    internal: _,
                     is_user_variable: _,
                 } = *local_decl;
 
@@ -719,6 +750,10 @@ fn super_ty(&mut self, _ty: & $($mutability)* Ty<'tcx>) {
             fn super_substs(&mut self, _substs: & $($mutability)* &'tcx Substs<'tcx>) {
             }
 
+            fn super_generator_interior(&mut self,
+                                    _interior: & $($mutability)* GeneratorInterior<'tcx>) {
+            }
+
             fn super_closure_substs(&mut self,
                                     _substs: & $($mutability)* ClosureSubsts<'tcx>) {
             }