]> git.lizzy.rs Git - rust.git/commitdiff
print errors in one central location
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 9 Jun 2016 14:13:42 +0000 (16:13 +0200)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 9 Jun 2016 14:13:42 +0000 (16:13 +0200)
src/interpreter/mod.rs
src/interpreter/stepper.rs

index 1e65bc0aeaec53de493af19befa465810492f09d..8ac86e3ad1349490743028485e3f48c1c37700e0 100644 (file)
@@ -322,7 +322,7 @@ fn type_layout(&self, ty: Ty<'tcx>, substs: &'tcx Substs<'tcx>) -> &'tcx Layout
 
     #[inline(never)]
     #[cold]
-    fn report(&self, e: &EvalError) {
+    fn report(&self, e: EvalError) {
         let stmt = self.frame().stmt;
         let block = self.basic_block();
         let span = if stmt < block.statements.len() {
@@ -347,13 +347,6 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         err.emit();
     }
 
-    fn maybe_report<T>(&self, r: EvalResult<T>) -> EvalResult<T> {
-        if let Err(ref e) = r {
-            self.report(e);
-        }
-        r
-    }
-
     fn run(&mut self) -> EvalResult<()> {
         let mut stepper = stepper::Stepper::new(self);
         while stepper.step()? {}
@@ -1435,10 +1428,7 @@ pub fn interpret_start_points<'a, 'tcx>(
                         gecx.memory.dump(return_ptr.alloc_id);
                     },
                     Ok(None) => warn!("diverging function returned"),
-                    Err(_e) => {
-                        // TODO(solson): Detect whether the error was already reported or not.
-                        // tcx.sess.err(&e.to_string());
-                    }
+                    Err(e) => gecx.report(e),
                 }
             }
         }
index 38490bbc26b2d26832294baef03f6dc0e4c1f602..c73a46c84492673c280f6ba5bf92588bbec9a19a 100644 (file)
@@ -32,8 +32,7 @@ pub(super) fn new(gecx: &'fncx mut GlobalEvalContext<'a, 'tcx>) -> Self {
     fn statement(&mut self, stmt: &mir::Statement<'tcx>) -> EvalResult<()> {
         trace!("{:?}", stmt);
         let mir::StatementKind::Assign(ref lvalue, ref rvalue) = stmt.kind;
-        let result = self.gecx.eval_assignment(lvalue, rvalue);
-        self.gecx.maybe_report(result)?;
+        self.gecx.eval_assignment(lvalue, rvalue)?;
         self.gecx.frame_mut().stmt += 1;
         Ok(())
     }
@@ -42,8 +41,7 @@ fn terminator(&mut self, terminator: &mir::Terminator<'tcx>) -> EvalResult<()> {
         // after a terminator we go to a new block
         self.gecx.frame_mut().stmt = 0;
         trace!("{:?}", terminator.kind);
-        let result = self.gecx.eval_terminator(terminator);
-        self.gecx.maybe_report(result)?;
+        self.gecx.eval_terminator(terminator)?;
         if !self.gecx.stack.is_empty() {
             trace!("// {:?}", self.gecx.frame().next_block);
         }