@@ -18,7 +18,8 @@ use rustc_ast_pretty::pprust::state::MacHeader;
1818use rustc_ast_pretty:: pprust:: { Comments , PrintState } ;
1919use rustc_hir:: {
2020 BindingMode , ByRef , ConstArgKind , GenericArg , GenericBound , GenericParam , GenericParamKind ,
21- HirId , LifetimeParamKind , Node , PatKind , PreciseCapturingArg , RangeEnd , Term , TyPatKind ,
21+ HirId , ImplicitSelfKind , LifetimeParamKind , Node , PatKind , PreciseCapturingArg , RangeEnd , Term ,
22+ TyPatKind ,
2223} ;
2324use rustc_span:: source_map:: SourceMap ;
2425use rustc_span:: { FileName , Ident , Span , Symbol , kw} ;
@@ -2086,6 +2087,28 @@ impl<'a> State<'a> {
20862087 self . print_pat ( arg. pat ) ;
20872088 }
20882089
2090+ fn print_implicit_self ( & mut self , implicit_self_kind : & hir:: ImplicitSelfKind ) {
2091+ match implicit_self_kind {
2092+ ImplicitSelfKind :: Imm => {
2093+ self . word ( "self" ) ;
2094+ }
2095+ ImplicitSelfKind :: Mut => {
2096+ self . print_mutability ( hir:: Mutability :: Mut , false ) ;
2097+ self . word ( "self" ) ;
2098+ }
2099+ ImplicitSelfKind :: RefImm => {
2100+ self . word ( "&" ) ;
2101+ self . word ( "self" ) ;
2102+ }
2103+ ImplicitSelfKind :: RefMut => {
2104+ self . word ( "&" ) ;
2105+ self . print_mutability ( hir:: Mutability :: Mut , false ) ;
2106+ self . word ( "self" ) ;
2107+ }
2108+ ImplicitSelfKind :: None => unreachable ! ( ) ,
2109+ }
2110+ }
2111+
20892112 fn print_arm ( & mut self , arm : & hir:: Arm < ' _ > ) {
20902113 // I have no idea why this check is necessary, but here it
20912114 // is :(
@@ -2151,27 +2174,33 @@ impl<'a> State<'a> {
21512174 // Make sure we aren't supplied *both* `arg_names` and `body_id`.
21522175 assert ! ( arg_names. is_empty( ) || body_id. is_none( ) ) ;
21532176 let mut i = 0 ;
2154- let mut print_arg = |s : & mut Self | {
2155- if let Some ( arg_name) = arg_names. get ( i) {
2156- s. word ( arg_name. to_string ( ) ) ;
2157- s. word ( ":" ) ;
2158- s. space ( ) ;
2159- } else if let Some ( body_id) = body_id {
2160- s. ann . nested ( s, Nested :: BodyParamPat ( body_id, i) ) ;
2161- s. word ( ":" ) ;
2162- s. space ( ) ;
2177+ let mut print_arg = |s : & mut Self , ty : Option < & hir:: Ty < ' _ > > | {
2178+ if i == 0 && decl. implicit_self . has_implicit_self ( ) {
2179+ s. print_implicit_self ( & decl. implicit_self ) ;
2180+ } else {
2181+ if let Some ( arg_name) = arg_names. get ( i) {
2182+ s. word ( arg_name. to_string ( ) ) ;
2183+ s. word ( ":" ) ;
2184+ s. space ( ) ;
2185+ } else if let Some ( body_id) = body_id {
2186+ s. ann . nested ( s, Nested :: BodyParamPat ( body_id, i) ) ;
2187+ s. word ( ":" ) ;
2188+ s. space ( ) ;
2189+ }
2190+ if let Some ( ty) = ty {
2191+ s. print_type ( ty) ;
2192+ }
21632193 }
21642194 i += 1 ;
21652195 } ;
21662196 self . commasep ( Inconsistent , decl. inputs , |s, ty| {
21672197 s. ibox ( INDENT_UNIT ) ;
2168- print_arg ( s) ;
2169- s. print_type ( ty) ;
2198+ print_arg ( s, Some ( ty) ) ;
21702199 s. end ( ) ;
21712200 } ) ;
21722201 if decl. c_variadic {
21732202 self . word ( ", " ) ;
2174- print_arg ( self ) ;
2203+ print_arg ( self , None ) ;
21752204 self . word ( "..." ) ;
21762205 }
21772206 self . pclose ( ) ;
0 commit comments