Print variadic argument pattern in HIR pretty printer
This commit is contained in:
parent
b66fe58f68
commit
2c1dbed4aa
@ -502,13 +502,13 @@ impl<'a> State<'a> {
|
||||
self.word(";");
|
||||
self.end(); // end the outer cbox
|
||||
}
|
||||
hir::ItemKind::Fn(ref sig, param_names, body) => {
|
||||
hir::ItemKind::Fn(ref sig, generics, body) => {
|
||||
self.head("");
|
||||
self.print_fn(
|
||||
sig.decl,
|
||||
sig.header,
|
||||
Some(item.ident.name),
|
||||
param_names,
|
||||
generics,
|
||||
&[],
|
||||
Some(body),
|
||||
);
|
||||
@ -1948,11 +1948,10 @@ impl<'a> State<'a> {
|
||||
self.print_generic_params(generics.params);
|
||||
|
||||
self.popen();
|
||||
let mut i = 0;
|
||||
// Make sure we aren't supplied *both* `arg_names` and `body_id`.
|
||||
assert!(arg_names.is_empty() || body_id.is_none());
|
||||
self.commasep(Inconsistent, decl.inputs, |s, ty| {
|
||||
s.ibox(INDENT_UNIT);
|
||||
let mut i = 0;
|
||||
let mut print_arg = |s: &mut Self| {
|
||||
if let Some(arg_name) = arg_names.get(i) {
|
||||
s.word(arg_name.to_string());
|
||||
s.word(":");
|
||||
@ -1963,11 +1962,17 @@ impl<'a> State<'a> {
|
||||
s.space();
|
||||
}
|
||||
i += 1;
|
||||
};
|
||||
self.commasep(Inconsistent, decl.inputs, |s, ty| {
|
||||
s.ibox(INDENT_UNIT);
|
||||
print_arg(s);
|
||||
s.print_type(ty);
|
||||
s.end()
|
||||
s.end();
|
||||
});
|
||||
if decl.c_variadic {
|
||||
self.word(", ...");
|
||||
self.word(", ");
|
||||
print_arg(self);
|
||||
self.word("...");
|
||||
}
|
||||
self.pclose();
|
||||
|
||||
|
15
tests/pretty/hir-fn-variadic.pp
Normal file
15
tests/pretty/hir-fn-variadic.pp
Normal file
@ -0,0 +1,15 @@
|
||||
// pretty-compare-only
|
||||
// pretty-mode:hir
|
||||
// pp-exact:hir-fn-variadic.pp
|
||||
|
||||
#![feature(c_variadic)]
|
||||
#[prelude_import]
|
||||
use ::std::prelude::rust_2015::*;
|
||||
#[macro_use]
|
||||
extern crate std;
|
||||
|
||||
extern "C" {
|
||||
fn foo(x: i32, ...);
|
||||
}
|
||||
|
||||
unsafe extern "C" fn bar(_: i32, mut va2: ...) -> usize { va2.arg::<usize>() }
|
13
tests/pretty/hir-fn-variadic.rs
Normal file
13
tests/pretty/hir-fn-variadic.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// pretty-compare-only
|
||||
// pretty-mode:hir
|
||||
// pp-exact:hir-fn-variadic.pp
|
||||
|
||||
#![feature(c_variadic)]
|
||||
|
||||
extern "C" {
|
||||
pub fn foo(x: i32, va1: ...);
|
||||
}
|
||||
|
||||
pub unsafe extern "C" fn bar(_: i32, mut va2: ...) -> usize {
|
||||
va2.arg::<usize>()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user