From ce80094632c727ef87b465fc87873cce1c471ad6 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Wed, 30 Sep 2015 14:56:19 +1300 Subject: [PATCH] Make save-analysis work for `if let` etc. --- src/librustc_trans/save/dump_csv.rs | 10 +++++++++- src/test/run-make/save-analysis/foo.rs | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/librustc_trans/save/dump_csv.rs b/src/librustc_trans/save/dump_csv.rs index c0021bdc060..256774756b8 100644 --- a/src/librustc_trans/save/dump_csv.rs +++ b/src/librustc_trans/save/dump_csv.rs @@ -1132,12 +1132,20 @@ impl<'l, 'tcx, 'v> Visitor<'v> for DumpCsvVisitor<'l, 'tcx> { // walk the body self.nest(ex.id, |v| v.visit_block(&**body)); } - ast::ExprForLoop(ref pattern, ref subexpression, ref block, _) => { + ast::ExprForLoop(ref pattern, ref subexpression, ref block, _) | + ast::ExprWhileLet(ref pattern, ref subexpression, ref block, _) => { let value = self.span.snippet(mk_sp(ex.span.lo, subexpression.span.hi)); self.process_var_decl(pattern, value); visit::walk_expr(self, subexpression); visit::walk_block(self, block); } + ast::ExprIfLet(ref pattern, ref subexpression, ref block, ref opt_else) => { + let value = self.span.snippet(mk_sp(ex.span.lo, subexpression.span.hi)); + self.process_var_decl(pattern, value); + visit::walk_expr(self, subexpression); + visit::walk_block(self, block); + opt_else.as_ref().map(|el| visit::walk_expr(self, el)); + } _ => { visit::walk_expr(self, ex) } diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs index 4981ea475d3..3e4ba5af80c 100644 --- a/src/test/run-make/save-analysis/foo.rs +++ b/src/test/run-make/save-analysis/foo.rs @@ -339,8 +339,27 @@ fn main() { // foo if let SomeEnum::Strings(..) = s7 { println!("hello!"); } + + for i in 0..5 { + foo_foo(i); + } + + if let Some(x) = None { + foo_foo(x); + } + + if false { + } else if let Some(y) = None { + foo_foo(y); + } + + while let Some(z) = None { + foo_foo(z); + } } +fn foo_foo(_: i32) {} + impl Iterator for nofields { type Item = (usize, usize);