rollup merge of #18362 : kevinmehall/pprint-struct-pat-shorthand

This commit is contained in:
Alex Crichton 2014-10-27 09:08:15 -07:00
commit 20b9897c58
5 changed files with 22 additions and 5 deletions

View File

@ -421,7 +421,7 @@ fn construct_witness(cx: &MatchCheckCtxt, ctor: &Constructor,
node: FieldPat {
ident: Ident::new(field.name),
pat: pat,
is_shorthand: true,
is_shorthand: false,
}
}).collect();
let has_more_fields = field_pats.len() < pats_len;

View File

@ -341,7 +341,7 @@ pub fn const_expr_to_pat(tcx: &ty::ctxt, expr: &Expr) -> P<Pat> {
node: FieldPat {
ident: field.ident.node,
pat: const_expr_to_pat(tcx, &*field.expr),
is_shorthand: true,
is_shorthand: false,
},
}).collect();
PatStruct(path.clone(), field_pats, false)

View File

@ -1250,7 +1250,7 @@ fn create_struct_pattern(&self,
// id is guaranteed to be Some
codemap::Spanned {
span: pat.span,
node: ast::FieldPat { ident: id.unwrap(), pat: pat, is_shorthand: true },
node: ast::FieldPat { ident: id.unwrap(), pat: pat, is_shorthand: false },
}
}).collect();
cx.pat_struct(self.span, matching_path, field_pats)

View File

@ -1997,8 +1997,10 @@ pub fn print_pat(&mut self, pat: &ast::Pat) -> IoResult<()> {
Consistent, fields.as_slice(),
|s, f| {
try!(s.cbox(indent_unit));
try!(s.print_ident(f.node.ident));
try!(s.word_nbsp(":"));
if !f.node.is_shorthand {
try!(s.print_ident(f.node.ident));
try!(s.word_nbsp(":"));
}
try!(s.print_pat(&*f.node.pat));
s.end()
},

View File

@ -0,0 +1,15 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// pp-exact
// pretty-compare-only
// Testing that shorthand struct patterns are preserved
fn main() { let Foo { a, ref b, mut c, x: y, z: z } = foo; }