diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-12-17 08:35:40 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-12-17 11:50:30 -0800 |
| commit | a02885e167bcc673208c45b5465dbec78ec8328d (patch) | |
| tree | 9c6b2b91098012462430e3d3fe92c9c344d4c36f /src/libsyntax | |
| parent | b496adaefb440cbe01c3896bb1ef5ab1022227bb (diff) | |
| parent | 7d4e7f079552a524440d8b5fb656d52661592aee (diff) | |
| download | rust-a02885e167bcc673208c45b5465dbec78ec8328d.tar.gz rust-a02885e167bcc673208c45b5465dbec78ec8328d.zip | |
rollup merge of #19918: pnkfelix/ast-refactor-make-place-in-exprbox-an-option
This is to allow us to migrate away from UnUniq in a followup commit, and thus unify the code paths related to all forms of `box`.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 2 |
5 files changed, 8 insertions, 5 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 206fb26eb55..98d858babb1 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -696,7 +696,7 @@ pub struct Expr { #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] pub enum Expr_ { /// First expr is the place; second expr is the value. - ExprBox(P<Expr>, P<Expr>), + ExprBox(Option<P<Expr>>, P<Expr>), ExprVec(Vec<P<Expr>>), ExprCall(P<Expr>, Vec<P<Expr>>), ExprMethodCall(SpannedIdent, Vec<P<Ty>>, Vec<P<Expr>>), diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 8a578c2cb05..7d2acd08d94 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -1282,7 +1282,7 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span}: Expr, folder: &mut T) -> id: folder.new_id(id), node: match node { ExprBox(p, e) => { - ExprBox(folder.fold_expr(p), folder.fold_expr(e)) + ExprBox(p.map(|e|folder.fold_expr(e)), folder.fold_expr(e)) } ExprVec(exprs) => { ExprVec(exprs.move_map(|x| folder.fold_expr(x))) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index b9ef3fdbd49..6e3cfe5854a 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2888,7 +2888,7 @@ impl<'a> Parser<'a> { } let subexpression = self.parse_prefix_expr(); hi = subexpression.span.hi; - ex = ExprBox(place, subexpression); + ex = ExprBox(Some(place), subexpression); return self.mk_expr(lo, hi, ex); } } @@ -2896,6 +2896,9 @@ impl<'a> Parser<'a> { // Otherwise, we use the unique pointer default. let subexpression = self.parse_prefix_expr(); hi = subexpression.span.hi; + // FIXME (pnkfelix): After working out kinks with box + // desugaring, should be `ExprBox(None, subexpression)` + // instead. ex = self.mk_unary(UnUniq, subexpression); } _ => return self.parse_dot_or_call_expr() diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 18793525e82..cbbfcfef72e 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1501,7 +1501,7 @@ impl<'a> State<'a> { ast::ExprBox(ref p, ref e) => { try!(word(&mut self.s, "box")); try!(word(&mut self.s, "(")); - try!(self.print_expr(&**p)); + try!(p.as_ref().map_or(Ok(()), |e|self.print_expr(&**e))); try!(self.word_space(")")); try!(self.print_expr(&**e)); } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index cf3efeeeb8f..95d7906b443 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -742,7 +742,7 @@ pub fn walk_mac<'v, V: Visitor<'v>>(_: &mut V, _: &'v Mac) { pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) { match expression.node { ExprBox(ref place, ref subexpression) => { - visitor.visit_expr(&**place); + place.as_ref().map(|e|visitor.visit_expr(&**e)); visitor.visit_expr(&**subexpression) } ExprVec(ref subexpressions) => { |
