diff --git a/src/librustc/middle/cfg/construct.rs b/src/librustc/middle/cfg/construct.rs index b76d4cb85890356b1f0b058368c1e37551f7353b..8a83147facebc39b3fa39111e3fae89588ce8833 100644 --- a/src/librustc/middle/cfg/construct.rs +++ b/src/librustc/middle/cfg/construct.rs @@ -300,7 +300,7 @@ fn expr(&mut self, expr: @ast::Expr, pred: CFGIndex) -> CFGIndex { guard_exit = self.opt_expr(arm.guard, guard_exit); // 2 let pats_exit = self.pats_any(arm.pats.as_slice(), guard_exit); // 3 - let body_exit = self.block(arm.body, pats_exit); // 4 + let body_exit = self.expr(arm.body, pats_exit); // 4 self.add_contained_edge(body_exit, expr_exit); // 5 } expr_exit diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index 1e38f5d9bd7f5861c09a36c5411ca3a15203f767..74acc10abc030eccb7f6f878d9c41eb66ce67635 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -534,7 +534,7 @@ fn walk_expr(&mut self, self.walk_pat_alternatives(arm.pats.as_slice(), body, loop_scopes); - self.walk_block(arm.body, body, loop_scopes); + self.walk_expr(arm.body, body, loop_scopes); join_bits(&self.dfcx.oper, body, in_out); } } @@ -915,4 +915,3 @@ fn bit_str(bit: uint) -> ~str { let lobits = 1 << (bit & 0xFF); format!("[{}:{}-{:02x}]", bit, byte, lobits) } - diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index cf909bbd1af1bd9d7744b54fa32de480c9926e47..f12c8ad0c829c305ffcd2395a49758decccc1653 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -1125,7 +1125,7 @@ pub fn propagate_through_expr(&self, expr: @Expr, succ: LiveNode) let mut first_merge = true; for arm in arms.iter() { let body_succ = - self.propagate_through_block(arm.body, succ); + self.propagate_through_expr(arm.body, succ); let guard_succ = self.propagate_through_opt_expr(arm.guard, body_succ); let arm_succ = diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index b96a4e4c1606497df4d2dabc6a20426c896d45c5..dc4325fdd72ae8f895298bcd45bc5948f1d0cbe1 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -632,7 +632,7 @@ pub fn consume_arm(&mut self, arm: &Arm) { self.consume_expr(*guard); } - self.consume_block(arm.body); + self.consume_expr(arm.body); } pub fn use_pat(&mut self, pat: @Pat) { diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 58de36a796825f0bc361526327b8a22c0074bd8d..07d0758c555c574c62df247472c7929f71e00bd0 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -4248,7 +4248,7 @@ fn resolve_arm(&mut self, arm: &Arm) { self.check_consistent_bindings(arm); visit::walk_expr_opt(self, arm.guard, ()); - self.resolve_block(arm.body); + self.resolve_expr(arm.body); let mut value_ribs = self.value_ribs.borrow_mut(); value_ribs.get().pop(); diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index d57557c5f1be36a5c3a35cca214fd3c254cd4a57..6247577c1a3c406d0407a8c2ae1a804d09bec007 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -1939,7 +1939,7 @@ fn trans_match_inner<'a>(scope_cx: &'a Block<'a>, let cleanup_scope = fcx.push_custom_cleanup_scope(); bcx = insert_lllocals(bcx, arm_data.bindings_map, cleanup::CustomScope(cleanup_scope)); - bcx = controlflow::trans_block(bcx, arm_data.arm.body, dest); + bcx = expr::trans_into(bcx, arm_data.arm.body, dest); bcx = fcx.pop_and_trans_custom_cleanup_scope(bcx, cleanup_scope); arm_cxs.push(bcx); } diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 44e6bbf91cf7c975acfc423024f653d04aa69d44..b76de7a6b8ae942156e725f54ae2ce08f67b0558 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -2665,7 +2665,7 @@ fn walk_expr(cx: &CrateContext, walk_expr(cx, *guard_exp, scope_stack, scope_map) } - walk_block(cx, arm_ref.body, scope_stack, scope_map); + walk_expr(cx, arm_ref.body, scope_stack, scope_map); }) } } diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index bef3de532011a9d1a76dbeac08717821688f8576..827acec30a38902f302d06edaed787cfce33966e 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -13,7 +13,7 @@ use middle::pat_util::{PatIdMap, pat_id_map, pat_is_binding, pat_is_const}; use middle::ty; use middle::typeck::check::demand; -use middle::typeck::check::{check_block, check_expr_has_type, FnCtxt}; +use middle::typeck::check::{check_expr, check_expr_has_type, FnCtxt}; use middle::typeck::check::{instantiate_path, lookup_def}; use middle::typeck::check::{structure_of, valid_range_bounds}; use middle::typeck::infer; @@ -74,7 +74,7 @@ pub fn check_match(fcx: @FnCtxt, }, None => () } - check_block(fcx, arm.body); + check_expr(fcx, arm.body); let bty = fcx.node_ty(arm.body.id); saw_err = saw_err || ty::type_is_error(bty); if guard_err { diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 947463d8f47b116ba93de9f6ff26859690068ba2..7efae9305e408e20df0bd6cc7c9ba8475500c011 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -491,7 +491,7 @@ pub enum Decl_ { pub struct Arm { pats: Vec<@Pat> , guard: Option<@Expr>, - body: P, + body: @Expr, } #[deriving(Clone, Eq, Encodable, Decodable, Hash)] diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 34625923ea1f6fb4ba0c4b1d37d8f38e1e6c4db4..8296ee34c5452690bf31552368afcfc6e4f4a881 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -679,7 +679,7 @@ fn arm(&self, _span: Span, pats: Vec<@ast::Pat> , expr: @ast::Expr) -> ast::Arm ast::Arm { pats: pats, guard: None, - body: self.block_expr(expr) + body: expr } } diff --git a/src/libsyntax/ext/deriving/primitive.rs b/src/libsyntax/ext/deriving/primitive.rs index ecd042eb172ef251fefb239e1dcf60a0c031e6eb..190f009103f5f67a833969acbd324f74dc0a6cdf 100644 --- a/src/libsyntax/ext/deriving/primitive.rs +++ b/src/libsyntax/ext/deriving/primitive.rs @@ -110,7 +110,7 @@ fn cs_from(name: &str, cx: &mut ExtCtxt, trait_span: Span, substr: &Substructure let arm = ast::Arm { pats: vec!(cx.pat_wild(span)), guard: Some(guard), - body: cx.block_expr(body), + body: body, }; arms.push(arm); @@ -129,7 +129,7 @@ fn cs_from(name: &str, cx: &mut ExtCtxt, trait_span: Span, substr: &Substructure let arm = ast::Arm { pats: vec!(cx.pat_wild(trait_span)), guard: None, - body: cx.block_expr(cx.expr_none(trait_span)), + body: cx.expr_none(trait_span), }; arms.push(arm); diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index b01ba7718ba58b4013634048adf396ffd4d410a9..e5b90393e0ad388db0e36adae35499082aa06a00 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -117,7 +117,7 @@ fn fold_arm(&mut self, a: &Arm) -> Arm { Arm { pats: a.pats.map(|x| self.fold_pat(*x)), guard: a.guard.map(|x| self.fold_expr(x)), - body: self.fold_block(a.body), + body: self.fold_expr(a.body), } } @@ -933,4 +933,3 @@ fn fold_ident(&mut self, _: ast::Ident) -> ast::Ident { ~"zz!zz((zz$zz:zz$(zz $zz:zz)zz+=>(zz$(zz$zz$zz)+)))"); } } - diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 2557af5e436a26dc026fcf700923a93b30745cc7..341151117f0eccabcc59b518c22af32ebf4b6fbe 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2634,16 +2634,7 @@ fn parse_match_expr(&mut self) -> @Expr { self.eat(&token::COMMA); } - let blk = P(ast::Block { - view_items: Vec::new(), - stmts: Vec::new(), - expr: Some(expr), - id: ast::DUMMY_NODE_ID, - rules: DefaultBlock, - span: expr.span, - }); - - arms.push(ast::Arm { pats: pats, guard: guard, body: blk }); + arms.push(ast::Arm { pats: pats, guard: guard, body: expr }); } let hi = self.span.hi; self.bump(); diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index ec8c474d194028fb267f2d40bc46d830149a16bc..e8c32d07c749874ec76170ad770d6a6986739b9a 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1352,38 +1352,22 @@ fn print_field(s: &mut State, field: &ast::Field) -> io::IoResult<()> { } try!(word_space(s, "=>")); - // Extract the expression from the extra block the parser adds - // in the case of foo => expr - if arm.body.view_items.is_empty() && - arm.body.stmts.is_empty() && - arm.body.rules == ast::DefaultBlock && - arm.body.expr.is_some() - { - match arm.body.expr { - Some(expr) => { - match expr.node { - ast::ExprBlock(blk) => { - // the block will close the pattern's ibox - try!(print_block_unclosed_indent( - s, blk, indent_unit)); - } - _ => { - try!(end(s)); // close the ibox for the pattern - try!(print_expr(s, expr)); - } - } - if !expr_is_simple_block(expr) - && i < len - 1 { - try!(word(&mut s.s, ",")); - } - try!(end(s)); // close enclosing cbox - } - None => fail!() + match arm.body.node { + ast::ExprBlock(blk) => { + // the block will close the pattern's ibox + try!(print_block_unclosed_indent( + s, blk, indent_unit)); } - } else { - // the block will close the pattern's ibox - try!(print_block_unclosed_indent(s, arm.body, indent_unit)); + _ => { + try!(end(s)); // close the ibox for the pattern + try!(print_expr(s, arm.body)); + } + } + if !expr_is_simple_block(expr) + && i < len - 1 { + try!(word(&mut s.s, ",")); } + try!(end(s)); // close enclosing cbox } try!(bclose_(s, expr.span, indent_unit)); } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 2edfd367f4ef2712442920a25ed42d24bae74d1f..d25d1a8cc35d91c605c1c585dbc60dffbf1ccc86 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -765,5 +765,5 @@ pub fn walk_arm>(visitor: &mut V, arm: &Arm, env: E) { visitor.visit_pat(*pattern, env.clone()) } walk_expr_opt(visitor, arm.guard, env.clone()); - visitor.visit_block(arm.body, env) + visitor.visit_expr(arm.body, env) }