Auto merge of #31160 - nxnfufunezn:ppwild-31073, r=eddyb

Fixes #31073
r? @eddyb
This commit is contained in:
bors
2016-01-26 09:33:18 +00:00
4 changed files with 50 additions and 15 deletions

View File

@@ -319,7 +319,7 @@ pub fn variant_to_string(var: &hir::Variant) -> String {
} }
pub fn arg_to_string(arg: &hir::Arg) -> String { pub fn arg_to_string(arg: &hir::Arg) -> String {
to_string(|s| s.print_arg(arg)) to_string(|s| s.print_arg(arg, false))
} }
pub fn visibility_qualified(vis: hir::Visibility, s: &str) -> String { pub fn visibility_qualified(vis: hir::Visibility, s: &str) -> String {
@@ -1935,7 +1935,8 @@ impl<'a> State<'a> {
pub fn print_fn_args(&mut self, pub fn print_fn_args(&mut self,
decl: &hir::FnDecl, decl: &hir::FnDecl,
opt_explicit_self: Option<&hir::ExplicitSelf_>) opt_explicit_self: Option<&hir::ExplicitSelf_>,
is_closure: bool)
-> io::Result<()> { -> io::Result<()> {
// It is unfortunate to duplicate the commasep logic, but we want the // It is unfortunate to duplicate the commasep logic, but we want the
// self type and the args all in the same box. // self type and the args all in the same box.
@@ -1965,7 +1966,7 @@ impl<'a> State<'a> {
} else { } else {
try!(self.word_space(",")); try!(self.word_space(","));
} }
try!(self.print_arg(arg)); try!(self.print_arg(arg, is_closure));
} }
self.end() self.end()
@@ -1976,7 +1977,7 @@ impl<'a> State<'a> {
opt_explicit_self: Option<&hir::ExplicitSelf_>) opt_explicit_self: Option<&hir::ExplicitSelf_>)
-> io::Result<()> { -> io::Result<()> {
try!(self.popen()); try!(self.popen());
try!(self.print_fn_args(decl, opt_explicit_self)); try!(self.print_fn_args(decl, opt_explicit_self, false));
if decl.variadic { if decl.variadic {
try!(word(&mut self.s, ", ...")); try!(word(&mut self.s, ", ..."));
} }
@@ -1987,7 +1988,7 @@ impl<'a> State<'a> {
pub fn print_fn_block_args(&mut self, decl: &hir::FnDecl) -> io::Result<()> { pub fn print_fn_block_args(&mut self, decl: &hir::FnDecl) -> io::Result<()> {
try!(word(&mut self.s, "|")); try!(word(&mut self.s, "|"));
try!(self.print_fn_args(decl, None)); try!(self.print_fn_args(decl, None, true));
try!(word(&mut self.s, "|")); try!(word(&mut self.s, "|"));
if let hir::DefaultReturn(..) = decl.output { if let hir::DefaultReturn(..) = decl.output {
@@ -2204,10 +2205,10 @@ impl<'a> State<'a> {
self.print_type(&*mt.ty) self.print_type(&*mt.ty)
} }
pub fn print_arg(&mut self, input: &hir::Arg) -> io::Result<()> { pub fn print_arg(&mut self, input: &hir::Arg, is_closure: bool) -> io::Result<()> {
try!(self.ibox(indent_unit)); try!(self.ibox(indent_unit));
match input.ty.node { match input.ty.node {
hir::TyInfer => try!(self.print_pat(&*input.pat)), hir::TyInfer if is_closure => try!(self.print_pat(&*input.pat)),
_ => { _ => {
match input.pat.node { match input.pat.node {
hir::PatIdent(_, ref path1, _) if hir::PatIdent(_, ref path1, _) if

View File

@@ -425,7 +425,7 @@ pub fn variant_to_string(var: &ast::Variant) -> String {
} }
pub fn arg_to_string(arg: &ast::Arg) -> String { pub fn arg_to_string(arg: &ast::Arg) -> String {
to_string(|s| s.print_arg(arg)) to_string(|s| s.print_arg(arg, false))
} }
pub fn mac_to_string(arg: &ast::Mac) -> String { pub fn mac_to_string(arg: &ast::Mac) -> String {
@@ -2672,8 +2672,8 @@ impl<'a> State<'a> {
} }
pub fn print_fn_args(&mut self, decl: &ast::FnDecl, pub fn print_fn_args(&mut self, decl: &ast::FnDecl,
opt_explicit_self: Option<&ast::ExplicitSelf_>) opt_explicit_self: Option<&ast::ExplicitSelf_>,
-> io::Result<()> { is_closure: bool) -> io::Result<()> {
// It is unfortunate to duplicate the commasep logic, but we want the // It is unfortunate to duplicate the commasep logic, but we want the
// self type and the args all in the same box. // self type and the args all in the same box.
try!(self.rbox(0, Inconsistent)); try!(self.rbox(0, Inconsistent));
@@ -2698,7 +2698,7 @@ impl<'a> State<'a> {
for arg in args { for arg in args {
if first { first = false; } else { try!(self.word_space(",")); } if first { first = false; } else { try!(self.word_space(",")); }
try!(self.print_arg(arg)); try!(self.print_arg(arg, is_closure));
} }
self.end() self.end()
@@ -2708,7 +2708,7 @@ impl<'a> State<'a> {
opt_explicit_self: Option<&ast::ExplicitSelf_>) opt_explicit_self: Option<&ast::ExplicitSelf_>)
-> io::Result<()> { -> io::Result<()> {
try!(self.popen()); try!(self.popen());
try!(self.print_fn_args(decl, opt_explicit_self)); try!(self.print_fn_args(decl, opt_explicit_self, false));
if decl.variadic { if decl.variadic {
try!(word(&mut self.s, ", ...")); try!(word(&mut self.s, ", ..."));
} }
@@ -2722,7 +2722,7 @@ impl<'a> State<'a> {
decl: &ast::FnDecl) decl: &ast::FnDecl)
-> io::Result<()> { -> io::Result<()> {
try!(word(&mut self.s, "|")); try!(word(&mut self.s, "|"));
try!(self.print_fn_args(decl, None)); try!(self.print_fn_args(decl, None, true));
try!(word(&mut self.s, "|")); try!(word(&mut self.s, "|"));
if let ast::DefaultReturn(..) = decl.output { if let ast::DefaultReturn(..) = decl.output {
@@ -2967,10 +2967,10 @@ impl<'a> State<'a> {
self.print_type(&*mt.ty) self.print_type(&*mt.ty)
} }
pub fn print_arg(&mut self, input: &ast::Arg) -> io::Result<()> { pub fn print_arg(&mut self, input: &ast::Arg, is_closure: bool) -> io::Result<()> {
try!(self.ibox(INDENT_UNIT)); try!(self.ibox(INDENT_UNIT));
match input.ty.node { match input.ty.node {
ast::TyInfer => try!(self.print_pat(&*input.pat)), ast::TyInfer if is_closure => try!(self.print_pat(&*input.pat)),
_ => { _ => {
match input.pat.node { match input.pat.node {
ast::PatIdent(_, ref path1, _) if ast::PatIdent(_, ref path1, _) if

View File

@@ -0,0 +1,17 @@
// Copyright 2016 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:issue-31073.pp
fn main() {
fn f1(x: i32, y: i32) -> i32 { y }
let f: fn(_, i32) -> i32 = f1;
f(1, 2);
}

View File

@@ -0,0 +1,17 @@
// Copyright 2016 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:issue-31073.pp
fn main() {
fn f1(x: i32, y: i32) -> i32 { y }
let f: fn(_, i32) -> i32 = f1;
f(1, 2);
}